18

CSS :is() 和 :where() 即将出现在浏览器中

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzI0MDIwNTQ1Mg%3D%3D&%3Bmid=2676493926&%3Bidx=2&%3Bsn=6279b9b12c0c568890faed960d3ba635
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

现在,Safari(技术预览版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() 具有相同的语法和功能。它们之间的唯一区别是 :where() 不会增加整体选择器的特殊性(即某条CSS规则特殊性越高,它的样式越优先被采用)。

:where() 伪类及其任何参数都不对选择器的特殊性有所帮助,它的特殊性始终为零。

此功能对于应易于覆盖的样式很有用。例如,基本样式表 sanitize.css 包含以下样式规则,如果缺少 <svg fill> 属性,该规则将设置默认的填充颜色:

svg:not([fill]) {
  fill: currentColor;
}

由于其较高的特殊性(B = 1,C = 1),网站无法使用单个类选择器(B = 1)覆盖此声明,并且被迫添加 !important 或人为地提高选择器的特殊性(例如 .share- icon.share-icon )。

.share-icon {
  fill: blue; /* 由于特殊性较低,因此不适用 */
}

CSS库和基础样式表可以通过用 :where() 包装它们的属性选择器来避免这个问题,以保持整个选择器的低特殊性(C=1)。

/* sanitize.css */
svg:where(:not([fill])) {
  fill: currentColor;
}

/* author stylesheet */
.share-icon {
  fill: blue; /* 由于特殊性较高,适用 */
}

前端大礼包新增课程了:100:

新增课程 《ES6零基础教学与解析彩票项目》 ,学习当下和未来大热技术!公众号中 回复关键字:“前端大礼包” 即可获取,不定期新增新课程,新增课程都会通知大家。

3mqUJ3B.png!web

推荐阅读

·  Javascript开发人员偏爱Deno而不是Node的5大原因

·  10+个很酷的VueJS组件,模板和实验示例

·  哪些UI库支持暗模式?

·  你不知道的5个JavaScript的字符串处理库

·  macOS和HomeBrew的12个终端提示和技巧

·  30种不同的编程语言怎么写“Hello, World”

·  玩转 Terminal 终端:入门指南及进阶技巧

·  6个很棒的Webpack插件提高您的生产力

·  Next.js和Nuxt.js的语法比较 ·  7个很棒的JavaScript产品步骤引导库

·  2020年排名前11位的静态网站生成器

·  让你在2020年成为前端大师的9个项目

AFB3imJ.png!web

点个在看呗


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK