CSS 选择器是 CSS 的核心概念之一,它决定了样式将应用到哪些 HTML 元素上。掌握选择器的使用是编写有效 CSS 的基础。
选择器就像一个过滤器,告诉浏览器应该将样式应用到哪些元素上。没有选择器,CSS 就无法确定样式的应用对象。
p {
color: blue;
}
在这个例子中,p 就是选择器,它告诉浏览器:"找到所有的 <p> 元素,然后把它们的颜色设置为蓝色"。
CSS 选择器可以分为以下几大类:
不同的选择器具有不同的优先级,当多个选择器作用于同一个元素时,浏览器会根据优先级规则决定应用哪个样式。
优先级用一个三元组表示:(ID 选择器数量, 类选择器数量, 元素选择器数量)
/* 优先级:(0,0,1) */
p {
color: blue;
}
/* 优先级:(0,1,0) */
.text {
color: green;
}
/* 优先级:(1,0,0) */
#header {
color: red;
}
#header (1,0,0) > .text (0,1,0) > p (0,0,1)
!important 具有最高优先级,会覆盖其他所有样式:
.text {
color: green !important;
}
但要注意,过度使用 !important 会让样式难以维护,应尽量避免使用。
不同的选择器对浏览器性能的影响不同:
/* 不推荐 - 过度嵌套 */
div ul li a span {
color: blue;
}
/* 推荐 - 使用类选择器 */
.nav-link span {
color: blue;
}
适用于需要对某种类型的所有元素应用相同样式的情况:
h1 {
font-size: 32px;
margin-bottom: 20px;
}
p {
line-height: 1.6;
margin-bottom: 15px;
}
适用于需要对一组特定元素应用相同样式的情况:
.button {
padding: 10px 20px;
background: #007bff;
color: white;
border: none;
border-radius: 4px;
}
.highlight {
background-color: #fff3cd;
padding: 10px;
}
适用于页面中唯一的元素:
#header {
background: #fff;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
#main-content {
max-width: 1200px;
margin: 0 auto;
}
适用于选择某个元素的所有后代元素:
/* 选择所有 div 内的段落 */
div p {
margin-bottom: 15px;
}
/* 选择 nav 内的所有链接 */
nav a {
color: white;
text-decoration: none;
}
适用于只选择直接子元素:
/* 只选择 ul 的直接子元素 li */
ul > li {
margin-bottom: 10px;
}
/* 只选择 nav 的直接子元素 a */
nav > a {
font-weight: bold;
}
选择器可以组合使用,实现更精确的选择:
/* 选中所有 h1、h2、h3 */
h1, h2, h3 {
color: #333;
margin-bottom: 15px;
}
/* 选中所有具有类名 button 和 primary 的元素 */
.button.primary {
background: #007bff;
}
/* 选中 div 内的类名为 text 的元素 */
div .text {
color: #666;
}
/* 选中 ID 为 header 内的类名为 logo 的元素 */
#header .logo {
font-size: 24px;
}
类选择器具有良好的可重用性和可维护性:
/* 推荐 */
.card {
background: white;
border: 1px solid #ddd;
padding: 20px;
}
/* 不推荐 - 使用元素选择器限制性太强 */
div {
background: white;
border: 1px solid #ddd;
padding: 20px;
}
过度嵌套会降低性能并增加维护难度:
/* 不推荐 */
body div.container div.content div.article div.title {
font-size: 24px;
}
/* 推荐 */
.article-title {
font-size: 24px;
}
使用有意义的类名可以提高代码可读性:
/* 推荐 */
.article-title {
font-size: 24px;
}
/* 不推荐 */
.big-text {
font-size: 24px;
}
除非绝对必要,否则避免使用 !important:
/* 推荐 */
.button.primary {
background: #007bff;
}
/* 不推荐 */
.button {
background: #999 !important;
}
/* 错误 - 类选择器需要加点 */
title {
color: blue;
}
/* 正确 */
.title {
color: blue;
}
<!-- 错误 - ID 应该唯一 -->
<p id="text">第一段</p>
<p id="text">第二段</p>
<!-- 正确 - 使用类选择器 -->
<p class="text">第一段</p>
<p class="text">第二段</p>
/* 可能不符合预期 */
#header .nav {
color: blue;
}
/* 优先级更高 */
.nav {
color: red !important;
}
/* 导航容器 */
.main-nav {
background: #333;
padding: 0 20px;
}
/* 导航链接 */
.main-nav a {
color: white;
text-decoration: none;
padding: 15px 10px;
display: inline-block;
}
/* 导航链接悬停效果 */
.main-nav a:hover {
background: #555;
}
/* 当前页面链接 */
.main-nav a.active {
background: #007bff;
}
/* 文章容器 */
.article {
background: white;
padding: 30px;
margin-bottom: 20px;
}
/* 文章标题 */
.article-title {
font-size: 28px;
color: #333;
margin-bottom: 15px;
}
/* 文章元信息 */
.article-meta {
color: #666;
font-size: 14px;
margin-bottom: 20px;
}
/* 文章内容 */
.article-content {
line-height: 1.8;
color: #555;
}
/* 文章内容中的段落 */
.article-content p {
margin-bottom: 15px;
}
CSS 选择器是 CSS 的核心,掌握选择器的使用对于编写有效的 CSS 至关重要。记住以下几点: