個別記事
- 前後の記事
first-child疑似クラスと隣接セレクタ
- この記事が属するカテゴリー
- CSS
CSSで:first-child疑似クラスと隣接セレクタをうまく使えば、見栄えを制御する目的だけの為にspanタグで囲んだり、クラスセレクタ・IDセレクタを付与することなく、特定要素を指定することが出来たりするので、大変便利だと思います。これらを使い、当サイトの投稿者部分のコメントとトラックバックに幅20px高さ15pxのアイコンを付けた例です。が、Win IEは対応していないので、悪しからず。一応、画像でお見せしておきます。
![]()
:first-child疑似クラスを使う
まず、投稿者部分のHTMLを見てみましょう。要素としては、postedと言うクラスの段落(<p>)と、コメント部分、トラックバック部分の各アンカー(<a>)で構成されているのが分かります。
<p class="posted">投稿者 e-luck 12:32
| <a href="hogehoge#comments" title="hogehogeへのコメント">コメント (0)</a>
| <a href="hogehoge#trackbacks" title="hogehogeへのトラックバック">トラックバック (0)</a>
</p>
:first-child疑似クラスを使い、コメント部分を指定します。:first-child疑似クラスはある要素内で最初に出現する子の要素を指定することが出来ます。コメントのアンカー(<a>)は、posted内で一番最初に出現するので、これにマッチします。backgroundプロパティでアイコン画像を指定し、そのアイコンサイズを考慮した余白をpaddingプロパティで指定します。
.posted a:first-child {
background: url(img/comment.gif) center left no-repeat;
padding-left: 20px;
}
セレクタ部分を訳すと、「posted内の一番最初の子要素 a は…」となります。
隣接セレクタを使う
次に、隣接セレクタを使い、トラックバック部分を指定します。隣接セレクタは、ある親要素の中の子要素の直後に出現する要素を指定することができます。プラス記号を使い、A要素+B要素(これにマッチする)という形式で指定します。今回の例で言えば、posted内のアンカー(<a>)の直後に出現するアンカー(<a>)=トラックバックとなります。
.posted a + a {
background: url(img/trackback.gif) center left no-repeat;
padding-left: 20px;
}
セレクタ部分を訳すと、「posted内の子要素 a 直後の a は…」となります。
以上で完了です。他にも色々な活用方法があります。このように、HTMLソースを後から弄らずとも、同じ要素に別の指定を行うことが出来ます。もちろん、何かしらの意味づけとして、要素にクラスやIDを付与したり、span要素で囲むんであれば、それを指定すれば良いのですが、こういった装飾のためだけに、後からHTMLを変更するなんてのはナンセンスです。こういった便利なセレクタがまだ使えないIEには、早く対応してもらいたいですね。
2005-01-21T20:38:50+09:00
| コメント (4)
| トラックバック (0)
|
関連性が高いエントリー 5 件
- 重い画像を読み込む際のインジケータをCSSで表示
- CSS3 の target 疑似クラスで脚注を動的に表示する
- グリッドレイアウトのための背景画像
- カラー関連の情報を CSS 内に記述
- CSS3 の否定疑似クラスの使いどころ
トラックバック
- このエントリーのトラックバックURL:
- http://WWW.lucky-bag.com/cgi/mt/mt-tb.cgi/131
"first-child疑似クラスと隣接セレクタ"へのトラックバックはまだありません。
コメント
- (o) さんからのコメント
![[TypeKey Profile Page]](http://www.lucky-bag.com/nav-commenters.gif)
私もbreadcrumbs部分でおんなじようなことをやっています。ちょっと違うのは、私は最初の要素にfirst-childという名前を付けておき、スタイルシートでは以下のように書いておくことでIEでも同じ表示結果を得られるようにしています。
li.first-child, li:first-child {
}で、IEがfirst-child擬似クラスに対応したら、スタイルシートだけ修正することで対応するつもりです。
- 2005年01月21日 22:23
- norik さんからのコメント
はじめまして。
質問よろしいでしょうか?(o)さんのやり方でfirst-childを用いて、且つclassも指定して
liの背景画像表示をIEにも対応させようと思っています。
まず最初に、#navlist li:first-child, #navlist li.first-child { background: url(...)}
とすれば大方のブラウザでは表示されました(IEも含め)。
さて次に続く要素にはどのように指定すればよいでしょうか?
というのはIEでは表示されなかったのでどうすればよいかと迷っています。
現在仮にCSSで 、#navlist li+ li, #navlist li.second-child/*IE用*/ { background: url(...)}
としてみましたが、FirefoxやNN7ではOKで、
IE6.x~ではうまく表示されませんでした。お願いいたします。
- 2007年03月26日 23:55
コメントしてください
コメント内ではタグは一切使えません。コメント内にてタグを表記したい場合は、お手数ですが、文字実体参照を利用して < を < 、> を > とそれぞれ置き換えてください。