質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

545閲覧

cssで、複数のクラス名を持つ要素の最初の要素を指定したい

no23h

総合スコア49

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2022/02/27 03:14

下記コードで、「item」、「sub」両方のクラスを持つ最初のli要素にcssを当てたい場合は、どのようにセレクタを指定すれば良いのでしょうか。

html

1<ul> 2 <li class="item">項目1</li> 3 <li class="item">項目2</li> 4 <li class="item">項目3</li> 5 <li class="item sub">項目4</li> 6 <li class="item sub">項目5</li> 7</ul>

css

1ul li.item { 2 background-color: #eee; 3 margin-bottom: 1em; 4} 5 6ul li.item.sub { 7 background-color: #aaa; 8} 9 10ul li.item.sub:first-child { 11 background-color: #666; /* 反映されない */ 12}

ul li.item.sub:first-child {} の指定では反映されませんでした。

ul li.item.sub:nth-child(4) {} のように、順番を指定すれば反映されるのですが、
項目が追加されることも考慮して、「二つのクラスを持ち、且つ要素の最初」というかたちで指定したいのですがどのように記述すればよいのでしょうか。

お詳しい方ご教授いただけますと幸いです。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

:first-childやnth-childは、親要素(ここではul)に所属する要素の順番で判定します。
ul li.item.sub:first-childの場合、ulから見て最初の要素が[項目1のli]なので、ここにclassとして[sub]が与えられている場合のみ動作します。
nth-child(4)で希望通りの挙動になったのはこのためです。
([項目4]は4つ目の要素なので)
そのため、要素を追加せずにfirst-childで実現するのは厳しそうです。

無理矢理ですが、以下のCSSを考えてみました。
「classに[item sub]を持つliが前に存在しない」かつ「ul配下でclassに[item sub]を持つli」に対して、スタイルを当てる方法です。

CSS

1ul li.item { 2 background-color: #eee; 3 margin-bottom: 1em; 4} 5 6ul li.item.sub { 7 background-color: #aaa; 8} 9 10ul li.item.sub:not(li.item.sub ~ li.item.sub) { 11 background-color: #666; /* 前に[li.item.sub]の要素が存在しない場合に[ul li.item.sub]に対してスタイルを当てる */ 12}

追記.
何度か回答を修正してすみません。
最初に出した案では実現できないケースがあったので、セレクタの指定を一部直しました。

投稿2022/02/27 04:54

編集2022/02/27 05:50
PlugOut777

総合スコア917

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

no23h

2022/02/28 09:52

ご回答ありがとうございます。 教えていただいたコードで希望通りになりました! 擬似要素を駆使して、ここまで複雑な指定ができるのですね... 大変勉強になりました。 ベストアンサーにさせていただきました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問