縦タブを作る

これまで横のタブデザインは何回か作ったけど、縦のタブデザインを初めて作ったのでメモっておく。

DOCTYPEは、XHTML1.0 Transitional で作ってます。
タブ部分横幅固定でコンテンツ部分はリキッド。


まず、タブとコンテンツをマークアップします。

<div class="tabWrap">
  <ul class="tabList">
    <li class="tab">hogehoge</li>
    <li class="currentTab">foo</li>
    <li class="tab">bar</li>
  </ul>
</div>

<div class="inputArea">
  <span>Tab Contents</span>
  <p>contentscontentscontentscontents</p>
</div>


次に、タブとコンテンツが横並びになるようにスタイルを指定します。
今回はカレントタブとコンテンツを重ねて見せたかったので、タブに「position: absolute」を指定し、コンテンツにネガティブマージンを指定することで、カラム落ちを防ぎつつリキッドに表示するようにしました。

div.container {
  clear: both;
  position: relative;
}
div.stepWrap {
  position: relative;
}
ul.stepArea {
  position: absolute;
  list-style: none;
  left: 0;
  width: 250px;
  margin: 0;
  padding: 0;
  font-size: 110%;
}
div.inputArea {
  border: 3px solid #73b2bd;
  margin-left: 251px;
  background-color: #fff;
}


続いて、カレントタブが分かるようにスタイルを指定します。
カレントタブ以外のタブの文字色、背景色を暗めに指定すると、差異が分かりやすくなります。
さらにカレントタブの枠線を太くして、コンテンツの枠線もカレントタブと同じ太さ、色に指定します。

li.step {
  width: 250px;
  background-color: #DDDDDD;
  border-collapse: collapse;
  border: 1px solid #C0C0C0;
  border-right: none;
}
li.currentStep {
  width: 251px;
  background-color: #FFFFFF;
  border: 3px solid #73B2BD;
  border-right: none;
  vertical-align: middle;
  z-index: 10;
}


カレントタブとコンテンツをボーダー分重ねることで、くっついてるように見せて、カレントタブとコンテンツとの結びつきを分かりやすくしたいなーと思いました。
そこで、タブ全体であるulタグに「position: absolute」を指定し、カレントタブ(li.currentTab)のwidthをボーダー分だけ多めに取ってあります。

とりあえず、IE6とFF3では大丈夫。