【はじめに】
メニューをulタグとliタグでマークアップするとします。
メニュー項目をpipe「|」で区切ったときに、cssで一括指定すると最後のメニュー項目にまで
pipeがついてしまって困りました。
こんなケースを回避するtopicsです。
対象ブラウザ:実装方法はCSSの「:last-child」を使用します。
「:last-child」 はCSS 3のセレクタのため IEは適応対象外です。
last-child:afterを使用する方法
Creating Pipe-Separated Menus with Unordered Lists - exscale.seさんの方法で紹介されていた方法
last-child:afterを使用して、最後の子要素のみcontentを追加しないようにしています。
■html
[code language="html"]
<ul id="footer-navigation">
<li><a href="#">Top</a></li>
<li><a href="#">Valid XHTML</a></li>
<li><a href="#">Valid CSS</a></li>
<li><a href="#">Get Firefox</a></li>
</ul>
[/code]
■CSS
[code language="css"]
#footer-navigation {
margin-left: 0;
padding-left: 0;
list-style-type: none;
}
#footer-navigation li {
display: inline;
}
#footer-navigation li:after {
content: " | ";
}
#footer-navigation li:last-child:after {
content: "";
}
[/code]
サンプル
nth-last-child(1)を使用する方法
css3で追加されたnth-last-child(*)を使用する方法です。
■html
[code language="html"]
<ul id="footer-navigation">
<li><a href="#">Top</a></li>
<li><a href="#">Valid XHTML</a></li>
<li><a href="#">Valid CSS</a></li>
<li><a href="#">Get Firefox</a></li>
</ul>
[/code]
■CSS
[code language="css"]
#footer-navigation2 {
margin-left: 0;
padding-left: 0;
list-style-type: none;
}
#footer-navigation2 li {
display: inline;
margin-right:10px;
padding-right:10px;
border-right:1px solid #666;
}
#footer-navigation2 li:nth-last-child(1) {
border-right:none;
}
[/code]
サンプル2
解読メモ
:after | セレクタの後に要素をスタイルを適応 |
---|---|
:last-child | 最後に書かれている子要素にスタイルを適応 |
:last-child:after | 最後に書かれている子要素のセレクタの後にスタイルを適応 |
nth-last-child(*) | 最後から*番目に適応する |
サンプル2のnth-last-child(1)は最後から1番目の要素にスタイルを適応させている
border-right:noneが適応され、区切り線の表示が消える。
IEに対応させる場合には
javascriptを使用します。
フッターとかの区切り『|』のサンプル1種 - CSS HappyLife
参照URL
:first-child疑似クラス (E:first-child)|セレクタ|CSS HappyLife ZERO
【終わりに】
CSS3についての情報が1年前よりも格段に増えてきて、参考になるサイトが増えています。
スマートフォンはCSS3がメインになるようだし、これを気に1から覚えないとダメですね。