一篇文章带你搞懂 CSS 选择器(带示例 + 对比 + 优缺点总结)

CSS 选择器是用来精准匹配页面元素、给元素设置样式的核心工具。很多人写页面出现样式不生效、样式乱覆盖、调试困难,本质都是对选择器的分类、用法、权重、优缺点、使用场景不够清晰。

本文从基础到高阶,完整梳理 CSS 选择器体系,每类都带 1-2 个实战例子,并附上详细对比、优缺点、使用规范,一篇吃透。


一、基础选择器

1. 通配符选择器 *

匹配页面所有元素

css

css 复制代码
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

示例说明 :统一清空所有标签默认内外边距,统一盒模型规则。优点 :一次性重置所有样式,小页面极快。缺点 :性能差,遍历全部 DOM,大型项目不推荐全局使用。使用场景:简单页面样式重置。


2. 元素选择器(标签选择器)

直接用HTML 标签名匹配。

css

css 复制代码
p {
  font-size: 14px;
  line-height: 1.5;
}

div {
  margin-bottom: 10px;
}

示例说明 :页面所有 <p> 统一字号行高,所有 <div> 统一底部间距。优点 :方便统一页面标签默认样式。缺点 :范围太大,容易影响不需要的标签。使用场景:全局基础样式统一。


3. 类选择器 .className(最常用)

匹配标签上的 class 属性。

css

css 复制代码
.btn {
  padding: 6px 12px;
  border-radius: 4px;
}

.page__bd {
  width: 100%;
  padding: 15px;
}

html

预览

ini 复制代码
<div class="page__bd">
  <button class="btn">按钮</button>
</div>

示例说明 :给按钮加公共样式,给页面主体加布局样式。优点 :灵活、可复用、权重适中、配合 BEM 最稳定。缺点 :无明显缺点。使用场景:90% 业务开发、组件样式、UI 还原。


4. ID 选择器 #id

匹配标签上的 id 属性,页面唯一

css

css 复制代码
#header {
  height: 45px;
  background: #fff;
}

html

预览

bash 复制代码
<div id="header">头部</div>

示例说明 :给唯一头部元素设置高度和背景色。优点 :匹配精准、权重高。缺点 :权重太高,样式难以覆盖,不可复用。使用场景:极少用于 CSS,多用于 JS 获取唯一元素。


二、组合选择器

1. 后代选择器(空格)

匹配父元素内部所有层级的子元素。

css

css 复制代码
.page p {
  color: #333;
}

示例说明 :匹配 .page 里面所有 <p>,不管嵌套多少层。优点 :写法简单。缺点:层级深、权重不可控、容易误匹配。


2. 子代选择器 >

只匹配直接子元素(第一层)。

css

css 复制代码
.page > div {
  border: 1px solid #eee;
}

示例说明 :只匹配 .page第一层<div>,更深层不生效。优点 :精准、不污染深层元素。缺点:层级固定。


3. 相邻兄弟选择器 +

匹配紧贴在后面的第一个同级元素。

css

css 复制代码
.title + .content {
  margin-top: 8px;
}

示例说明 :给 .title 后面紧挨着 的第一个 .content 设置上边距。优点 :可做相邻元素特殊样式。缺点:范围太窄。


4. 通用兄弟选择器 ~

匹配当前元素后面所有同级元素。

css

css 复制代码
.item ~ .item {
  margin-top: 10px;
}

示例说明 :给 .item 后面所有同级 .item 设置间距。优点 :批量控制同级元素。缺点:只向后匹配。


5. 并集选择器 ,

多个选择器共用一套样式

css

arduino 复制代码
.btn-primary, .btn-default {
  height: 30px;
  line-height: 30px;
}

示例说明 :两种按钮统一高度和行高。优点 :精简代码、减少重复。缺点:维护时需注意关联性。


三、属性选择器 [ ]

根据标签属性与值筛选元素。

css

css 复制代码
/* 1. 包含 type 属性 */
input[type] {
  border: 1px solid #ccc;
}

/* 2. type 等于 text */
input[type="text"] {
  padding: 6px;
}

/* 3. 以 http 开头 */
a[href^="http"] {
  color: blue;
}

