LoginSignup
0
0

More than 1 year has passed since last update.

【jQuery】タブの作成方法

Posted at

完成形

  • SCSSを使用
  • jQueryを使用

See the Pen RwpJKyX by c-koch0514 (@c-koch0514) on CodePen.

HTML

html
<!-----------------------        タブ         ------------------------->
<div id="tab" class="group">
  <ul class="tab-group">
    <li class="tab is-active">Tab-A</li>
    <li class="tab">Tab-B</li>
    <li class="tab">Tab-C</li>
  </ul>

  <!--タブを切り替えて表示するコンテンツ-->
  <div class="panel-group">
    <div class="panel is-show">
      Content-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-A
    </div>
    <div class="panel">
      Content-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-B
    </div>
    <div class="panel">
      Content-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-C
    </div>
  </div>
</div>
<!-----------------------    end of タブ      ------------------------->

SCSS

scss
/***********************************************************************/
/**********                タブの設定                       *************/
/***********************************************************************/
.group {
  .tab-group,
  .panel-group {
    display: flex;
    width: 350px;
    margin: 0 auto;

    .tab {
      width: calc(350px / 3);
      background-color: pink;
      text-align: center;
      border: 1px solid #000;
      cursor: pointer;
    }
    .is-active {
      background-color: red;
    }

    .panel {
      width: 100%;
      background-color: yellow;
      border: 1px solid #000;
      padding: 10px 20px;
      display: none;
    }

    .is-show {
      display: block;
    }
  }
}

/*********************  ena of タブ    **********************************/
/***********************************************************************/

jQuery

jQuery
$(function(){  

  /*****************       タブ       **********************/
  $('.tab').click(function(){
    // クリックした要素の先祖要素の中で、classの値がgroupの要素を取得
    const group = $(this).parents('.group'); 
    group.find('.is-active').removeClass('is-active');
    $(this).addClass('is-active');
    group.find('.is-show').removeClass('is-show');
    // クリックしたタブからインデックス番号を取得
    var index = $(this).index();
    // クリックしたタブと同じインデックス番号をもつコンテンツを表示
    group.find(".panel").eq(index).addClass('is-show');
    });
  /*********************************************************/

});

同じHTMLに複数タブが存在するとき

HTMLで#tab以外のidを持ち、.groupをもったタブを作ればいい

html
<!--------------------------1つ目のタブ--------------------------------->
<div id="tab" class="group">
  <ul class="tab-group">
    <li class="tab is-active">Tab-A</li>
    <li class="tab">Tab-B</li>
    <li class="tab">Tab-C</li>
  </ul>

  <!--タブを切り替えて表示するコンテンツ-->
  <div class="panel-group">
    <div class="panel is-show">
      Content-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-A
    </div>
    <div class="panel">
      Content-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-B
    </div>
    <div class="panel">
      Content-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-C
    </div>
  </div>
</div>

<!--------------------------2つ目のタブ--------------------------------->
<div class="group">
  <ul class="tab-group">
    <li class="tab is-active">Tab-A</li>
    <li class="tab">Tab-B</li>
    <li class="tab">Tab-C</li>
  </ul>

  <!--タブを切り替えて表示するコンテンツ-->
  <div class="panel-group">
    <div class="panel is-show">
      Content-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-AContent-A
    </div>
    <div class="panel">
      Content-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-BContent-B
    </div>
    <div class="panel">
      Content-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-CContent-C
    </div>
  </div>
</div>
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0