:has()
åºçº¿
广æ³å¯ç¨
èª 2023å¹´12æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
CSS 彿°å¼ä¼ªç±» :has() 表示ä¸ä¸ªå
ç´ ï¼å¦æä½ä¸ºåæ°ä¼ éçä»»ä½ç¸å¯¹éæ©å¨å¨éå®å°è¯¥å
ç´ æ¶ï¼è³å°å¹é
ä¸ä¸ªå
ç´ ãè¿ä¸ªä¼ªç±»éè¿æå¯å®¹éç¸å¯¹éæ©å¨å表ä½ä¸ºåæ°ï¼æä¾äºä¸ç§é对å¼ç¨å
ç´ éæ©ç¶å
ç´ æè
å
åçå
å¼å
ç´ çæ¹æ³ã
/* Selects an h1 heading with a
paragraph element that immediately follows
the h1 and applies the style to h1 */
h1:has(+ p) {
margin-bottom: 0;
}
:has() 伪类çä¼å
çº§è®¡ç®æ¹æ³ä¸ :is() å :not() ç¸åï¼ä»¥å
¶åæ°ä¸å
·ä½çéæ©å¨è¿è¡è®¡ç®ã
è¯æ³
:has(<relative-selector-list>) {
/* ... */
}
ç¸å¯¹éæ©å¨åè¡¨åæ°æ¯å¯å®¹éçãéå¸¸å¨ CSS ä¸ï¼éæ©å¨å表ä¸çæä¸ªéæ©å¨æ ææ¶ï¼é£ä¹æ´ä¸ªå表å被è§ä¸ºæ æãå½ :has() éæ©å¨å表ä¸çä¸ä¸ªéæ©å¨æ æ³è§£ææ¶ï¼ä¸æ£ç¡®æä¸åæ¯æçéæ©å¨å°è¢«å¿½ç¥ï¼èå
¶ä»çåå°è¢«æ£å¸¸ä½¿ç¨ã
注æï¼å¦æä¸ä¸ªæµè§å¨ä¸ä¸æ¯æ :has() 伪类æ¬èº«ï¼åæ´ä¸ªéæ©å¨åå°å¤±æï¼é¤é :has() æ¬èº«ä½äºä¸ä¸ªå¯å®¹ééæ©å¨å表ä¸ï¼æ¯å¦å¨ :is() æ :where() ä¸ï¼ã
:has() 伪类ä¸è½è¢«åµå¥å¨å¦ä¸ä¸ª :has() å
ãå¦å¤ï¼ä¼ªå
ç´ ä¸æ¯ :has() å
çææéæ©å¨ãè¿æ¯å 为许å¤ä¼ªå
ç´ åºäºå
¶ç¥å
çæ ·å¼ææ¡ä»¶å°åå¨ï¼å¦æå
许éè¿ :has() æ¥è¯¢è¿äºä¼ªå
ç´ å¯è½å¯¼è´å¾ªç¯æ¥è¯¢ãè½ç¶ :has() å伪å
ç´ å¨ :has() 䏿¯æ æçéæ©å¨ï¼ä½ç±äºéæ©å¨å表æ¯å¯å®¹éçï¼å®ä»¬å°åªæ¯è¢«å¿½ç¥ãéæ©å¨å°ä¸ä¼å¤±æã
示ä¾
>ä¸å å¼ç»åå¨ä¸èµ·ä½¿ç¨
以ä¸ç¤ºä¾ä¸ç :has() æ ·å¼å£°æä¼è°æ´ H1 æ é¢åé¢çé´è·ï¼å¦æå®ä»¬åé¢ç´§è·ç H2 æ é¢ã
HTML
<section>
<article>
<h1>Morning Times</h1>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
</p>
</article>
<article>
<h1>Morning Times</h1>
<h2>Delivering you news every morning</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
</p>
</article>
</section>
CSS
h1,
h2 {
margin: 0 0 1rem 0;
}
h1:has(+ h2) {
margin: 0 0 0.25rem 0;
}
ç»æ
该示ä¾å¹¶ææ¾ç¤ºäºä¸¤ä¸ªç¸ä¼¼çææ¬ï¼ä»¥è¿è¡æ¯è¾ï¼å·¦ä¾§ç带æ H1 æ é¢ï¼å¹¶ç´§è·ä¸ä¸ªæ®µè½ï¼èå³ä¾§ç带æ H1 æ é¢ï¼å¹¶ç´§è·ä¸ä¸ª H2 æ é¢åä¸ä¸ªæ®µè½ã该示ä¾çå³ä¾§ï¼:has() å¯ä»¥å¸®å©éæ© H1 å
ç´ åç´§è·ç H2 å
ç´ ï¼ç±å
å¼éæ©å¨ + æç¤ºï¼ï¼å¹¶éè¿ CSS è§åæ¥åå°æ¤ç±» H1 å
ç´ åçé´è·ãè¥æ²¡æ :has() 伪类ï¼ä½ å°±æ æ³ä½¿ç¨ CSS 鿩卿¥éæ©å
·æä¸åç±»åçåä¸ä¸ªå
å¼å
ç´ æç¶å
ç´ ã
ä¸ :is() 伪类ä¸èµ·ä½¿ç¨
è¿ä¸ªç¤ºä¾å»ºç«å¨åä¸ä¸ªç¤ºä¾ä¹ä¸ï¼å±ç¤ºäºå¦ä½ç¨ :has() éæ©å¤ä¸ªå
ç´ ã
HTML
<section>
<article>
<h1>Morning Times</h1>
<h2>Delivering you news every morning</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
</p>
</article>
<article>
<h1>Morning Times</h1>
<h2>Delivering you news every morning</h2>
<h3>8:00 am</h3>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
</p>
</article>
</section>
CSS
h1,
h2,
h3 {
margin: 0 0 1rem 0;
}
:is(h1, h2, h3):has(+ :is(h2, h3, h4)) {
margin: 0 0 0.25rem 0;
}
ç»æ
è¿éï¼ç¬¬ä¸ä¸ª :is() 伪类ç¨äºéæ©å表ä¸ç任使 é¢å
ç´ ã第äºä¸ª :is() 伪类ç¨äºå°ç¸é»çå
å¼éæ©å¨çå表ä½ä¸ºåæ°ä¼ éç» :has()ã:has() 伪类ç¨äºéæ©ä»»ä½ä¸ä¸ªç´§è· H2ãH3 æ H4 ç H1ãH2ãH3 å
ç´ ï¼ä½¿ç¨ + æç¤ºï¼ï¼å¹¶ä½¿ç¨ CSS è§åæ¥åå°æ¤ç±» H1ãH2 æ H3 å
ç´ åçé´è·ã
è¿ä¸ªéæ©å¨ä¹å¯ä»¥åä½ï¼
:is(h1, h2, h3):has(+ h2, + h3, + h4) {
margin: 0 0 0.25rem 0;
}
è§è
| è§è |
|---|
| Selectors Level 4 > # relational > |