JQuery 다중 탭 - jQuery dajung taeb

탭메뉴가 한페이지당 여러개가 사용되는 경우가 있다.

그때 클래스를 달리하여 하는 방법도 있지만, 유지보수나 운영측면에서 좋지않은 코드이기 때문에,

rel값을 이용해 여러개를 사용하는 방법을 알아보겠다.

See the Pen abpNGgW by aldo814 (@aldo814) on CodePen.

상단과 같이 탭메뉴가 되는 영역에 rel값을 주고, 

해당 탭메뉴에 id값을 동일하게 해주면 간단하게 페이지내 여러 탭메뉴를 사용할 수 있다.

처음 만들었던 사이트를 포트폴리오에 사용하기 위해 다시 만들고 있는데

메인 페이지에서 사용하는 3개의 탭 메뉴를

CSS에서 jQuery로 바꾸면서 스스로의 숙제가 생겨났다.

CSS로 구현할 수 있는 것은 CSS로 구현하는 것이 좋다고 들었기에

모달로 띄우는 로그인, 회원가입의 경우 그대로 CSS를 이용했지만

탭 메뉴도 이전처럼 CSS로 쓰기에는 코드가 너무 장황해진다!

당시 이 사이트를 만들 땐 아직 jQuery를 배우기 전이라

인접 형제 선택자를 사용해서 display: none;, display: block;을 했지만

각각 메뉴가 5개, 8개, 8개인 탭 메뉴를 이제 와서 CSS로 하기엔

CSS가 너무 더럽...

JQuery 다중 탭 - jQuery dajung taeb

그래서 검색하다가 처음 사용했던 제이쿼리 탭 메뉴 코드는 바로 이것!

38   한 메뉴를 클릭했을 때

39   전체 메뉴에 있는 active란 class를 제거하고

40   내가 선택한 메뉴에 active란 class를 부여한 후

41    전체 내용에서 내가 선택했던 메뉴와 같은 순번의 내용만 띄우고, 나머지 내용은 숨긴다.

처음엔 이 코드가 이해하기도 쉽고 적용하기에도 용이했지만

3개의 탭 메뉴를 사용하게 된다면 이와 같은걸 class만 바꾸어 세 번 작성해야 해서

CSS보다야 간단하지만, 간결하지 않기는 마찬가지였다.

그래서 다시 검색, 99%의 해답을 찾았다.

그럼 다시 처음부터-

JQuery 다중 탭 - jQuery dajung taeb

예를 들면 내가 만들고자 하는 탭 메뉴는 이런 방식이다.

왼쪽의 <li>을 클릭하면 오른쪽에서 그때그때 이에 대응하는 <div>가 바뀌는 것.

탭 메뉴가 몇 개든, 모양이 어떻든 상관없이 '각각' 작용하게 하는 것이 포인트!

JQuery 다중 탭 - jQuery dajung taeb

연습으로 간단한 HTML을 만든다.

<ul class="menu nav">, <li class="menu1">... 이 메뉴에 해당하고

<div class="menu tab">은 오른쪽에 보일 항목인데

div 또한 ul로 작성해도 무방하다.

JQuery 다중 탭 - jQuery dajung taeb

CSS도 간단하게.

JQuery 다중 탭 - jQuery dajung taeb

그리고 검색해서 찾은 이번 문제의 해답.

탭 메뉴를 플러그인으로 만들어 호출해서 쓰는 방식인데

여기서 16, 19번째 줄만 추가했다.

예제에서는 미리 active 해놓은 메뉴가 없어서 16번째 줄이 없어도 상관없었는데,

나는 처음에 내가 선택한 메뉴가 없다고 해서 내용이 비어있는 게 아니라

처음부터 내용 하나는 반드시 띄워져 있어야 했기 때문에

JQuery 다중 탭 - jQuery dajung taeb

이렇게 처음부터 메뉴와 내용의 첫 항목에 각각 active를 걸어두었다.

그래서 그냥 예제의 코드대로만 사용하면 내가 menu3을 클릭하면 menu3이 active 되면서도

처음 작성해 둔 menu1의 active가 없어지지 않아 두 개의 메뉴가 활성화된 것처럼 보인다.

그래서 일단 16번째 줄 추가.

그리고 19번째 줄의 경우 메뉴에 해당하는 오른쪽 내용(<div>)이 각각 바뀌지 않아서 추가한 건데

