2012/05/18更新

[Web] Webページでタブレイアウトを実現する

このエントリーをはてなブックマークに追加            

今日は、Webページ上で時々見かけるタブレイアウトを作成してみました。タブ部分のCSS、タブクリック時の表示非表示の切替JavaScriptなどを 実装しました。その内容をブログに残しておきたいと思います。

tab layout sample

http://www.yoheim.net/labo/tips/tab.html





タブレイアウトを実現するには

タブレイアウトを実現するには、「タブを作る」「コンテンツを作る」「表示を切り替える」の3ステップが必要です。 それぞれ実装方法を記載したいと思います。


STEP1:タブ部分を作成する

タブ部分を作成するには、ul要素とli要素とa要素を使い、またそれらにCSS設定を行う事でタブを作成しました。

HTML

<ul class="tab">
  <li class="tabItem noselected" contentId="content1"><a href="#">Basic</a></li>
  <li class="tabItem noselected" contentId="content2"><a href="#">HTML5, CSS3</a></li>
  <li class="tabItem noselected" contentId="content3"><a href="#">iPhone Developing</a></li>
</ul>

CSS

ul.tab {
  list-style-type:none; /*リスト表示の点などは表示しない*/
  padding-left:0px;
  margin-bottom:0px;
  height:30px; /*タブの高さ*/
}
li.tabItem a{
  display:block;
  float:left;  /*blockにしてfloat:leftにする事で、横に並ぶように指定*/
  background-color:#000033;
  height:25px;
  width:200px;
  margin-right:5px;
  padding-top:5px;
  text-align:center;
  font-weight:bold;
  line-height:25px;  /*文字の縦位置指定。height:25pxと数値を合わせる事で縦位置のセンタリングをしている*/
  margin-bottom:0px;
  text-decoration:none; /*aタグの文字の下線はなし*/
}

上記のように、リスト表示とリンクを利用してタブ部分を実装しました。



STEP2:コンテンツ部分を作成する

コンテンツ部分は、タブの数分だけコンテンツを作成し、初期表示時には非表示として、選択されたタブの内容だけ表示する事で、タブの切替によりコンテンツを切り替える仕組みとしています。実装例は以下です。

<div id="content1" class="tabContent notShowMe">
  内容1
</div>
<div id="content2" class="tabContent notShowMe">
  内容2
</div>
<div id="content3" class="tabContent notShowMe">
  内容3
</div>
div.tabContent {
  width:610px; /*タブの横幅(余白含む)に合わせると長さがそろってキレイ*/
  height:200px;
  background-color:#ddddee;
}
.notShowMe {
  display : none; /*visibilityだと要素は見えなくなるが、位置が変化しないので、displayを利用*/
}

STEP3:タブ切替の動作を実現する

タブをクリックされた際に、コンテンツを切り替えるには、JavaScriptを利用してコンテンツの表示非表示を切り替えます。こんな感じのJavaScriptです。

window.addEventListener("load", function(){
  addTabMotion();
}, false);

var addTabMotion = function() {
  var tabs = document.querySelectorAll('.tabItem');
  var contents = document.querySelectorAll(".tabContent");
  for (var i = 0; i < tabs.length; i++) {
    tabs[i].addEventListener('click', function() {
      tabAllHidden();
      var id = this.getAttribute("contentId");
      var content = document.getElementById(id);
      content.className = content.className.replace(/ notShowMe/g, "");
    }, false);
  }
}

var tabAllHidden = function() {
  var contents = document.querySelectorAll(".tabContent");
  for (var i = 0; i < contents.length; i++) {
    contents[i].className += " notShowMe";
  }
}




最後に

タブレイアウトはよく見るけど、タブ部分はどうやって実装するのか疑問でした。また一つ実現出来る事が増えて良かったなぁ。次は、ちょっとした小画面をDIVで作ってみよう(・o・)ゞ







こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。