Css 简明教程
CSS - !important
在 CSS 中,符号 !important 是一个特殊方式,它用来赋予 CSS 声明优先权,使其优先于适用于同一选择器的其他竞争规则。该声明用于赋予 CSS 规则更高的特殊性和优先级,这意味着它会覆盖其他冲突的样式,即使这些样式具有更高的特殊性或在样式表中稍后定义。
-
感叹号 (!) 后跟单词 important (没有空格)告诉浏览器优先设置该样式高于其他所有样式。
-
此规则改变了浏览器选择遵循哪些规则的方式。不具备这种特殊关照的规则被称为正常规则。
-
至关重要的是, !important 是声明中的最后一个元素,紧在终止分号之前。在处理允许多个关键字的属性时,此位置尤为重要,例如 font 属性。
CSS !important - Basic Example
以下示例演示了 !important 的使用,在此示例中,我们通过使用新样式重新定义 .box 类来覆盖基本样式:
<html>
<head>
<style>
/* Base styles */
.box {
width: 200px;
height: 200px;
background-color: red;
margin: 10px;
}
/* Override styles using !important */
.box {
background-color: blue !important;
margin: 20px !important;
}
</style>
</head>
<body>
<div class="box"><h2>DEMO BOX<h2></div>
</body>
</html>
CSS !important - Impact On The Cascade
cascade 是一个算法,它定义用户代理如何组合来自不同来源的属性值。您可以在 here 中了解更多信息。
标记为 !important 的那些规则或属性比那些没有标记的属性权重更高。如果两个规则适用于一个元素,而其中一个标记为 !important ,则重要规则获胜。
有三个来源: author, reader, and user agent 。您可以在 here 中了解更多信息。
在正常情况下,作者的样式优先于读者的样式。 !important 读者的样式比任何其他样式都强,包括 !important 作者样式。作者样式和读者样式都优先于用户代理的默认样式。
在声明权重方面需要考虑五个级别。按从最高到最低权重的顺序排列,它们是:
-
Reader important declarations
-
Author important declarations
-
Author normal declarations
-
Reader normal declarations
-
User agent declarations
CSS !important - Transitions
但是 transitions 是例外。 CSS transitions 控制属性更改的速度。在这些转换过程中,属性不匹配特定重要的声明,因此转换是唯一可以覆盖 !important 声明的方面。
以下示例演示了 CSS transitions 如何覆盖 !important 规则,从而实现网页上平滑且赏心悦目的效果。
<html>
<head>
<style>
.box {
width: 200px;
height: 200px;
background-color: red;
transition: background-color 2s;
}
.box:hover {
background-color: blue !important;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
CSS !important - Inline Styles
内联样式是那些您可以使用样式属性直接添加到 HTML 元素中的样式。这些样式可以是基本的或重要的。无论它们在何处定义,基本的内联样式都比其他基本样式更强。
!important 内联样式比 !important 网站样式更强,但不如用户或浏览器样式强。但是,样式中的特殊 transitions 可以覆盖 !important 内联样式。
以下示例演示了这一点:
<html>
<head>
<style>
p#bright {color: silver;}
p {color: black !important; }
</style>
</head>
<body>
<p style="color:red !important">Welcome to Tutorialspoint!</p>
</body>
</html>
CSS !important and Specificity
根据 CSS 规则,如果冲突的声明适用于一个元素并且它们都具有相同的权重,那么它们应该按特殊性进行排序,最具体的声明获胜。但如果属性被声明为重要属性,那么无论选择器特殊性如何匹配正常声明,来自同一来源和层叠层的重要声明总是优先。
当来自相同源和层的两个重要声明应用到同一元素时,浏览器会选择并使用特定性最高的声明,如下所示。此处文本颜色为红色:
<html>
<head>
<style>
#demo-para p {
color: green !important;
}
p {
color: red !important;
}
</style>
</head>
<body>
<p id="demo-para">Welcome to Tutorialspoint! </p>
<p>A place to find all courses!</p>
</body>
</html>
CSS !important - Impact on shorthand property
当你在一个速记属性中使用 !important 时,它同样会对所有单独属性施加重要性。以下示例相同。此示例:
p {
background: red !important;
}
上述样式等效于:
h2 {
font-variant : normal !important;
font-weight : bold !important;
font-size : 15px !important;
font-family : "Times New Roman", Times, Serif !important;
}
CSS !important - Impact on Custom property
当你在一个自定义属性中添加 !important 时,这表示该值非常重要。但在设置之后, !important 部分会被从该值中移除。 !important 标记不会被作为自定义属性值的一部分传递给 var() 函数。
以下代码演示了 !important 对自定义属性的影响:
<html>
<head>
<style>
:root {
--primary-color: blue !important;
--primary-color: red ;
}
.box {
background-color: var(--primary-color) ;
width: 200px;
height: 200px;
}
p {
color: var(--primary-color);
}
</style>
</head>
<body>
<div class="box"></div>
<p>Welcome to Tutorialspoint! </p>
</body>
</html>
CSS !important - Override
以下示例演示了 !important 规则如何覆盖同一属性的其他 !important 规则。它允许你控制 CSS 样式的特定性和优先级。当你运行该程序时,你会看到 <div> 中的文本为红色,第一个 <span> 中的文本为蓝色,第二个 <span> 中的文本为绿色。
<html>
<head>
<title>!important Overrides !important</title>
<style>
.demo-important-text {
color: red !important;
}
.demo-important-text span {
color: blue !important;
}
.demo-important-text span span {
color: green !important;
}
</style>
</head>
<body>
<div class="demo-important-text">
This sentence should be red.
<span>
This sentence should be blue.
<span>
This sentence should be green.
</span>
</span>
</div>
</body>
</html>