🐨CoalaCoding
Docs▾
JavaScriptReactHTML & CSSBackendAI & LLMDev ToolsCreative
B반1
👾숏츠
🙉B반2
게시판
🐨CoalaCoding

개발자를 위한 한국어 웹 기술 문서

문서

  • JavaScript
  • React
  • HTML & CSS
  • Backend
  • AI & LLM
  • Dev Tools
  • Creative

커뮤니티

  • 게시판
  • 예제 모음

기타

  • 관리자

정책

  • 소개
  • 개인정보처리방침
  • 이용약관
  • 연락처
© 2026 CoalaCoding. All rights reserved.
  • 1. topBtn
  • 2. rollingBanner
  • 3. menu
  • 4. stickyMenu
  • 5. accordion
  • 6. swiper
  • 7. activeMenu
  • 9. slide
  • 10. tab
  • 11. scrollEffect
  • 12. ajax
  • 13. tabSlide
  • 15. adaption
  • 18. 게슈탈트이론
  • 19. 색채심리학
  • 20. 황금비율
  • 21. 컬러모드
  • 22. 디자인실무용어
  • 23. 이미지파일의특징
  • 24. 폰트와사이즈
  • 25. 레이아웃기초
  • 26. 10가지법칙
  • 27. 아이트래킹
  • 28. 색상을성공적으로고르는방법
  • 29. 타이포그래피10가지팁
  • 30. 스타일가이드만들기
  • 31. 모바일디자인버튼
  • 32. 조형요소
  • 33. 6가지비주얼체계규칙
  • 34. 아이콘디자인이론
  • 35. 해상도와그리드시스템
  • 36. 피그마란
  • 37. 작업환경세팅
  • 38. 인터페이스예제
  • 39. 기능심화
  • 40. 인터페이스설계
  1. 홈
  2. 문서
  3. HTML & CSS
  4. UI 컴포넌트
  5. 5. accordion

5. accordion

1. 아코디언메뉴

가변높이의 아코디언 메뉴 만들어보자

1.1. 제이쿼리

지시문

투뎁스의 높이를 스크립트에서 가변적으로 조작하는 아코디언 메뉴를 만들어봅시다.

HTML

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>

  <body>
    <ul class="gnb">
      <li>
        <a href="#">회사소개</a>
        <ul class="sub">
          <li><a href="#">submenu1</a></li>
          <li><a href="#">submenu2</a></li>
          <li><a href="#">submenu3</a></li>
          <li><a href="#">submenu4</a></li>
          <li><a href="#">submenu5</a></li>
        </ul>
      </li>
      <li>
        <a href="#">제품소개</a>
        <ul class="sub">
          <li><a href="#">submenu1</a></li>
          <li><a href="#">submenu2</a></li>
          <li><a href="#">submenu3</a></li>
          <li><a href="#">submenu4</a></li>
          <li><a href="#">submenu5</a></li>
          <li><a href="#">submenu6</a></li>
          <li><a href="#">submenu7</a></li>
        </ul>
      </li>
      <li>
        <a href="#">커뮤니티</a>
        <ul class="sub">
          <li><a href="#">submenu1</a></li>
          <li><a href="#">submenu2</a></li>
          <li><a href="#">submenu3</a></li>
        </ul>
      </li>
      <li>
        <a href="#">다운로드</a>
        <ul class="sub">
          <li><a href="#">submenu1</a></li>
          <li><a href="#">submenu2</a></li>
        </ul>
      </li>
    </ul>
    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
  </body>
</html>

CSS

* {
  margin: 0;
  padding: 0;
}

html {
  font-size: 62.5%;
}

body {
  font-size: 1.6rem;
}

a {
  text-decoration: none;
}

ul,
li {
  list-style: none;
}

.gnb {
  width: 20rem;
  margin: 2rem auto 0;
  text-align: center;
  text-indent: 1rem;
}

.gnb > li > a {
  display: block;
  background: #390;
  cursor: pointer;
  line-height: 3rem;
  border-top: 0.1rem dotted #fff;
  color: #fff;
}

.gnb .sub li {
  line-height: 3rem;
  background: #cf9;
  padding: 1rem;
}