示例说明 :精准匹配表单、链接等带属性的标签。优点 :不用写 class,适合表单、自定义属性。缺点:可读性不如类选择器。


四、伪类与伪元素选择器

1. 伪类选择器 :

匹配元素状态 / 位置

css

css 复制代码
/* 鼠标悬浮 */
.btn:hover {
  opacity: 0.8;
}

/* 第一个子元素 */
.list li:first-child {
  font-weight: bold;
}

示例说明 :按钮悬浮变透明,列表第一项加粗。优点 :不新增标签就能写状态样式。缺点:过多使用会让样式逻辑变复杂。


2. 伪元素选择器 ::

创建虚拟元素,不占 DOM 结构。

css

css 复制代码
/* 头部前面加小图标 */
.title::before {
  content: "";
  width: 4px;
  height: 16px;
  background: red;
}

/* 清除浮动 */
.clearfix::after {
  content: "";
  display: block;
  clear: both;
}

示例说明 :用伪元素做装饰、做清除浮动,不增加 HTML 标签。优点 :不占 DOM、结构干净。缺点:调试相对不直观。


五、选择器详细对比表(重点)

表格

选择器类型 优先级 复用性 性能 维护难度 推荐度
通配符 * 最低 最高
标签选择器 ⭐⭐⭐
类选择器 . ⭐⭐⭐⭐⭐
ID 选择器 #
后代选择器 中高 一般 ⭐⭐
子代选择器 > ⭐⭐⭐⭐
属性选择器 ⭐⭐⭐
伪类 / 伪元素 ⭐⭐⭐⭐

六、选择器权重规则(必背)

权重从低到高:

plaintext

less 复制代码
继承 < 通配符 < 标签 < 类/属性/伪类 < ID < 行内样式 < !important

一句话总结权重越高,越优先显示;权重相同,后面覆盖前面。


七、各类选择器优缺点总结

1. 通配符

优点:快、省事缺点:性能差、全局污染不建议项目全局使用

2. 标签选择器

优点:统一风格方便缺点:范围太大、容易误伤

3. 类选择器(最强)

优点:灵活、可复用、权重合理、易维护缺点:无项目首选

4. ID 选择器

优点:匹配快缺点:权重太高、无法覆盖、不可复用不建议写 CSS 样式

5. 后代选择器

优点:简单缺点:层级深、难维护、易出 bug尽量少用

6. 子代选择器

优点:精准、不污染推荐常用

7. 伪类 / 伪元素

优点:功能强、不占 DOM必备技能


八、最终总结(最核心)

1. 选择器核心结论

  • 类选择器是开发最优解,灵活、安全、易维护。
  • ID 不适合写 CSS。
  • 后代选择器慎用,子代选择器更安全。
  • 伪类、伪元素是高级必备技能。

2. 项目规范总结

  • 优先使用 类选择器 + BEM
  • 嵌套不超过 2 层
  • 不用 ID、不用通配符全局重置
  • 伪元素用来做装饰、结构优化
  • 权重保持平稳,不滥用 !important
相关推荐
moMo2 小时前
# 从重置样式到 BEM 命名:写一个微信的按钮
前端·css
ZC跨境爬虫3 小时前
跟着 MDN 学CSS day_48:深入CSS多列布局——像报纸一样组织内容
前端·css·学习
weixin_427771614 小时前
css加载顺序导致本地和线上样式不一致
前端·css
ZC跨境爬虫11 小时前
跟着 MDN 学CSS day_41:显式轨道、隐式网格与区域命名放置
前端·javascript·css·ui·交互
小KK_17 小时前
CSS浮动布局指南:从文档流到BFC
前端·css·html
半个落月20 小时前
前端工程化第一步:BEM 国际命名规范与 CSS Reset 实战
前端·css
Darling噜啦啦21 小时前
BEM 命名规范 + CSS Reset 实战:从微信按钮页面看专业前端开发
前端·css·代码规范
To_OC1 天前
写完这个微信风格按钮页面,我终于吃透了BEM命名+CSS重置
前端·css·html
ZC跨境爬虫1 天前
跟着 MDN 学CSS day_44:响应式设计——让网页适配所有屏幕的完整指南
前端·css·ui·html·tensorflow