重学前端笔记22-css 选择器机制

251 阅读2分钟

css 选择器机制

选择器的组合

在 css 规则中,选择器部分就是一个选择器列表。 1. 选择器列表是由逗号分隔的复杂选择器序列 2. 复杂选择器是由空格、大于号、波浪线等符号连接的复合选择器。 3. 复合选择器则是连写的简单选择器组合。

不同连接方式的优先级

  1. 第一优先级
    • 无连接符号
  2. 第二优先级
    • "空格"
    • "~"
    • ">"
    • "+"
    • "||"
  3. 第三优先级
    • ","

复杂选择器的连接符号

  • 空格: 后代
  • > 字典
  • ~ 后继节点,和当前节点具有同一个父元素,并出现在它之后。
  • + 直接后继节点
  • || 列选择器,表示选中对应列中符合条件的单元格。

空格和子代选择器使用场景

常用于组件化的场景,当组件是独立开发时,给组件的最外层容器元素设置一个特别的 class 命名,生成 css 规则则全部使用后代或者子代选择器,可以有效避免 css 规则的命名污染问题。

逗号 使用场景

表示“或”的关系,在有两条内容一样的 css 规则时使用,以简化代码。

选择器的优先级

css 规则用一个三元组 (a,b,c) 来构成一个复杂选择器的优先级

  • id 选择器的数目为 a
  • 伪类和 class 选择器的数目为 b
  • 伪元素和标签选择器数目为 c
  • *不影响优先级

计算优先级

base是一个足够大的正整数 t

specificity = base * base * a + base * b + c

优先级规则

  1. 行内属性优先级永远高于 css 规则
  2. !important相当于一个新的优先级,且高于行内属性
  3. 同一优先级遵循“后面覆盖前面”的原则。

使用建议

  1. 建议“根据 id 选单个元素”
  2. "class 和 class 的组合选 成组元素"
  3. “tag 元素确定页面风格”
  4. 不要搞出过于复杂的选择器

伪元素

兼容性达到可用的伪元素

  • ::first-line表示元素的第一行
  • ::first-letter 第一个字母
  • ::before
  • ::after

::first-line::first-letter

  • ::first-line必须出现在最内层的块级元素内。
  • ::first-letter位置在所有标签之内

CSS 标准要求上述两个伪元素实现的 css 属性

::before::after

这两个元素是真正的无中生有,造出一个元素。,必须制定content属性才能生效。还能够支持contentcounter.

  • ::before 表示在元素内容之前插入一个虚拟的元素
  • ::after表示 在元素内容之后插入一个虚拟元素

支持的 css 属性

::before::after中支持所有的 css 属性。

用途

可以用作装饰性的元素,使用纯粹的 css 代码添加进去