😄
前端学习
  • 👋Welcome
  • 📖前端基础
    • HTML
      • 基础知识
      • 进阶知识
      • HTML5
    • CSS
      • 基础知识
      • 进阶知识
      • CSS 专题
        • CSS 选择器
        • CSS 布局
        • CSS 动画
        • CSS 画图
        • 响应式方案
        • CSS BEM 规范
        • CSS 案例
    • JavaScript
      • 基础知识
      • 进阶知识
      • 常用内置对象
        • Array 对象
        • String 对象
        • Number 对象
        • Boolean 对象
        • Math 对象
        • Date 对象
        • RegExp 对象
        • Object 对象
      • JS 专题
        • 数据类型
        • 原型链/继承
        • 对象赋值与拷贝
        • this 的指向
        • 异步操作
        • 模块化
        • 设计模式
    • 浏览器
      • 浏览器模型
      • 事件
      • 位置属性
      • Web 缓存
      • 本地存储
    • 综合内容
      • 前端跨域
      • 登录鉴权
      • 文件上传与下载
  • 🏗️前端框架
    • Vue.js
      • 基础知识
      • Vue 组件通信
      • Vuex 使用指南
      • Vue 动画
      • 静态网站框架 VuePress
    • React.js
      • 基础知识
      • 组件通信
  • 📦计算机基础/后端
    • 图解计算机网络
    • HTTP/HTTPS
    • TCP/UDP
    • Node.js
    • MongoDB
  • 🛠️开发工具
    • 版本控制工具-Git
      • git submodule
    • 构建工具-Webpack
    • 错误监控工具-Sentry
    • 单元测试工具-Jest
    • 包管理工具-NPM
    • 代码编辑器-VSCode
  • 🤔专题内容
    • 前端工程化
    • 代码规范
      • JavaScript 代码规范
      • CSS 代码规范
      • Vue 代码规范
      • Git Commit 规范
      • 代码规范配置
    • 网络安全与防御
    • 性能优化
    • 算法编程
    • 数据可视化
  • 🧑‍💻 面试相关
    • 面试知识总结
    • 面试问题总结
    • 面试常见编程
    • 面试资源汇总
  • 🍭其他
    • 项目经验❗️
    • 踩坑指南❗️
      • JavaScript 踩坑指南
      • CSS 踩坑指南
      • Vue 踩坑指南
    • 学习资源
    • 综合收藏夹
由 GitBook 提供支持
在本页
  • 1. 简单选择器
  • 2. 属性选择器
  • 3. 伪类
  • 4. 伪元素
  • 5. 组合器

这有帮助吗?

  1. 前端基础
  2. CSS
  3. CSS 专题

CSS 选择器

上一页CSS 专题下一页CSS 布局

最后更新于3年前

这有帮助吗?

本文内容所涉及的 CSS 选择器包含 CSS3 新增选择器部分,不作额外区分,部分选择器效果详见。

  • :通过元素类型、class 或 id 匹配一个或多个元素 + 通配符*

  • :通过属性或属性值匹配一个或多个元素

  • :匹配处于确定状态的一个或多个元素

  • :匹配处于相关的确定位置的一个或多个元素

  • :以有效的方式组合两个或更多的选择器用于非常特定的选择

1. 简单选择器

标签选择器、ID 选择器、class 选择器等

p {
  color: red;
}
.first {
  font-weight: bold;
}
#polite {
  font-family: cursive;
}
* {
  padding: 5px;
}

2. 属性选择器

存在和值(Presence and value)属性选择器:

  • [attr]:该选择器选择包含 attr 属性的所有元素,不论 attr 的值为何

  • [attr=val]:该选择器仅选择 attr 属性被赋值为 val 的所有元素

  • [attr~=val]:该选择器仅选择具有 attr 属性的元素,而且要求 val 值是 attr 值包含的被空格分隔的取值列表里中的一个

= 表示 val 严格等于,~= 表示 val 值包含即可

