层叠是 CSS 中最重要的概念之一,它决定了当多个样式规则应用到同一个元素时,浏览器如何确定最终应用的样式。理解层叠对于掌握 CSS 至关重要。
层叠是指当多个样式规则应用到同一个元素时,浏览器根据一定的规则确定最终应用的样式。
层叠确保了样式的一致性和可预测性,使得开发者可以灵活地控制样式。
CSS 样式有三个来源,优先级从高到低为:
/* !important 声明 */
.text {
color: red !important;
}
/* 内联样式 */
<p style="color: blue;">文本</p>
/* 作者样式 */
body {
color: #333;
}
/* 用户样式 */
/* 用户通过浏览器设置自定义样式 */
/* 浏览器默认样式 */
/* 浏览器自动应用 */
特异性是指选择器的权重,用于确定当多个选择器应用到同一个元素时,哪个选择器的样式优先级更高。
特异性的计算规则:
/* 内联样式 - 特异性 1000 */
<p style="color: red;">文本</p>
/* ID 选择器 - 特异性 100 */
#text {
color: blue;
}
/* 类选择器 - 特异性 10 */
.text {
color: green;
}
/* 标签选择器 - 特异性 1 */
p {
color: yellow;
}
/* 通配符选择器 - 特异性 0 */
* {
color: orange;
}
/* 特异性 1 */
p {
color: red;
}
/* 特异性 10 */
.text {
color: blue;
}
/* 特异性 11 */
p.text {
color: green;
}
/* 特异性 100 */
#text {
color: yellow;
}
/* 特异性 101 */
p#text {
color: orange;
}
/* 特异性 110 */
#text.text {
color: purple;
}
/* 特异性 111 */
p#text.text {
color: pink;
}
当多个样式规则具有相同的优先级和特异性时,后定义的样式优先级更高。
/* 先定义 */
.text {
color: red;
}
/* 后定义 */
.text {
color: blue;
}
/* 最终应用 blue */
/* 特异性计算 */
/* 规则 1:特异性 1 */
p {
color: red;
}
/* 规则 2:特异性 10 */
.text {
color: blue;
}
/* 规则 3:特异性 11 */
p.text {
color: green;
}
/* 规则 4:特异性 100 */
#text {
color: yellow;
}
/* 最终应用 yellow,因为特异性最高 */
/* !important 的使用 */
.text {
color: red !important;
}
#text {
color: blue;
}
/* 最终应用 red,因为 !important 优先级最高 */
/* 内联样式 */
<p style="color: red;">文本</p>
/* CSS 样式 */
.text {
color: blue;
}
/* 最终应用 red,因为内联样式优先级更高 */
/* 样式覆盖 */
.text {
color: red;
}
.text {
color: blue;
}
/* 最终应用 blue,因为后定义的样式优先级更高 */
/* 选择器特异性 */
.container .text {
color: red; /* 特异性 20 */
}
.text {
color: blue; /* 特异性 10 */
}
/* 最终应用 red,因为特异性更高 */
/* ID 选择器优先 */
#text {
color: red; /* 特异性 100 */
}
.text {
color: blue; /* 特异性 10 */
}
/* 最终应用 red,因为特异性更高 */
/* 内联样式优先 */
<p style="color: red;">文本</p> /* 特异性 1000 */
#text {
color: blue; /* 特异性 100 */
}
/* 最终应用 red,因为内联样式优先级更高 */
/* 不推荐 - 过度使用 !important */
.text {
color: red !important;
font-size: 16px !important;
}
/* 推荐 - 使用选择器提高特异性 */
.container .text {
color: red;
font-size: 16px;
}
/* 不推荐 - 使用标签选择器 */
p {
color: #333;
}
/* 推荐 - 使用类选择器 */
.text {
color: #333;
}
/* 不推荐 - 选择器过于复杂 */
.container .sidebar .menu .item .link {
color: #333;
}
/* 推荐 - 使用简单的类选择器 */
.link {
color: #333;
}
/* 推荐 - 保持样式的一致性 */
.button {
color: white;
background: #007bff;
}
.button:hover {
color: white;
background: #0056b3;
}
/* 不推荐 - 样式不一致 */
.button {
color: white;
background: #007bff;
}
.button:hover {
color: #333;
background: #f5f5f5;
}
/* 推荐 - 使用 CSS 变量 */
:root {
--primary-color: #007bff;
--text-color: #333;
}
.button {
color: var(--text-color);
background: var(--primary-color);
}
/* 不推荐 - 重复使用颜色值 */
.button {
color: #333;
background: #007bff;
}
浏览器开发者工具可以显示样式的来源和优先级:
浏览器开发者工具可以显示元素的计算样式:
浏览器开发者工具可以显示选择器的特异性:
层叠是 CSS 中最重要的概念之一:
记住以下几点: