div要素のクラス名をnth-childの擬似クラスで何番目を指定しても効かない
公開日:
:
ノウハウ
CSS3 が登場して擬似クラス nth-child が使えるようになって、要素の何番目のみにスタイルを適用するような事が非常に簡単になりました。従来ではクラスなどを駆使して無理やり指定していました。これではソースも CSS も冗長になって美しくありません。nth-child が全てを解決してくれます。例として以下を御覧ください。
- りんご
- みかん
- ぶどう
この2行目のみかんのみ文字色を変えたいという場合は css で nth-child を指定します。
ul li:nth-child(2){ color:#f00; }
nth-child(2) でリストの2番目を指定するという意味になります。
前置きはこのくらいにして、ここからが本題です。このような便利な nth-child ですが、div 要素に nth-child を指定した時に詰まりました。
クラス名の違うdivが連なる場合
このような html ソースがあるとしましょう。
<div class="top"> トップ1 </div> <div class="top"> トップ2 </div> <div class="bottom"> ボトム1 </div> <div class="bottom"> ボトム2 </div>
ボトム1を指定したいので以下のような css にしました。
div.bottom:nth-child(1){ color:#f00; }
しかし、文字色は変わりませんでした。
div.top:nth-child(1){ color:#f00; }
上の方にあるクラス名 top を指定するとちゃんと文字色が変わります。ここで原因がわからず詰まっていたのです。
対処法
以下のようにすることでちゃんと目的の要素を指定できました。
<section> <div class="top"> トップ1 </div> <div class="top"> トップ2 </div> </section> <section> <div class="bottom"> ボトム1 </div> <div class="bottom"> ボトム2 </div> </section>
CSS は次のように。
section div.bottom:nth-child(1){ color:#f00; }
div 要素をもう一つ大きな要素に内包させる事で nth-child で目的の要素を指定できました。
ここで前の記述を思い出してみると…。
<div class="top"> トップ1 </div> <div class="top"> トップ2 </div> <div class="bottom"> ボトム1 </div> <div class="bottom"> ボトム2 </div>
div.bottom:nth-child(1){ color:#f00; }
これではどれも文字に色が付く事はありませんでした。調べてみると nth-child は class は関係なく div の要素を数えるようです。ようするに、bottom クラスが付いた div 要素の1番目という物は存在しないという事になります。何故なら div 要素の1番目は「トップ1」が書かれた部分だからです。
「div.top:nth-child(1)」で「トップ1」の色が変わった理由は、「.top」を無くしても結局 div の1番目の要素が指定される為です。
外側に section 要素で囲った事で「div.bottom:nth-child(1)」は section 要素の div 要素の1番目という指定になるため色が変わるのです。ただ、「.bottom」のクラス名を無くすと「トップ1」と「ボトム1」の色が変わってしまうのでクラス名も一応意味はあるようです。
おすすめトピックス
関連記事
-
-
縦の三点リーダーをウェブサイト上で表示する方法
三点リーダーという言葉をご存知でしょうか。日本語の世界では度々登場するもので、小説、雑誌、文書など様々な場面に登場するものです。三点リーダーとはすなわち「…」、点が3つ並んだものです。普段のメールなどの会話でも言葉を省略 […]
-
-
関連記事などに画像付きリストをCSSで簡単に作るサンプル
画像つきリストとは上図のようなイメージです。しばしばブログなどでは関連記事や人気記事の表示などに使われている事が多いですし、インターネットショッピングサイトではサイドメニューの商品カテゴリリストに採用されています。 ポイ […]
-
-
https通信下でjavascriptが動かない場合の対処法
https 通信下で javascript が動かない!とお困りという事は、もしかしてあなたのページは特定のページだけ https 通信を行っているのではないでしょうか?例えばログインページ、決済ページのみ暗号化を行う […]
-
-
cssとjqueryでサイトのローディング画面を簡単に実現する作り方【プラグインなし】
現在ロード中を知らせるローディング画面(Now Loading)は今までにどこかのサイトで見たことがあるかと思います。かつて FLASH 動画全盛の時代にはこんなローディング画面を見る機会も多かったです。このようなローデ […]
-
-
プラグイン無しで簡単に実現するスマホサイトの上からドロワーメニューの作り方【jQuery】
近年どこでもスマートフォン向けサイトが用意されているのが当たり前です。スマートフォンを使っていればいつも何気なしにスマートフォンサイトを見ていると思います。 そのスマートフォンサイトをちょっと思い出してみてください。 こ […]
-
-
これを見れば簡単!スマホサイトのフッターメニューをサクッと作るサンプル
スマートフォンなどのモバイル端末でウェブサイトを見る人が急増し、今の時代スマートフォン用サイトを作る事が当たり前となりました。スマホ用に別の html ファイルを用意するより一つの html で両方に対応するレスポンシブ […]