在 CSS 中,符号 !important 是一种特殊的方式,可以使 CSS 声明优先于适用于同一选择器的其他竞争规则。此声明用于为 CSS 规则提供更高的特异性和优先级,这意味着它将覆盖其他冲突的样式,即使这些样式具有更高的特异性或稍后在样式表中定义。
感叹号 (!) 后跟重要一词(不含空格)告诉浏览器将该样式优先于所有其他样式。
此规则更改浏览器如何选择要遵循的规则。没有这种特殊注意的规则称为正常规则。
重要的是!important 是声明中的最后一个元素,位于终止分号之前。
当涉及到允许值包含多个关键字的属性(例如字体属性)时,此位置尤其重要。
语法
selector {
property: value !important;
}
CSS !important: 基本示例
以下示例演示了 !important 的使用,其中我们通过使用新样式重新定义 .box 类来覆盖基本样式:
<html>
<head>
<style>
/*基本样式 */
.box {
width: 200px;
height: 200px;
background-color: red;
margin: 10px;
}
/* 使用!important覆盖样式 */
.box {
background-color: blue !important;
margin: 20px !important;
}
</style>
</head>
<body>
<div class="box"><h2>DEMO BOX<h2></div>
</body>
</html>
请记住,虽然 !important 在特定情况下很方便,但最好仅在真正需要时使用它。
过于频繁地使用 !important 会使代码更难管理和调试。
依靠适当的 CSS 特异性和结构来防止过度使用 !important 是一个很好的做法。
CSS !important: 对级联的影响
级联是一种算法,定义用户代理如何组合源自不同源的属性值。您可以在此处了解更多信息。
标记为 !important 的规则或属性的权重高于未标记为 !important 的规则或属性。如果两个规则适用于一个元素,并且其中一个被标记为 !important,则 important 规则胜出。
共有三个来源:作者、读者和用户代理。
一般情况下,作者的风格胜过读者的风格。 !important 读者风格比任何其他风格都更强,包括 !important 作者风格。作者和读者样式都会覆盖用户代理的默认样式。
在声明权重方面需要考虑五个级别。按照权重从大到小的顺序,这些是:
读者重要声明
作者重要声明
作者正常声明
读者正常声明
用户代理声明
CSS !important: 过渡
但是过渡是例外。 CSS 过渡控制属性更改的速度。在这些转换期间,属性与特定的 important 声明不匹配,因此转换是唯一可以覆盖 !important 声明的方面。
以下示例演示了 CSS 转换如何覆盖 !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: 内联样式
内联样式是使用 style 属性直接添加到 HTML 元素的样式。这些风格可以是基本的,也可以是重要的。基本内联样式比其他基本样式更强,无论它们在哪里定义。
!重要内联样式比!重要网站样式更强,但不如用户或浏览器样式强。但是,特殊样式中的过渡可以覆盖 !important 内联样式。
以下示例演示了这一点:
<html>
<head>
<style>
p#bright {color: silver;}
p {color: black !important; }
</style>
</head>
<body>
<p style="color:red !important">Welcome to Yxjc123.com!</p>
</body>
</html>
CSS !important: 特异性
根据 CSS 规则,如果声明冲突适用于一个元素并且它们都具有相同的权重,它们应该按特殊性排序,最具体的声明获胜。但是,如果该属性被声明为 important,那么无论选择器特异性与普通声明的匹配程度有多高,来自同一源和级联层的重要声明将始终具有优先级。
当来自同一来源和层的两个重要声明应用于同一元素时,浏览器会选择并使用具有最高特异性的声明,如下所示。这里文本的颜色是红色:
<html>
<head>
<style>
#demo-para p {
color: green !important;
}
p {
color: red !important;
}
</style>
</head>
<body>
<p id="demo-para">Welcome to Yxjc123.com ! </p>
<p>A place to find all courses!</p>
</body>
</html>
CSS !important: 对简写属性的影响
当您将 !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: 对自定义属性的影响
当您添加时!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 Yxjc123.com! </p>
</body>
</html>
CSS ! important: 覆盖
以下示例演示了 !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">
这句话应该是红色的。
<span>
这句话应该是蓝色的。
<span>
这句话应该是绿色的。
</span>
</span>
</div>
</body>
</html>