CSS :is() 和 :where() 即將出現(xiàn)在瀏覽器中
現(xiàn)在,Safari(技術(shù)預覽版106)和Firefox(版本78)的預覽版均支持新的CSS :is() 和 :where() 偽類。Chrome的實施仍然落后。
使用 :is() 減少重復
你可以使用 :is() 偽類來刪除選擇器列表中的重復項。
/* before */
.embed .save-button:hover,
.attachment .save-button:hover {
opacity: 1;
}
/* after */
:is(.embed, .attachment) .save-button:hover {
opacity: 1;
}
此功能主要在未處理的標準CSS代碼中有用。如果使用Sass或類似的CSS預處理程序,則可能更喜歡嵌套。
注意:瀏覽器還支持非標準的 :-webkit-any() 和 :-moz-any() 偽類,它們與 :is() 相似,但限制更多。WebKit在2015年棄用了 :-webkit-any() ,Mozilla已將Firefox的用戶代理樣式表更新為使用 :is() 而不是 :-moz-any()。
使用 :where() 來保持低特殊性
:where() 偽類與 :is() 具有相同的語法和功能。它們之間的唯一區(qū)別是 :where() 不會增加整體選擇器的特殊性(即某條CSS規(guī)則特殊性越高,它的樣式越優(yōu)先被采用)。
:where()偽類及其任何參數(shù)都不對選擇器的特殊性有所幫助,它的特殊性始終為零。
此功能對于應易于覆蓋的樣式很有用。例如,基本樣式表 sanitize.css 包含以下樣式規(guī)則,如果缺少 屬性,該規(guī)則將設置默認的填充顏色:
svg:not([fill]) {
fill: currentColor;
}
由于其較高的特殊性(B = 1,C = 1),網(wǎng)站無法使用單個類選擇器(B = 1)覆蓋此聲明,并且被迫添加 !important 或人為地提高選擇器的特殊性(例如 .share- icon.share-icon)。
.share-icon {
fill: blue; /* 由于特殊性較低,因此不適用 */
}
CSS庫和基礎(chǔ)樣式表可以通過用 :where() 包裝它們的屬性選擇器來避免這個問題,以保持整個選擇器的低特殊性(C=1)。
/* sanitize.css */
svg:where(:not([fill])) {
fill: currentColor;
}
/* author stylesheet */
.share-icon {
fill: blue; /* 由于特殊性較高,適用 */
}
如果你覺得這篇內(nèi)容對你挺有啟發(fā),我想邀請你幫我三個小忙:
點個「在看」,讓更多的人也能看到這篇內(nèi)容(喜歡不點在看,都是耍流氓 -_-)
歡迎加我微信「qianyu443033099」拉你進技術(shù)群,長期交流學習...
關(guān)注公眾號「前端下午茶」,持續(xù)為你推送精選好文,也可以加我為好友,隨時聊騷。

