这是我参与更文挑战的第 3 天,活动详情查看: 更文挑战
如果我在 <div class="iphone">iphone 12</div>
标签上同时定义了 div {color: lightgreen;}
.iphone {color :red;}
两个同时设置文本颜色的样式,那么 iphone 12
会显示什么颜色?
如果我在内部样式表和外部样式表同时定义了 div {color: purple;}
div {color: black;}
两种不同的文本颜色样式,此时 iphone 12
会显示什么颜色?
这就涉及到了 CSS 选择器的优先级问题:
优先级权重值:
我们把 CSS 优先级权重值分为 5 个等级,每个等级代表一类选择器,每个等级的值为其所代表的选择器的个数乘以这一等级的权值,最后把所有等级的值相加得出选择器的特殊值。
!important
,加在样式属性值后,权重值为 10000 。- 内联样式,如:
style=""
,权重值为 1000 。 - ID选择器,如:
#cc1
,权重值为 100 。 - 类、伪类,如:
.content
、:hover
,权重值为 10 。 - 标签选择器,如:
div
、p
,权重值为 1 。
对于 4 种 CSS 引用方式的优先级来说,符合:
- 就近原则。
- 内部样式、
<link>
链入外部样式表、@import
导入外部样式表三种方式同时出现在 HTML 页面的<head></head>
标签内时,谁离要修改样式的元素近,谁的优先级高。 - 行内样式 > 内部样式、
<link>
链入外部样式表、@import
导入外部样式表。
以上两种优先级会不会产生冲突?具体应该如何理解?通过以下实例来验证一下。
实例
qt_04.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>qt_04</title>
<link rel="stylesheet" href="qt_04_style.css">
<style>
div {
color: red!important;
}
.class_box1 {
color: yellow;
}
#id_box1 {
color: green;
}
</style>
</head>
<body>
<div class="class_box1" id="id_box1" style="color: blue">
选择器优先级实例1-div
</div>
</body>
</html>
复制代码
qt_04_style.css
div {
color: black;
}
.class_box1 {
color: brown;
}
#id_box1 {
color: pink;
}
复制代码
实例说明:
div {color: red!important;}
权重为 10000 。
style="color: blue"
权重为 1000 。
#id_box1 {}
权重为 100 。
.class_box1 {}
权重为 10 。
div {}
权重为 1 。
此时文本颜色为 red 。
如果删除 !important
,此时文本颜色为 blue 。
如果删除 style="color: blue"
,此时文本颜色为 green 。
如果将 <link>
标签写在 <style></style>
标签之后,此时文本颜色为 pink ,调用的是 qt_04_style.css 外部样式表中的样式。
如果删除 id="id_box1"
,此时文本颜色为 yellow 。
如果删除 class="class_box1"
,此时文本颜色为 red 。
CSS 优先级法则
- 选择器都有一个权值,权值越大越优先。
- 当权值相等时,后出现的样式表设置要优于先出现的样式表设置。
- 创作者的规则高于浏览器:既网页编写者设置的CSS 样式的优先级高于浏览器所设置的样式。
- 继承的 CSS 样式优先级低于后来指定的 CSS 样式。
- 在同一组属性设置中标有
!important
规则的优先级最大。