jQuery를 사용하여 2단 탭 메뉴를 구현하는 방법을 소개합니다. 2단 탭 메뉴는 웹 페이지 내에서 다양한 컨텐츠를 효율적으로 구성하고, 사용자의 상호작용을 통해 해당 컨텐츠를 동적으로 표시하는 데 유용합니다. 이러한 탭 메뉴 구성은 정보의 구조화 및 사용자 경험(UX) 향상에 기여합니다.
HTML 구조
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  | <div class="tabs">
    <ul class="tab_nav">
        <li><a href="#tab1">Tab 1</a></li>
        <li><a href="#tab2">Tab 2</a></li>
        <li><a href="#tab3">Tab 3</a></li>
    </ul>
    <div class="tab" id="tab1">
        <h1>Tab 1</h1>
        <ul class="sub_tab_nav">
            <li><a href="#sub_tab1">Sub Tab 1</a></li>
            <li><a href="#sub_tab2">Sub Tab 2</a></li>
        </ul>
        <div class="sub_tab" id="sub_tab1">
            Sub Tab 1
        </div>
        <div class="sub_tab" id="sub_tab2">
            Sub Tab 2
        </div>
    </div>
    <div class="tab" id="tab2">
        <h1>Tab 2</h1>
        <ul class="sub_tab_nav">
            <li><a href="#sub_tab3">Sub Tab 3</a></li>
            <li><a href="#sub_tab4">Sub Tab 4</a></li>
        </ul>
        <div class="sub_tab" id="sub_tab3">
            Sub Tab 3
        </div>
        <div class="sub_tab" id="sub_tab4">
            Sub Tab 4
        </div>
    </div>
    <div class="tab" id="tab3">
        <h1>Tab 3</h1>
        <ul class="sub_tab_nav">
            <li><a href="#sub_tab5">Sub Tab 5</a></li>
            <li><a href="#sub_tab6">Sub Tab 6</a></li>
        </ul>
        <div class="sub_tab" id="sub_tab5">
            Sub Tab 5
        </div>
        <div class="sub_tab" id="sub_tab6">
            Sub Tab 6
        </div>
    </div>
</div>
  | 
