CSS 样式级联
浏览器使用以下顺序查找属性值。
- 内联样式 - 使用元素上的style全局属性定义的样式
- 嵌入式样式 - 在样式元素中定义的样式
- 外部样式 - 使用链接元素导入的样式
- 用户样式 - 已由用户定义的样式
- 浏览器样式 - 浏览器应用的默认样式
例如,为一个元素选择文本的颜色。
浏览器将需要为CSS颜色属性找到一个值。
首先,它将检查它试图渲染的元素是否具有定义颜色值的内联样式,如下所示:
<a style="color:red" href="https://www.zijiebao.com">Visit the website</a>
如果没有内联样式,浏览器将查找包含适用于元素的样式的样式元素,如下所示:
<style type="text/css"> a { color: red; } </style>
如果没有这样的样式元素,浏览器会查看通过链接元素加载的样式表。
如果仍然找不到颜色属性,则使用默认的浏览器样式。
注意
属性的前三个来源(内联样式,嵌入样式和样式表)统称为作者样式。
用户样式表中定义的样式称为用户样式,浏览器定义的样式称为浏览器样式。
重要样式
您可以通过将属性值标记为重要来覆盖正常的级联顺序。
通过对声明附加!important
,可以将单个值标记为重要。
<!DOCTYPE HTML>
<html>
<head>
<title>Example</title>
<style type="text/css">
a {
color: black !important;
}
</style>
</head>
<body>
<a style="color:red" href="https://www.zijiebao.com">Visit the website</a>
<p>This is a text.</p>
<a href="https://www.w3.org" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" >Visit the W3C website</a>
</body>
</html>
浏览器优先选择重要的样式,无论它们在何处定义。
特异性和顺序评估
如果有两个样式应用于在同一级别定义的元素,并且它们都包含浏览器正在寻找的CSS属性的值。
要决定使用哪个值,浏览器会评估每个样式的特异性,并选择最具体的值。
浏览器通过计算三个不同的特征来确定样式的特异性:
- 样式选择器中的id值的数量
- 选择器中的其他属性和伪类的数量
- 选择器中元素名称和伪元素的数量
浏览器合并来自每个评估的值,并应用来自最特定样式的属性值。
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
a {
color: black;
}
a.myclass {
color:white;
background:grey;
}
</style>
</head>
<body>
<a href="https://www.zijiebao.com">Visit the website</a>
<p>The is a test.</p>
<a class="myclass" href="https://www.w3.org" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" >Visit the W3C website</a>
</body>
</html>
当评估特异性时,您以a-b-c的形式创建一个数字,其中每个字母是三个特征之一的总和。
只有a值相等,浏览器才会比较b值。
只有当a和b的值相同时,浏览器才会考虑c值。
1-0-0的特异性得分比0-2-2更特异。
在上面的代码中,selector a.myclass包含一个类属性,这意味着样式的特殊性是0-1-0。 0用于id值,1用于其他属性,0用于元素名称。
当呈现已分配给myclass类的元素时,浏览器会为color属性找到一个值。对于所有其他的元素,将使用另一个样式的值。
当在具有相同特定性的样式中定义值时,浏览器根据顺序选择值。
例子
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
a.myclass1 {
color: black;
}
a.myclass2 {
color:white;
background:grey;
}
</style>
</head>
<body>
<a href="https://www.zijiebao.com">website</a>
<p>This is a paragraph.</p>
<a class="myclass1 myclass2" href="https://www.w3.org" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" >W3C</a>
</body>
</html>
继承
如果浏览器找不到一个可用样式中的值,它将使用继承。
继承意味着获取由父元素定义的属性的值。
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
p {
color:white;
background:grey;
border: medium solid black;
}
</style>
</head>
<body>
<a href="https://www.zijiebao.com">website</a>
<p>This is a <span>test</span>.</p>
<a href="https://www.w3.org" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" >W3C</a>
</body>
</html>
span
元素的父代是 p
元素。
span元素从父p元素继承color属性。
不是所有的CSS属性都是继承的。
只有与外观相关的是继承的,包括文本颜色,字体详细信息等。
与布局相关的不是继承。
inherit关键字
你可以通过使用inherit
在样式中强制继承,
inherit
显式地告诉浏览器对属性使用父元素的值。
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
p {
color:white;
background:grey;
border: medium solid black;
}
span {
border: inherit;
}
</style>
</head>
<body>
<a href="https://www.zijiebao.com">website</a>
<p>This is a <span>test</span> from www.zijiebao.com.</p>
<a href="https://www.w3.org" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" >W3C</a>
</body>
</html>