【发布时间】:2015-07-12 16:00:32
【问题描述】:
我试图通过同时考虑内联样式和类样式来确定适用于元素的样式。 Javascript 将这两者解析为对象,但未设置的样式是空字符串,而不是undefined。如果“空”样式(例如width:;)无效,无论规则多么具体,那么我的目标是微不足道的。
但是,为了使用默认规则动态覆盖 display:none,我知道 document.getElementById('ele').style.display = ''; 有效,虽然我知道它实际上并没有添加 display 内联样式,但有没有任何样式在 CSS 中设置为空时的效果?如果是这种情况,我将不得不手动解析样式和样式表字符串以查看属性是否已定义。
【问题讨论】:
-
document.getElementById('ele').style.display = '';有效,因为您将display:none;设置为display:;,这是无效的,因此浏览器会忽略display:;,只使用默认显示值。对于<div>,默认值为display: block,对于<span>,默认值为display: inline;。 -
JavaScript 不解析任何东西,
.style是内联样式,属性的默认值为空字符串,表示“此属性没有内联样式” . -
width:;是一个语法错误,无论发生在哪里都会被忽略。elt.style.display = '';不会将display属性的值设置为空字符串,而是删除display属性。 -
澄清一下,如果你说“空字符串”,你的意思不是
'',对吧?我的意思是,content:''是一个有效的样式属性。还有像border这样的速记属性。规范说所有值都是可选的;省略宽度意味着0,省略样式意味着none,省略颜色意味着currentColor。换句话说,border:;将意味着border:0 none currentColor;虽然它没有说明这是否有效。 -
@MrLister 正确,我的意思是在
:和;之间什么都不放。您提出了一个有趣的观点,但是当设置类样式时,border:;与border:0 none currentColor;不一样(JSFiddle)
标签: javascript css css-specificity