是否有任何 CSS 规则在设置为空字符串时覆盖低特异性规则

Are there any CSS rules that, when set to empty strings, override lower-specificity rules

我试图通过考虑内联和 class 样式来确定哪种样式适用于元素。 Javascript将这两个都解析成对象,但是没有设置的样式是空字符串,不是undefined。如果 "empty"(例如 width:;)的样式没有效果,无论规则多么具体,那么我的目标都是微不足道的。

但是,为了用默认规则动态覆盖 display:none,我知道 document.getElementById('ele').style.display = ''; 有效,但我知道它实际上并没有添加 display 内联样式,在 CSS 中设置为空时是否有任何样式会产生影响?如果是这种情况,我将不得不手动解析样式和样式表字符串以查看是否定义了 属性。

在样式表或样式声明块中写入 display:;display:''; 是无效声明。

元素的style属性是另一回事。这是一种设置和获取元素内联样式的便捷机制。设置一个值实际上是 shorthand for .setProperty 并获得一个 shorthand for .getPropertyValue.

<div></div>

=>
element.style.display == ''
element.getPropertyValue('display') == null

由于没有设置内联样式,因此 display 没有值,所以 getPropertyValue('display') returns null.

既然我们知道 .display.getPropertyValue('display') 的缩写,让我们看看 specification 对返回值的说明:

Returns the value of the property if it has been explicitly set for this declaration block. Returns the empty string if the property has not been set

所以空字符串等于没有值。

element.style.display = 'none'

=>
<div style="display: none;"></div>
element.getPropertyValue('display') == 'none'

如您所见,我们可以使用 .style 轻松设置内联样式。如果我们现在尝试设置一个无效值,它将被忽略:

element.style.display = 'foo'

=>
<div style="display: none;"></div>
element.getPropertyValue('display') == 'none'

没有任何变化。将值设置为空字符串是可行的,因为它等同于没有样式:

element.style.display = ''

=>
<div></div>
element.getPropertyValue('display') == null 

display 设置为 null 也可以。