子串值(Substring value)属性选择器(类似正则表达)

  • [attr|=val] : 选择attr属性的值是 val 或值以 val- 开头的元素

  • [attr^=val] : 选择attr属性的值以 val 开头(包括 val)的元素

  • [attr$=val] : 选择attr属性的值以 val 结尾(包括 val)的元素

  • [attr*=val] : 选择attr属性的值中包含子字符串 val 的元素

/* 给date-pref属性包含same的li标签添加背景颜色 */
li[data-perf*="same"] {
   background-color: rgba(0,0,255,0.5);
}

3. 伪类

伪类不是选择元素,而是仅在某些特定上下文中存在的元素。

伪类 pseudo-class 是一个以冒号(:)作为前缀,被添加到一个选择器末尾的关键字,当你希望样式在特定状态下才被呈现到指定的元素时,你可以往元素的选择器后面加上对应的伪类。

  • :link 超链接点击之前

  • :visited 链接被访问过之后

  • :hover “悬停”,鼠标放到标签上的时候

  • :active “激活”, 鼠标点击标签,但是不松手时

  • :focus 是某个标签获得焦点时的样式(比如某个输入框获得焦点)

超链接的书写顺序:a:link 、a:visited 、a:hover 、a:active。

记忆小TIP:“爱恨准则”:love hate,先爱后恨。

  • E:first-child 匹配父元素的第一个子元素E。

  • E:last-child 匹配父元素的最后一个子元素E。

  • E:nth-child(n) 匹配父元素的第n个子元素E。

  • E:nth-child(odd) 匹配奇数

  • E:nth-child(even) 匹配偶数

  • E:nth-last-child(n) 匹配父元素的倒数第n个子元素E。

注意,E:nth-child()中元素的编号是从1开始算起,不是从0开始算起,但2n/-n+5这些的n指代了0。

  • 如果选择器写成li:nth-child(2),则表示第2个li

  • 如果选择器写成li:nth-child(n),则表示所有的li

  • 如果选择器写成li:nth-child(2n),则表示所有的第偶数个li

  • 如果选择器写成li:nth-child(2n+1),则表示所有的第奇数个li

  • 如果选择器写成li:nth-child(-n+5),则表示前5个li

  • 如果选择器写成li:nth-last-child(-n+5),则表示最后5个li

  • 如果选择器写成li:nth-child(7n),则表示选中7的倍数

  • E:first-of-type 匹配同类型中的第一个同级兄弟元素E

  • E:last-of-type 匹配同类型中的最后一个同级兄弟元素E

  • E:nth-of-type(n) 匹配同类型中的第n个同级兄弟元素E

  • E:nth-last-of-type(n) 匹配同类型中的倒数第n个同级兄弟元素E

  • E:empty 匹配没有任何子节点(包括空格等text节点)的元素E

  • E:target 匹配相关URL指向的E元素。要配合锚点使用

区别:nth-child()与:nth-of-type(),其中:nth-of-type()的计数是同类型的元素,而:nth-child()计数不需要看元素类型。

4. 伪元素

伪元素不是选择元素,而是元素的某些部分。

伪元素(Pseudo-element)前缀是两个冒号 (::) , 同样是添加到选择器后面去选择某个元素的某个部分。

  • E::before 设置在 元素E 前面(依据对象树结构)的内容,常配合 content 属性使用

  • E::after 设置在 元素E 后面(依据对象树结构)的内容,常配合content属性使用

  • E::first-letter 设置元素 E 里面的第一个字符的样式

  • E::first-line 设置元素 E 里面的第一行的样式

  • E::selection 设置元素 E 里面被鼠标选中的区域的样式(一般设置颜色和背景色)

5. 组合器

/* 所有table里的tfoot里的th */
table tfoot th {}
/* 在table当中,所有的th之后的td */
table th + td {}
/* 所有table里的tbody里的所有td(第一个除外),每个td都是由它上边的td选择 */
table tbody td + td {}

完整 CSS 伪类详见

如果你对内容有任何疑问,欢迎提交 或

📖
W3school - CSS 选择器参考手册
❕issues
✉️ email
「CSS 选择器示例」
简单选择器
属性选择器
伪类
伪元素
组合器