【问题标题】:What is the expected behavior when "!important" is used with the pseudo-class ":not"当 "!important" 与伪类 ":not" 一起使用时,预期的行为是什么
【发布时间】:2015-05-17 04:42:11
【问题描述】:

我正在清理别人的代码,基本上是这样的:

a {color:red;}
#contentdiv :not(h4) > a {color:green!important}

所以所有链接都是绿色的,除了那些在 h4 下的链接是红色的。

假设“li”下的所有链接也需要是红色的。更好的是,假设“li”下的链接需要继承用户在这个特定 CMS 中输入的任何内容,因此颜色可以在没有样式表中声明的情况下更改。

也就是说……

#contentdiv ul li a {color:red!important}

...不起作用,因为当“a”标签上的全局样式发生变化时,“li”下的“a”标签将保持红色。

但是试图否定“!important”之类的......

a {color:red;}
#contentdiv :not(h4) > a,
#contentdiv :not(li) > a {color:green!important}

...似乎只是抵消了这两种否定。我知道“:not”伪应该像“(!A和!B)”一样工作,但添加重要似乎使其目标A或B补充“(A / *或B / *)”这意味着一切都变成绿色,甚至是“h4”和“li”下的“a”标签。

这是一个 JSFiddle:https://jsfiddle.net/qebz4bbx/2/

只是想对此进行澄清。谢谢!

【问题讨论】:

  • 因此,请帮助那些有可访问性表的色盲可怜用户试图摆脱该站点上的红色和绿色。 (0.02 美元:花更少的时间找出!important 的特异性,而花更多的时间完全删除它们。)
  • !important 确实适用于选择器规则(或规则优先级)本身。 In 仅适用于 CSS 属性。

标签: css pseudo-class


【解决方案1】:

你误解了逗号,

逗号是逻辑 OR,而不是逻辑 AND。

因此,

#contentdiv :not(h4) > a,
#contentdiv :not(li) > a

匹配每个元素

  • a 元素,其父元素不是h4 元素,并且该父元素是id="contentdiv" 元素的后代。
  • a 元素,其父元素不是li 元素,并且该父元素是id="contentdiv" 元素的后代。

因此,您的选择器等同于#contentdiv * > a

相反,您应该使用

#contentdiv :not(h4):not(li) > a

匹配每个a元素,其父元素既不是h4元素也不是li元素,并且该父元素是id="contentdiv"元素的后代。

【讨论】:

  • 我明白了,我不认为链接伪 :nots 是“有效的”。
猜你喜欢
  • 1970-01-01
  • 2015-08-31
  • 2012-07-14
  • 2020-06-09
  • 1970-01-01
  • 2011-01-24
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多