[CSS]シンプルなHTMLで角丸のタブをより美しく実装するチュートリアル

画像を使用せずに、リスト要素で実装したシンプルなHTMLで角丸のタブをより美しく実装するチュートリアルを紹介します。

サイトのキャプチャ

(Better) Tabs with Round Out Borders

下記は各ポイントを意訳したものです。

デモ

デモは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>

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は別のスタイルシートを用意する必要があります。

top of page

©2017 coliss