이건 맨 처음 사용했던 제이쿼리 코드에서 가져와 약간만 수정해서 사용했다.

말로 풀자면-

내가 선택한 메뉴(<li>)의 부모 요소인 'ul'의 다음 요소(<div>)의 자식 요소들(div.menu1, div.menu2...) 중에서

내가 선택한 메뉴($(this))와 같은 순번의 내용을 보이게 하고, 전체 형제 요소는 숨긴다.

JQuery 다중 탭 - jQuery dajung taeb

그리고 이렇게 HTML에 불러오고 호출해서 완성.

JQuery 다중 탭 - jQuery dajung taeb

두 탭 메뉴의 클래스가 같아도 꼬이는 일 없이

각각의 메뉴가 잘 적용된다!

이 방식대로라면 한 페이지에 탭 메뉴가 열개든 백개든 상관없이 사용할 수 있다.

예전에 swiper를 사용할 때에도 한 페이지에 여러 개를 사용하느라

수업 내내 고민하다가 겨우 해결하곤 했었는데

탭 메뉴 고민도 이걸로 덜 수 있겠다.

이제 몇 개든 상관없어!

우선 jquery-ui 버전을 사용하였습니다.
jquery-ui 버전은 현재 최신버전을 다운로드 하여 사용해주시길 바랍니다.

https://jqueryui.com/tabs/
위 주소로 이동하시게 되면 해당 소스코드를 볼 수 있습니다.
 

<!doctype html>

<html lang="en">

<head>

  <meta charset="utf-8">

  <meta name="viewport" content="width=device-width, initial-scale=1">

  <title>jQuery UI Tabs - Default functionality</title>

  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">

  <link rel="stylesheet" href="/resources/demos/style.css">

  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>

  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

  <script>

  $( function() {

    $( "#tabs" ).tabs();

  } );

  </script>

</head>

<body>

<div id="tabs1">

  <ul>

    <li><a href="#tabs-1">Nunc tincidunt</a></li>

    <li><a href="#tabs-2">Proin dolor</a></li>

    <li><a href="#tabs-3">Aenean lacinia</a></li>

  </ul>

  <div id="tabs-1">

    <p>탭메뉴 1번 내용</p>

  </div>

  <div id="tabs-2">

    <p>탭메뉴 2번 내용</p>

  </div>

  <div id="tabs-3">

    <p>탭메뉴 3번 내용</p>

  </div>

</div>

</body>

</html>

위처럼 jquery 와 jquery-ui 를 링크 하셔서 사용 하시면 됩니다.
글을 작성하는 이유는 여러개의 탭메뉴를 사용하기 위함 입니다.
아래와 같이 두개의 탭을 사용하기 위해서 id 값에 숫자를 적었습니다.

  <script>

  $( function() {

    $( "#tabs1" ).tabs();
    $( "#tabs2" ).tabs();

  } );

 

</script>

위처럼 한개를 더 추가로 작성해 줍니다. 저 같은경우에는 처음부터 tabs1 , tabs2 로 나누었습니다.

[1번 탭메뉴]


<div id="tabs1">

  <ul>

    <li><a href="#tabs-1">Nunc tincidunt</a></li>

    <li><a href="#tabs-2">Proin dolor</a></li>

    <li><a href="#tabs-3">Aenean lacinia</a></li>

  </ul>

  <div id="tabs-1">

    <p>탭메뉴 1번 내용</p>

  </div>

  <div id="tabs-2">

    <p>탭메뉴 2번 내용</p>

  </div>

  <div id="tabs-3">

    <p>탭메뉴 3번 내용</p>

  </div>

</div>


[2번 탭메뉴]
 

<div id="tabs2">

  <ul>

    <li><a href="#tabs-1">Nunc tincidunt</a></li>

    <li><a href="#tabs-2">Proin dolor</a></li>

    <li><a href="#tabs-3">Aenean lacinia</a></li>

  </ul>

  <div id="tabs-1">

    <p>탭메뉴 1번 내용</p>

  </div>

  <div id="tabs-2">

    <p>탭메뉴 2번 내용</p>

  </div>

  <div id="tabs-3">

    <p>탭메뉴 3번 내용</p>

  </div>

</div>


위처럼 아이디 값만 추가로 등록해서 사용하시면 다중탭을 아주 쉽게 사용할 수 있습니다.