2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Sassの@eachを使ってタブ実装をするCSS思いついた

2
Posted at

CSSとHTMLでやるこういうタブの実装
JS_Bin.png

選択されているものを.activeなどのクラスをつけて色を変えるような実装についての思いつき。

いつもやる感じのやつ

普通にBootstrapを習ったやり方をするとこんな具合

<ul id="list1">
    <li>AAAA</li>
    <li class="active">BBBB</li>
    <li>CCCC</li>
</ul>
# list1{
  li{
    cursor: pointer;
    display: inline-block;
    border: 1px gray solid;
    border-bottom: 0px;
    padding: 10px;
  }
  .active{
    background: #ccb;
  }
}

これをサーバーサイドで何らかやろうとすると、だいたいこんな感じになると思う。今回はjadeを使って再現

- var activeTab = "bbbb"
- var tabs = ["aaaa", "bbbb", "cccc"]
ul#list1
  each tab,i in tabs
    li(class=(tab == activeTab ? "active" : "" ))= tab        

だいたいこんな感じになる。

思いついたやつ

もしかしてこれ、scssの@eachとかある今ならもうちょっといい感じに出来たりするんじゃね?って思って考えてみた

<ul id="list2" class="active-bbbb"> <!-- 親で指定する -->
    <li class="tab-aaaa">AAAA</li>
    <li class="tab-bbbb">BBBB</li>
    <li class="tab-cccc">CCCC</li>
</ul>
# list1{
  li{
    cursor: pointer;
    display: inline-block;
    border: 1px gray solid;
    border-bottom: 0px;
    padding: 10px;
  }
  $tabs: aaaa, bbbb, cccc; // 利用するタブを並べる
  @each $tab in $tabs{
    &.active-#{$tab}{
      .tab-#{$tab}{ // 親と一致したらactive化する
        background: #ccb; 
      }
    }
  }
}

CSS化するとこんな感じ

# list1 li {
  cursor: pointer;
  display: inline-block;
  border: 1px gray solid;
  border-bottom: 0px;
  padding: 10px;
}

# list1.active-aaaa .tab-aaaa {
  background: #ccb;
}

# list1.active-bbbb .tab-bbbb {
  background: #ccb;
}

# list1.active-cccc .tab-cccc {
  background: #ccb;
}

テンプレ的にはこんな感じ

- var activeTab = "bbbb"
- var tabs = ["aaaa", "bbbb", "cccc"]
ul#list2(class="active-" + activeTab)    
  each tab,i in tabs
    li(class="tab-" + tab)= tab

<li>でのロジックが消えてくれた。
今回の簡易な例だとあんまり恩恵が見えないが、<li>の中身が複雑で別途パーシャル化しないといけないとかの時には使えるかもしれない

2
2
0

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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?