tabs 클래스
모든 탭을 감싸는 컨테이너 역할을 합니다. 이 구조는 메인 탭(.tab_nav)과 각 메인 탭에 연결된 서브 탭들을 포함합니다.
tab_nav 클래스
메인 탭의 내비게이션을 구성하는 요소입니다. 이는 메인 탭들의 리스트를 포함합니다.
tab 클래스
각 메인 탭에 연결된 컨텐츠 영역입니다. 이 안에 서브 탭 내비게이션(.sub_tab_nav)과 서브 탭 컨텐츠(.sub_tab)가 포함됩니다.
CSS 스타일
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  | /* 전체 탭 컨테이너 */
.tabs { width: 100%; max-width: 800px; } 
/* 메인 탭과 서브 탭 내비게이션 바 */
.tab_nav, 
.sub_tab_nav { display: flex; align-items: center; position: relative; padding: 15px 15px 0; background: #f7f7f7; border: 1px solid #ddd; border-bottom: none; border-radius:6px 6px 0 0; } 
.sub_tab_nav { margin-top: 20px; } 
.tab_nav::after,
.sub_tab_nav::after { content: ''; position: absolute; bottom: 0; left: 0; width: 100%; height: 1px; background: #ddd; z-index: 1; } 
/* 메인 및 서브 탭 */
.tab_nav li a,
.sub_tab_nav li a { display: block; position: relative; padding: 10px 15px; border: 1px solid #f7f7f7; border-bottom: none; font-size: 18px; font-weight: 500; color: #000; z-index: 0; } 
/* 활성화된 탭 */
.tab_nav li.active a,
.sub_tab_nav li.active a { background: #fff; border-color: #ddd; border-radius:6px 6px 0 0; z-index: 2; } 
/* 탭 컨텐츠 영역 */
.tab, .sub_tab { display: none; padding: 15px; background-color: white; border: 1px solid #ddd; border-top: none; border-radius:0 0 6px 6px; } 
/* 활성화된 탭 컨텐츠 영역을 표시 */
.tab.active, .sub_tab.active { display: block; } 
  | 
.tabs, tab_nav, .sub_tab_nav
탭의 전체 레이아웃과 내비게이션 바의 스타일을 정의합니다. 이들은 탭과 서브 탭의 시각적 구분을 명확하게 합니다.
.tab_nav li a, .sub_tab_nav li a
메인 탭과 서브 탭의 개별 항목 스타일을 설정합니다. 이는 사용자가 탭을 쉽게 인식하고 클릭할 수 있게 합니다.
.tab, .sub_tab
각 탭에 대응하는 컨텐츠 영역의 스타일을 정의합니다. 기본적으로 숨겨져 있으며, 활성화된 탭에 해당하는 컨텐츠만 표시됩니다.
jQuery 코드
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
  | const subTabNav = $(".sub_tab_nav a"); // 서브 탭 앵커 태그
const tabNav = $(".tab_nav a"); // 메인 탭 앵커 태그
const tabNavLi = $('.tab_nav li'); // 메인 탭 리스트
// 서브 탭 클릭 이벤트 핸들러
subTabNav.on("click", function (e) {
    e.preventDefault();
    const target = $(this).attr("href");
    // 해당 서브 탭 활성화
    $(target).addClass("active").siblings('.active').removeClass("active");
    $(this).closest('li').addClass("active").siblings().removeClass("active");
});
// 메인 탭 클릭 이벤트 핸들러
tabNav.on("click", function (e) {
    e.preventDefault();
    const target = $(this).attr("href");
    // 해당 메인 탭 활성화
    $(target).addClass("active").siblings('.active').removeClass("active");
    $(this).closest('li').addClass("active").siblings().removeClass("active");
    // 서브 탭 유지 또는 첫 번째 서브 탭 활성화
    const subTabActive = $(target).find('.sub_tab_nav li.active');
    if (!subTabActive.length) {
        $(target).find('.sub_tab_nav li:first-child a').trigger('click');
    } else {
        subTabActive.find('a').trigger('click');
    }
});
// 페이지 로드 시 첫 번째 탭 활성화
const mainTabActive = tabNavLi.filter('.active');
if (!mainTabActive.length) {
    tabNavLi.first().find('a').trigger('click');
} else {
    mainTabActive.find('a').trigger('click');
}
  | 
변수 선언
subTabNav
sub_tab_nav 클래스 내의 모든 <a> 태그입니다. 서브 탭의 링크입니다.
tabNav
tab_nav 클래스 내의 모든 <a> 태그입니다. 메인 탭의 링크입니다.
tabNavLi
메인 탭의 <li> 요소입니다. 탭 목록의 각 항목입니다.
서브 탭 클릭 이벤트 핸들링
서브 탭 활성화
클릭 된 서브 탭의 컨텐츠를 활성화합니다.
타겟 요소 선택
클릭 된 링크의 href 값을 이용해 타겟 ID를 얻습니다.
탭 활성화 / 비활성화
선택된 서브 탭과 관련 컨텐츠를 활성화하고, 나머지는 비활성화합니다.
메인 탭 클릭 이벤트 핸들링
페이지 로드 시 첫 번째 탭 활성화
- 초기 탭 설정
페이지 로드 시, 첫 번째 메인 탭을 자동으로 활성화하거나 이미 활성화된 탭을 유지합니다.
 
결론
이 예제는 jQuery를 활용하여 2단 탭 메뉴를 구현하는 방법을 보여줍니다. 이러한 구조는 웹 페이지의 컨텐츠를 효과적으로 구성하고, 사용자에게 직관적인 탐색 경험을 제공합니다. 또한, 이 방법은 다양한 웹 애플리케이션과 사이트에서 정보를 깔끔하게 표시하는 데에 유용하게 사용될 수 있습니다.