HTML5+CSS3で新サイトを構築していたら、CSSの特にセレクタ周りでいろいろとできるな~と思ったので忘れないうちにメモしておきます。ちなみにCSS3からのセレクタもありますが、CSS2.1でもセレクタはたくさんありました。それらも含めて使ったものの紹介なので、CSS3に特化したものではないことにご注意ください。
まずはよくある「最初だけ」とか「最後だけ」とか「偶数・奇数」などなど。
htmlコード
<section id="contents"> <h1>title</h1> <article> <h2>sub_title1</h2> <p>contents1</p> </article> <article> <h2>sub_title2</h2> <p>contents2</p> </article> <article> <h2>sub_title3</h2> <p>contents3</p> </article> <article> <h2>sub_title4</h2> <p>contents4</p> </article> </section>
例えばこのようなソースがあったとします。この時以下のことをやるには…
1.最初のコンテンツだけ枠をつけたい
CSSコード
#contents article:first-child { border:1px solid; }
2.最後のコンテンツだけ枠をつけたい
CSSコード
#contents article:last-child { border:1px solid; }
3.偶数のコンテンツだけ枠をつけたい
CSSコード
#contents article:nth-child(even) { border:1px solid; }
4.奇数のコンテンツだけ枠をつけたい
CSSコード
#contents article:nth-child(odd) { border:1px solid; }
まあ、このあたりはgoogle先生でCSSセレクタで探すと普通に書いてありますね。
さらに…
5.最初のコンテンツ以外に枠をつけたい
CSSコード
#contents article:not(:first-child) { border:1px solid; }
上記5の書き方で他に、
・特定のclassが描かれているコンテンツを省く
CSSコード
#contents article:not([class="hoge"]) { border:1px solid; }
などもできますね!
これらは組み合わせることもできるので、例えば
CSSコード
section:not(:last-child) article:ntn-child(odd) { border:1px solid; }
とかすると、最後のセクション以外の奇数のアーティクルに枠をつけるなんてこともできますね。
もっと変態な書きかたをすれば…
#contents article:not(:first-child):not(:last-child) { border:1px solid; }
なんて書けば最初と最後のアーティクル以外に枠をつけます。
いやぁ、深いですねぇ。