[CSS]シンプルなHTMLで角丸のタブをより美しく実装するチュートリアル
Post on:2012年1月13日
画像を使用せずに、リスト要素で実装したシンプルなHTMLで角丸のタブをより美しく実装するチュートリアルを紹介します。

(Better) Tabs with Round Out Borders
[ad#ad-2]
下記は各ポイントを意訳したものです。
デモ
デモはChrome, Safari, Firefox, Operaでご覧ください。
IEはたぶんIE10で対応するはずです。

実装
まずは、HTMLから。
HTML
タブをシンプルなリスト要素で実装します。
<ul class="tabrow"> <li>Lorem</li> <li>Ipsum</li> <li class="selected">Sit amet</li> <li>Consectetur adipisicing</li> </ul>
[ad#ad-2]
CSS
CSSの実装は、少しずつキャプチャとともに紹介します。

まずは、ulとliのデフォルトのスタイルを取り除き、水平に並べてラインで囲みます。
.tabrow { text-align: center; list-style: none; margin: 0; padding: 0; line-height: 24px; } .tabrow li { margin: 0 10px; padding: 0 10px; border: 1px solid #AAA; background: #ECECEC; display: inline-block; }

選択されたタブのスタイルを定義します。
.tabrow li.selected { background: #FFF; color: #000; }

タブの下側にラインを引きます。
ここで最初の擬似要素を使用します。
.tabrow { position: relative; } .tabrow:after { position: absolute; content: ""; width: 100%; bottom: 0; left: 0; border-bottom: 1px solid #AAA; z-index: 1; }

選択されたタブに下線は必要ないので、「z-index」を使用して下線がない状態にします。
.tabrow:before { z-index: 1; } .tabrow li { position: relative; z-index: 0; } .tabrow li.selected { z-index: 2; border-bottom-color: #FFF; }

いよいよ、角丸のスタイルです。
擬似要素を使用して、角丸の準備をします。
.tabrow li:before, .tabrow li:after { position: absolute; bottom: -1px; width: 6px; height: 6px; content: " "; } .tabrow li:before { left: -6px; } .tabrow li:after { right: -6px; } .tabrow li:after, .tabrow li:before { border: 1px solid #AAA; }

borderを取り除いて、角丸を設定します。
.tabrow li { border-top-left-radius: 6px; border-top-right-radius: 6px; } .tabrow li:before { border-bottom-right-radius: 6px; border-width: 0 1px 1px 0; } .tabrow li:after { border-bottom-left-radius: 6px; border-width: 0 0 1px 1px; }

角を取り除くために、「box-shadow(赤い箇所)」を適用します。
.tabrow li:before { box-shadow: 2px 2px 0 red; } .tabrow li:after { box-shadow: -2px 2px 0 red; }

赤のシャドウが角を包み隠しているのを確認したら、正しい色に変更します。
.tabrow li:before { box-shadow: 2px 2px 0 #ECECEC; } .tabrow li:after { box-shadow: -2px 2px 0 #ECECEC; } .tabrow li.selected:before { box-shadow: 2px 2px 0 #FFF; } .tabrow li.selected:after { box-shadow: -2px 2px 0 #FFF; }

最後に、より美しくするために、グラデーションとボックスシャドウなどを加えます。
.tabrow li { background: -o-linear-gradient(top, #ECECEC 50%, #D1D1D1 100%); background: -ms-linear-gradient(top, #ECECEC 50%, #D1D1D1 100%); background: -moz-linear-gradient(top, #ECECEC 50%, #D1D1D1 100%); background: -webkit-linear-gradient(top, #ECECEC 50%, #D1D1D1 100%); background: linear-gradient(top, #ECECEC 50%, #D1D1D1 100%); box-shadow: 0 3px 3px rgba(0, 0, 0, 0.4), inset 0 1px 0 #FFF; text-shadow: 0 1px #FFF; margin: 0 -5px; padding: 0 20px; }
完成したデモは、下記のようになります。

対応ブラウザはIE以外のすべてです。
IE10はおそらく大丈夫だと思いますが、IE8/9は別のスタイルシートを用意する必要があります。
sponsors