CSS 知识点:选择器

338 阅读2分钟

CSS 选择器规定了 CSS 规则可以应用在哪些元素上。

CSS 选择器分类

选择器从大的分类上可以划分为以下几种:基本选择器、分组选择器、组合器、伪选择器。

基本选择器

  • 通用选择器:*, selector *,用于匹配所有元素或者 selector 选择器下的所有元素
  • 元素选择器:elementname, 按标签名匹配所有符合条件的元素
  • 类选择器:.classname, 根据 class 属性匹配所有符合条件的元素,class 可以有多个值,不同值之间用空格分隔
  • ID 选择器:#idname, 根据 id 属性匹配所有符合条件的元素
  • 属性选择器:[attr], [attr=value], [attr~=value], [attr|=value], [attr^=value], [attr$=value], [attr*=value],例如:[type="text"]用于选择所有拥有 type="text" 属性的 input 元素

属性选择器规则释义

^ 字符串开始位置匹配

$ 字符串结束位置匹配

* 字符串任意位置匹配

i 字符串匹配不区分大小写

g 字符串全局匹配

[attr~=value] attr 的值需要包含单词 value,注意是单词,而不是字符串里有这个字符

[attr|=value] 开头必须是 value 的单词

分组选择器

指用 , 分隔形成的选择器列表,只要满足列表中任一条件即可被匹配到,例如:

.title,
.meta-item,
.author-name {
  color: #333;
}

组合器

指将多个选择器组合在一起使用,从而缩小匹配的范围。

  • 后代选择器: 例如 .main .article
  • 直接子代选择器: 例如 ul > li
  • 一般兄弟选择器: 例如 .prev ~ .next, 匹配同一个父级下,.prev 后的所有 .next 元素
  • 紧邻兄弟选择器: 例如 h2 + p, 匹配所有紧邻在 h2 后的 p 元素
  • 列组合器: 用于表格,例如 col || td 会匹配所有 col 作用域内的 td 元素

伪选择器

分为伪类选择器和伪元素选择器。

  • 伪类选择器:根据元素的状态信息选择元素,例如 a:hover 用于匹配 a 元素的鼠标滑过状态
  • 伪元素选择器:用于表示 HTML 语义无法表达的元素,例如:p:first-letter 用于匹配所有 p 元素的首个字符

CSS 选择器权重

一般来说,选择器越特殊优先级就越高,指向就越精确,通常会这样划分:

  • 1 表示元素选择器的优先级
  • 10 表示类选择器的优先级
  • 100 表示 ID 选择器的优先级

那么计算优先级时就可以按照如下方法计算:

.main h2               优先级:10 + 1 = 11
.main article .title   优先级:10 + 1 + 10 = 21
#hot-news .title       优先级:100 + 10 = 110

CSS 选择器使用注意事项

  • 避免选择器名称过于通用,匹配过多的元素
  • 避免嵌套过深
  • 采取防冲突措施,例如使用 BEM 方式命名、使用 CSS modules
  • ID 选择器前不要再加其它选择器限制,因为它本身已经唯一了
  • 尽量避免使用 !important