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