:nth-childとjQueryの組み合わせが魅力的

top2012_0121.jpg

今回はどうしても書き留めておこうと思ったのが、
:nth-childというCSSの擬似要素です。

■:nth-childって何?参考サイト
CSSの「:nth-child」をマスターするための図解いろいろ
jQueryでnの倍数だけに何か処理する(追記有)

※追加の参考サイト
jQuery 日本語リファレンス

こんな時に使用できる:サンプルはこちら

■サンプルの解説
float:leftでボックスを右に並べていき、一定の数までいったら
折り返すという時に使える小技です。

floatするボックスを右に並べていく時、右か左にmarginを使用して
ある程度の間隔をもたせると思います。

例えば外枠の幅が640pxで、floatするボックス要素がwidth200px、height200px。
そしてmarginがright20px、bottom20px。画面に表示されるのはボックスが2つ並ぶ事になります。

※ボックス200px + マージン20px となり、一つボックスに対して220pxの横幅が必要になる為です。

3つ並べたい時は、3番目にくるボックスに対して、margin-right20pxを解除するclassを追加する事で
3つ並べる事が出来ます。しかし、ボックスの数が多い時や、並び替えが発生した時は、三番目にくる
ボックスに対して毎回同じくclassを適応させないといけません。
面倒ですね。

そこで、三番目にくるボックスに対してjQueryでmargin-right0pxのスタイルを適応させようと思います。

※220px + 220Px + 200px = 640px (外枠に超えてませんね。)
■ソース:jQuery
$(function() {    
     //3の倍数時にスタイルを適応する
     $('#Area div:nth-child(3n)').css({
     'margin-right':'0',
     'background':'#336699'
     });
});
■ソース:css
#Area {width:630px; background:#DDD; overflow:hidden;}
#Area div {width:200px;height:200px; background:#6984c7; margin:0 15px 15px 0; float:left;}
■ソース:html
3番目のボックスに対してmargin-rightを0にすると3列となる
Box1
Box2
Box3
Box4
Box5
Box6

はじめにお約束のjQueryを読み込みます。

※バージョンは1.2.6以降。最新を準備すれば問題ないかと思います

スクリプについてはArea内のdivに対して、しかも3の倍数のdivに対して特定のCSSを適応させる。
という記述を書きます。

$(function() {    
     //3の倍数時にスタイルを適応する
     $('#Area div:nth-child(3n)').css({
     'margin-right':'0',
     'background':'#336699'
     });
});

こうすることで、3の倍数のボックスに対してスタイルを適応されます。

この他にも:nth-childにはいろいろな指定方法があるので、使い所がヒットすれば間違いなく
便利な要素になりそうですね。
ちなみ:nth-childはCSS擬似要素なのでCSSで指定することが出来る要素です。
しかし、CSS内に記述するとブラウザに依存する為、jQueryを使用することでより多くの
ブラウザをカバーできると思います。