Emmachi
@Emmachi (Emma)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

css:not()が効かない

Q&A

Closed

解決したいこと

notを使用して、親要素(p)だけ太文字を適用させたいです。(子要素(span)は除きたい)

HTML

<div class="contents">
    <p class="name">@qiita tarou <span> 投稿:1日前</span></p>
</div>

CSS

.contents .name:not(span) {
  font-weight: bold;
}

自分で試したこと

・MDNのnot()について確認しました。

・「css not 効かない」で調べて3サイト程読みましたが、自分のパターンはあてはまりませんでした。

・何らかの継承が邪魔しているのかと思いcontentsクラス以外のすべての要素とCSSを削除して確認しましたが、結果は同じでした。

________________________
初心者の質問で申し訳ないですが、どうぞ皆様のお力をお借りできましたら幸いです。よろしくお願いいたします

0

2Answer

.name:not(span) は「span 以外の子要素に一致する」のではなく「name クラスを持っていて、かつ自身が span ではない要素に一致する」という意味です。ここでは <p class="name">...</p> に一致しています。それにスタイルが当たり、 span を含めた子孫要素ごと太字になっています。

欲しいのは :not() ではなく、ある要素が親要素のスタイルを受け継がないようにする指定だと思いますが、少なくとも今の CSS では書けません。素直に span のウェイトだけ普通に戻すスタイルを書くしかないと思います:

.contents .name {
  font-weight: bold;
}

.contents .name span {
  font-weight: normal;
}
1Like

Comments

  1. @Emmachi

    Questioner

    すみません、間違えて下に投稿してしまいました。

ご回答ありがとうございます!
毎回notを使う度に思ったように動かないためなんでだろうと思っていたのですが、@uasiさんの説明でとてもスッキリしました。

.name:not(span) は「span 以外の子要素に一致する」のではなく「name クラスを持っていて、かつ自身が span ではない要素に一致する」という意味です。

notについてずいぶんと勘違いしておりました。
先ほど整理するためにもう一度試してみて、ずいぶん理解が深まりました。
いろいろと制限があるのですね。
本当にありがとうございました!

0Like

Your answer might help someone💌