是否可以覆盖display属性,使其返回默认值?例如,如果我在一个样式中将其设置为none,并且我想在另一个样式中将其覆盖为默认值。
还是找出该元素的默认值并将其设置为默认值是唯一的方法?希望不需要知道元素通常是块级、内联或其他哪种类型...
浏览器的默认样式定义在其用户代理样式表中,您可以在这里找到其来源。不幸的是,级联和继承级别3规范似乎没有提出将样式属性重置为其浏览器默认值的方法。然而,在级联和继承级别4中有重新引入此关键字的计划 - 工作组尚未确定此关键字的名称(链接目前显示为revert
,但它并非最终版本)。有关revert
的浏览器支持信息可以在caniuse.com上找到。
initial
关键字,将属性设置为初始值会将其重置为CSS定义的默认值,而不是浏览器定义的值。 display
的初始值为 inline
;可以在此处指定。关键字initial
指的是该值,而不是浏览器默认值。规范本身在all
属性下做了这个注释:
因此,我猜现在唯一使用纯 CSS 的方法是查找浏览器默认值并手动设置到那个值。例如,如果作者在元素上指定
all: initial
,它将阻止所有继承并重置所有属性,就好像作者、用户或用户代理级别的层叠中没有出现任何规则。这对于页面中包含的“小部件”的根元素很有用,它不希望继承外部页面的样式。但请注意,也会清除应用于该元素的任何“默认”样式(例如 UA 样式表上块元素(如
<div>
)的display: block
)。
div.foo { display: inline-block; }
div.foo.bar { display: block; }
上述的另一种替代方法是div.foo:not(.bar) { display: inline-block; }
,但这涉及修改原始选择器而不是覆盖。
initial
的实际作用。我已经更新了我的答案。 - BoltClockdisplay
的初始值始终为inline
(http://www.w3.org/TR/CSS21/visuren.html#display-prop),无论它是在`div`还是`span`上。根据HTML规范,一个`div`元素默认情况下是`display: block,而不是CSS规范决定的,因此浏览器的UA样式表需要声明
div { display: block; }`。 - BoltClockdefault
已被重命名为 revert
。 - Oriol如果允许使用JavaScript,您可以将display
属性设置为空字符串。这将导致它使用该特定元素的默认值。
var element = document.querySelector('span.selector');
// Set display to empty string to use default for that element
element.style.display = '';
这里有一个链接指向一个jsbin。
这很好,因为你不必担心不同类型的显示(block
、inline
、inline-block
、table-cell
等)。
但是它需要javascript,因此如果您正在寻找仅使用CSS的解决方案,则这不是适合您的解决方案。
注意:这将覆盖内联样式,但不会覆盖在CSS中设置的样式
style
属性设置样式的情况。您无法使用此方法覆盖或删除样式表中的声明。 - BoltClockstyle
属性或JavaScript设置器应用的样式。如果您通过JS设置特定值,仍然可以覆盖样式表声明,但将其设置为空相当于根本没有设置 - 样式表声明将保持不变。请参见修改后的fiddle:http://jsfiddle.net/BoltClock/g45qagt3/1 - BoltClockdisplay
属性:你可以使用值为 unset
的属性,这在 Firefox和Chrome 都适用。
display: unset;
.foo { display: none; }
.foo.bar { display: unset; }
display
的值将变为 “inline”。请参阅 https://codepen.io/Gidgidonihah/pen/mwWxEq。 - Gidgidonihahunset
无法解决这个问题,因为它是按属性重置的,并且始终会将显示重置为 inline
。请考虑更新您的答案。 - krulikfunction defaultValueOfCssPropertyForElement(cssPropertyName, elementTagName, opt_pseudoElement) {
var pseudoElement = opt_pseudoElement || null;
var element = document.createElement(elementTagName);
document.body.appendChild(element);
var computedStyle = getComputedStyle(element, pseudoElement)[cssPropertyName];
element.remove();
return computedStyle;
}
// Usage:
defaultValueOfCssPropertyForElement('display', 'div'); // Output: 'block'
defaultValueOfCssPropertyForElement('content', 'div', ':after'); // Output: 'none'
(例如背景颜色:红色)
,然后使用 JavaScript 将其更改为另一种样式(例如背景颜色:绿色)
,现在你想将该样式重置为样式表中的原始值(背景颜色:红色)
,而不必提及或甚至知道其值(例如:element.style.backgroundColor='red')...!
如果我理解正确,我有一个好的解决方案可以提供给你,那就是为元素使用另一个类名:
步骤如下:
如果你想编辑或设置新的样式,请按新类名获取元素并按需要编辑样式。
希望这可以帮助到你。祝好!
unset
。 - minsunset
,initial
,inherit
,revert
。点击链接。 - Theraot