.gnb .sub li a {
  display: block;
  width: 100%;
  height: 100%;
  color: #222;
}

.gnb .sub li:hover {
  background: #cf0;
}

.sub {
  height: 0;
  transition: height 0.5s;
  overflow: hidden;
}

JQ

$(() => {
  $('.gnb>li').click(function () {
    let tg = $(this);
    let subH = $('.sub>li').innerHeight();
    let subLen = tg.find('li>a').length;
    let subTH = subH * subLen;
    $('.sub').removeClass('on').outerHeight(0);
    tg.find('.sub').addClass('on').outerHeight(subTH);
  });
});

1.2. 자바스크립트

지시문

투뎁스의 높이를 스크립트에서 가변적으로 조작하는 아코디언 메뉴를 만들어봅시다.

HTML

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>

  <body>
    <ul class="gnb">
      <li>
        <a href="#">회사소개</a>
        <ul class="sub">
          <li><a href="#">submenu1</a></li>
          <li><a href="#">submenu2</a></li>
          <li><a href="#">submenu3</a></li>
          <li><a href="#">submenu4</a></li>
          <li><a href="#">submenu5</a></li>
        </ul>
      </li>
      <li>
        <a href="#">제품소개</a>
        <ul class="sub">
          <li><a href="#">submenu1</a></li>
          <li><a href="#">submenu2</a></li>
          <li><a href="#">submenu3</a></li>
          <li><a href="#">submenu4</a></li>
          <li><a href="#">submenu5</a></li>
          <li><a href="#">submenu6</a></li>
          <li><a href="#">submenu7</a></li>
        </ul>
      </li>
      <li>
        <a href="#">커뮤니티</a>
        <ul class="sub">
          <li><a href="#">submenu1</a></li>
          <li><a href="#">submenu2</a></li>
          <li><a href="#">submenu3</a></li>
        </ul>
      </li>
      <li>
        <a href="#">다운로드</a>
        <ul class="sub">
          <li><a href="#">submenu1</a></li>
          <li><a href="#">submenu2</a></li>
        </ul>
      </li>
    </ul>
    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
  </body>
</html>

CSS

* {
  margin: 0;
  padding: 0;
}

html {
  font-size: 62.5%;
}

body {
  font-size: 1.6rem;
}

a {
  text-decoration: none;
}

ul,
li {
  list-style: none;
}

.gnb {
  width: 20rem;
  margin: 2rem auto 0;
  text-align: center;
  text-indent: 1rem;
}

.gnb > li > a {
  display: block;
  background: #390;
  cursor: pointer;
  line-height: 3rem;
  border-top: 0.1rem dotted #fff;
  color: #fff;
}

.gnb .sub li {
  line-height: 3rem;
  background: #cf9;
  padding: 1rem;
}

.gnb .sub li a {
  display: block;
  width: 100%;
  height: 100%;
  color: #222;
}

.gnb .sub li:hover {
  background: #cf0;
}

.sub {
  height: 0;
  transition: height 0.5s;
  overflow: hidden;
}

JQ

$(() => {
  $('.gnb>li').click(function () {
    let tg = $(this);
    let subH = $('.sub>li').innerHeight();
    let subLen = tg.find('li>a').length;
    let subTH = subH * subLen;
    $('.sub').removeClass('on').outerHeight(0);
    tg.find('.sub').addClass('on').outerHeight(subTH);
  });
});

JS

const depth1 = document.querySelectorAll('.gnb>li');
const sub = document.querySelectorAll('.sub');
depth1.forEach((el, idx) => {
  el.addEventListener('click', function () {
    let tg = this;
    let subH = document.querySelector('.sub>li').clientHeight;
    let subLen = tg.children[1].childElementCount;
    let subHT = subH * subLen;
    console.log(subHT);
    tg.querySelector('.sub').classList.remove('on');
    subOff();
    tg.querySelector('.sub').style.height = subHT + 'px';
  });
});
function subOff() {
  sub.forEach((el) => {
    el.classList.remove('on');
    el.style.height = 0;
  });
}

목차

  • 1.1. 제이쿼리
  • 1.2. 자바스크립트