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

系统 浏览器
现在,Safari(技术预览版106)和Firefox(版本78)的预览版均支持新的CSS :is() 和 :where() 伪类。 Chrome的实施仍然落后。

现在,Safari(技术预览版106)和Firefox(版本78)的预览版均支持新的CSS :is() 和 :where() 伪类。 Chrome的实施仍然落后。

使用 :is() 减少重复

你可以使用 :is() 伪类来删除选择器列表中的重复项。

  1. /* BEFORE */ 
  2. .embed .save-button:hover, 
  3. .attachment .save-button:hover { 
  4.   opacity: 1; 
  5.  
  6. /* AFTER */ 
  7. :is(.embed, .attachment) .save-button:hover { 
  8.   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>属性,该规则将设置默认的填充颜色:

  1. svg:not([fill]) { 
  2.   fill: currentColor; 

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

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

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

  1. /* sanitize.css */ 
  2. svg:where(:not([fill])) { 
  3.   fill: currentColor; 
  4.  
  5. /* author stylesheet */ 
  6. .share-icon { 
  7.   fill: blue; /* 由于特殊性较高,适用 */ 

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2022-01-14 11:47:15

UbuntuLTSGNOME 版本

2021-05-18 11:09:59

Windows 10Windows微软

2011-12-18 12:32:03

三星

2013-02-27 10:36:38

webOSLG惠普

2014-06-23 14:25:29

GoogleAndroid

2021-11-25 14:52:47

微软Windows 11Windows

2014-01-16 13:36:17

2010-09-15 16:19:17

IECSS hack

2010-08-20 14:11:26

IE火狐浏览器

2009-02-01 15:55:00

曙光服务器龙芯HPC

2019-06-21 14:36:11

物联网企业IOT

2016-01-08 09:54:01

云计算云业务/云厂商

2017-09-28 09:25:50

SQL ServerLinuxWindows

2021-09-27 14:39:12

HTTPS Everw浏览器扩展Google

2012-04-20 09:55:38

FirefoxMozilla

2013-11-20 13:04:41

css浏览器渲染

2010-08-20 13:46:10

IEFirefoxCSS

2021-12-06 16:33:05

浏览器攻击漏洞

2019-11-01 16:23:52

存储云存储数据

2012-04-16 10:04:08

Eclipse浏览器IDE
点赞
收藏

51CTO技术栈公众号