CSS 选择器全解析:从基础到进阶

更新日期: 2025-11-08 阅读: 68 标签: 选择器

本期文章我整理了css选择器从基础到进阶,包含基础选择器,组合选择器,伪类选择器和伪素选择器及语法案例优先级,典型应用场景等。看完这篇文章伪类选择器和伪元素选择器就不会傻傻分不清楚了。


选择器一览表

层级
选择器类型
语法示例
优先级
描述
典型场景
基础
通配
*
0-0-0
匹配所有元素
全局 reset、清除内外边距
基础
元素(类型)
h1/p/img
0-0-1
按标签名匹配
统一段落字号、图片圆角
基础
.btn/.nav__item
0-1-0
按 class 匹配,可复用
按钮、卡片、列表项
基础
ID
#header/#price
1-0-0
唯一标识,页面仅一次
顶部通栏、锚点跳转目标
基础
属性存在
a[target]
0-1-0
只要有该属性即选中
所有外链加图标
基础
属性精确
input[type="text"]
0-1-0
属性值完全相等
文本框统一样式
基础
属性开头
a[href^="https"]
0-1-0
属性值以指定字符串开头
安全链接高亮
基础
属性结尾
img[src$=".webp"]
0-1-0
属性值以指定字符串结尾
WebP 图片加标识
基础
属性子串
a[href*="download"]
0-1-0
属性值中包含子串
下载链接按钮化
组合
分组/并集
h1,h2,h3
各自计算
一次声明,多处生效
统一标题字体
组合
后代
nav a
0-0-2
任意层级嵌套均命中
导航内所有链接
组合
子代
ul > li
0-0-2
仅直接子节点
一级菜单项
组合
相邻兄弟
h1 + p
0-0-2
紧接在后的同级元素
标题后首段突出
组合
通用兄弟
h1 ~ p
0-0-2
之后所有同级元素
标题后所有段落
伪类
动态 :link:visited
a:link
0-1-0
未访问/已访问超链接
区分链接状态
伪类
动态 :hover:active:focus
button:hover
0-1-0
鼠标悬停/激活/聚焦
交互反馈
伪类
结构 :first-child:last-child
li:first-child
0-1-0
父元素内第 1 或最后 1 个子节点
列表首尾去边框
伪类
结构 :nth-child()
tr:nth-child(even)
0-1-0
按位置公式匹配
斑马纹表格
伪类
结构 :nth-of-type()
p:nth-of-type(3)
0-1-0
仅统计同类型节点
第 3 段首字下沉
伪类
否定 :not()
li:not(.active)
0-1-0
排除指定条件
未激活菜单项置灰
伪类
唯一 :only-child
span:only-child
0-1-0
父元素仅一个子节点
图标独占居中
伪类
空元素 :empty
div:empty
0-1-0
无子节点(含文本)
隐藏占位空盒
伪类
根节点 :root
:root
0-1-0
等价于 html,但权重更高
声明 CSS 变量
伪元素
首行 ::first-line
p::first-line
0-0-1
块级元素第一行
杂志首行加粗
伪元素
首字 ::first-letter
p::first-letter
0-0-1
块级元素首字
首字下沉
伪元素
前置内容 ::before
.tip::before
0-0-1
在元素内容前插入
图标、必填红点
伪元素
后置内容 ::after
.clearfix::after
0-0-1
在元素内容后插入
清除浮动、装饰线
进阶
多层组合
form > fieldset:nth-child(2) input[type="checkbox"]:checked + label
0-1-4
子代+结构+属性+伪类+相邻
复杂表单联动
进阶
属性+伪类
a[href$=".pdf"]:hover::after
0-1-1
属性+伪类+伪元素
PDF 链接 hover 提示图标
进阶
否定+结构
ul:not(.plain) li:nth-child(n+4)
0-1-2
排除 plain 列表后,从第 4 项起选中
分页/缩略图
进阶
变量作用域
:root{--c:#ff0} .dark{--c:#333} .btn{color:var(--c)}
利用 :root 与类切换实现主题
黑白主题一键切换

伪类选择器和伪元素选择器区别

维度
伪类选择器
伪元素选择器
目的
已有元素的某种状态/位置加样式
dom 中插入一个并不存在的新节点再加样式
典型写法
单冒号 :hover:nth-child()
双冒号 ::before::first-line(单冒号也兼容)
数量
1 个真实元素可同时命中多个伪类
1 个真实元素最多只有 1 个同名伪元素
是否可省元素
必须依附已有元素
必须依附已有元素
浏览器表现
只是切换样式,不增节点
会在渲染树生成一个“假节点”,可设 content
常见示例
a:hover
、 li:first-child、 input:focus
p::before{content:"❗";}
、 div::selection

注意事项

1. 优先级:行内(1-0-0) > ID(1-0-0) > 类/伪类/属性(0-1-0) > 元素/伪元素(0-0-1)

2. 伪元素双冒号(::before)与单冒号(:before)现代浏览器均支持,建议统一双冒号。

3. :nth-child(an+b) 公式从 1 开始计数;:nth-of-type 只统计同标签。

4. 尽量避免过度嵌套(>3 层),保持可读性与性能。

来源公众号:杨小样随笔

本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/article/detial/13160

CSS3 target 选择器_:target伪类的使用

arget作为目标伪类选择器,是css3中的新特性之一。URL 带有后面跟有锚名称 #,指向文档内某个具体的元素。这个被链接的元素就是目标元素(target element)。:target 选择器可用于选取当前活动的目标元素。

css兄弟选择器(+ 和 ~)的使用和区别

这篇文章主要讲解css中兄弟选择器的使用,以及+和~的区别有哪些?+ 选择器:如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器。 ~ 选择器:作用是查找某一个指定元素的后面的所有兄弟结点。

jquery的选择器有哪些?如何对元素取值和设置值

jQuery 选择器 jQuery 选择器允许您对 HTML 元素组或单个元素进行操作, Jquery 选择器包括:基本选择器、层叠选择器 、基本过滤选择器 、内容过滤选择器、可视化过滤选择器.....

CSS中的focus-within伪类选择器

在CSS中 :focus-within 是一个伪类,CSS中伪类:focus-within能非常方便处理获取焦点状态, 当元素本身或其后代获得焦点时,:focus-within伪类的元素就会有效。

vue 选择器_实现scoped深度作用选择器

vue项目中,当<style>标签有scoped属性时,它的 CSS 样式只作用于当前组件中的元素,父组件的样式将不会渗透到子组件中。如果你希望 scoped 样式中的一个选择器能够作用得更深,例如影响子组件

css 选择器符号

空格:后代选择器,表示div元素里面所有的p元素。> 子选择器:表示div元素里面所有的子代(不含孙代及以后)p元素,~兄弟元素选择器:表示.cls元素往后的同级的p元素

css选择器总结_30个CSS3选择器

总结30个CSS3选择器:*选择器是选择页面上的全部元素,上面的代码作用是把全部元素的margin和padding设为0,最基本的清除浏览器默认样式的方法。

css节点选择器

基础选择器是选择器的所有选择器的基本组成元素,也最简单,包含如下5个类别:ID选择器,标签选择器,类选择器,属性选择器,通配选择器

CSS3 中关于 *-of-type 和 *-child的差异性及适用场景

CSS3 中有很多表示元素序号的选择器,有以下几种:first-child、:first-of-type、:last-of-type、:only-of-type、:only-child、:nth-child(n)、:nth-last-child(n)、:nth-of-type(n)、:nth-last-of-type(n)、:last-child

微信小程序文档没写支持, 但是实际支持的选择器有哪些?

目前支持的选择器有,在实践中我发现, 除了文档上说的几种选择器, 经过测试发现其实还有几种支持的选择器没有列举!还支持哪些选择器?

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!