Quantcast
Channel: CSSタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8690

【初心者でもわかる】nth-of-typeはクラス名基準でx番目指定できない・・・からjsでなんとかする方法

$
0
0

どうも7noteです。初心者が陥りやすい、nth-of-typeの罠。

「x番目の要素にだけCSSを適応」

このようにある特定の要素にだけCSSを適応したい時によく使われるのが

・nth-child()
・nth-of-type()

ですが、今回はこのnth-of-type()についての罠の話です。

「クラス名(.hogehoge)のx番目」という指定はできない!

うまくいかない例

index.html
<divclass="asa">おはよう</div><divclass="asa">おはよう</div><divclass="yoru">おやすみ</div><divclass="yoru">おやすみ</div><divclass="yoru">おやすみ</div>
style.css
.yoru:nth-of-type(2){color:red;}

イメージでは、「クラス[yoru]がついているの2つ目が赤色になる!」と思いますが、実際にはどれも色は変わりません。

うまくいかなかった結果

おはよう
おはよう
おやすみ
おやすみ
おやすみ

思った通りにいかない理由

そもそも、、、

「クラス名を基準にしてx番目の指定」はできない!!!

意外と気付きにくいものです。
私もずっと上手くいかなくて調べてもnth-childとnth-of-typeの比較記事しかでなくて原因の調査に時間がかかりました。。。

つまりは、

「nth-of-type()は、クラス名ではなく要素そのものを基準に何番目かを計算して動いている」

ということになります。
なので、次のような使い方でしか動かないのです。

nth-of-typeの正しい使い方

index.html
<div>おはよう</div><div>おはよう</div><p>おやすみ</p><p>おやすみ</p><p>おやすみ</p>
style.css
p:nth-of-type(2){color:red;}

結果

おはよう
おはよう
おやすみ
おやすみ
おやすみ

じゃあクラス名基準でx番目の要素にCSSを当てるには?

javascriptのeqを使ってx番目の要素を取得することができます。

クラス名基準でx番目の要素に任意のクラス(.hoge)を付与して、そのクラス専用のCSSを予めCSSで用意する方法が良いかなと思います。

※eqは0からカウントが始まるので、「2番目の要素」にしたいときは「eq(1)」と書かなければなりません!

style.css
/* .hogeのクラスがついているものにだけ追加のCSSを用意 */.hoge{color:red;}
script.js
$('.yoru:eq(1)').addClass('hoge');//もしくは$('.yoru').eq(1).addClass('hoge');//もしくは$($('.yoru').get(1)).addClass('hoge');

まとめ

実はsafariにのみ、ofフィルターと呼ばれるようなものがあり特定の条件を満たす要素のみカウントさせることができるようです。
ただsafariだけなので、実用的ではないので現状クラス名基準でx番目を指定するのであればjavascriptを使うのが一番最適な方法です。

クラス名を沢山つけすぎてもややこしくなる場合があり開発が困難になるのであれば、div要素を増やすなどでしっかりと住み分けできるものは住み分けさせる方が一番理想的な形かもしれませんね。

おそまつ!

~ Qiitaで毎日投稿中!! ~
【初心者向け】WEB制作のちょいテク詰め合わせ

参考
https://pisuke-code.com/css-nth-child-class-not-working/
https://teratail.com/questions/9634


Viewing all articles
Browse latest Browse all 8690

Latest Images

Trending Articles