*

div要素のクラス名をnth-childの擬似クラスで何番目を指定しても効かない

公開日: : ノウハウ

divタグ

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」の色が変わってしまうのでクラス名も一応意味はあるようです。

  • Pocket

おすすめトピックス

関連記事

MP3ダウンロード
MP3を1クリックだけでストリーミングせずにダウンロードする方法

私はこのサイトとは別に、効果音や BGM の素材サイトを運営しています。ふとそのサイト名で google 検索をしてみた所、驚くべき光景を目にしました。 ポケットサウンドというのがそのサイト名なのですが、Google の […]

画像付きリスト
関連記事などに画像付きリストをCSSで簡単に作るサンプル

画像つきリストとは上図のようなイメージです。しばしばブログなどでは関連記事や人気記事の表示などに使われている事が多いですし、インターネットショッピングサイトではサイドメニューの商品カテゴリリストに採用されています。 ポイ […]

オフィス画像モニタ
CSSのみでhtmlタグの中に文章を挿入する方法があります

ウェブサイトの中で html の編集が出来ない場所に文章を書くなど編集する事は出来ません。一見当たり前の事を言っているだけです。しかし、CSS なら出来てしまうかもしれません。 目次1 htmlの編集が出来ない場所とは2 […]

プレースホルダ
検索窓に薄い文字を入れて何を入力するのか分かりやすくするプレースホルダ

ネット上で何かを検索したい時、どこを見ますか? そう、検索窓ですよね。検索窓は EC サイトやネットショップ、何かを検索する必要があるウェブサイトには大概付きものでお馴染みのものです。 たまに見るのが検索窓に薄い文字で予 […]

スマホを操作する手
スマホでWeb閲覧時代にスマホサイトでNGだと思う事3つ

ちょっと前まではインターネットを見るなら、通販するならパソコン!という時代でしたが、既にこれは終わった時代です。ここ2,3年は、インターネットを閲覧、通販においてもスマートフォン率がだんだん上昇しています。これは当サイト […]

https通信下でjavascriptが動かない場合の対処法

https 通信下で javascript が動かない!とお困りという事は、もしかしてあなたのページは特定のページだけ https 通信を行っているのではないでしょうか?例えばログインページ、決済ページのみ暗号化を行う […]

著者について

名前:Azell
作曲したり風景写真撮ったりWeb制作したりする人です。 好きな事を楽しくブログに綴れていけたらと思います。

フォローはこちら

       

       
大垣市の金沢カレー専門店!濃厚で深みのある味わいの金沢カレー

石川県発祥の金沢カレーをご存知でしょうか。石川のご当地カレーで

Thunderbirdで「ごみ箱フォルダにメッセージをフィルターで分別できませんでした」

いつも通り Thunderbird を立ち上げると見慣れないエ

楽天ショップ等の縦帯バナーを商品別に変えるには?

楽天などのインターネットショップをパソコンで見ると、よく画面端

instagramで横長写真を複数投稿ができない!複数投稿する方法はあるのか?

instagram といえば正方形写真しか投稿できないと思って

岐阜県垂井町で本格インドカレーをお洒落なバー「VAN DO BEE(バンドゥビー)」でディナー

国道21号線を垂井町付近を走行中、チラッと見えたインドカレー&

→もっと見る