:has は容赦ないセレクターです

:has は容赦ないセレクターです

:has は、PlatoBlockchain Data Intelligence の容赦のないセレクターです。垂直検索。あい。

出版の途中でちょっとした出来事がありました CSS :has() セレクタ 古い年鑑に。 もともと説明していた :has() 「寛容な」セレクターとして、XNUMX つ以上のアイテムが無効であっても、引数のすべてが評価されるという考え方です。

/* Example: Do not use! */
article:has(h2, ul, ::-scoobydoo) { }

見る ::scoobydoo そこで? それは完全に無効です。 寛容なセレクター リストは、その偽のセレクターを無視し、次のように記述されているかのように残りの項目を評価します。

article:has(h2, ul) { }

:has() 確かに寛容なセレクターでした 7 年 2022 月 XNUMX 日付けの以前のドラフトで. しかし、それは変わりました 問題が報告された後 寛容な性質は、次の場合に jQuery と競合します。 :has() 複雑なセレクターを含む (例: header h2 + p)。 W3C は次の決議に達しました。 make :has() 「容赦ない」セレクター ほんの数週間前。

では、前の例でしょうか。 偽のセレクターが無効であるため、セレクター リスト全体が無効です。 しかし、他の XNUMX つの寛容なセレクターは、 :is() および :where()、変更されません。

これにはちょっとした回避策があります。 覚えて、 :is() および :where()たとえ、 :has() ではありません。 つまり、これらのセレクターのいずれかを入れ子にすることができます :has() より寛容な行動を得るには:

article:has(:where(h2, ul, ::-scoobydoo)) { }

どちらを使用するかが重要になる可能性があります。 :is() リスト内の最も具体的な項目によって決定されます。 したがって、具体的ではないものが必要な場合は、 :where() 特異性スコアに追加されないためです。

/* Specificity: (0,0,1) */
article:has(:where(h2, ul, ::-scoobydoo)) { } /* Specificity: (0,0,2) */
article:has(:is(h2, ul, ::-scoobydoo)) { }

最新情報を反映するために、いくつかの投稿を更新しました。 他にも更新が必要な人がたくさんいるので、同じことをする必要がある人にはちょっとしたPSAです.

タイムスタンプ:

より多くの CSSトリック