CSS选择器

一、CSS选择器优先级

!important > 内联【1000】 > id 【100】> class/属性选择器/伪类选择器 【10】> tagName / 伪装元素【1】通配符:0>继承

二、选择器种类

  • * 通配符

  • id选择器

  • class选择器

  • 标签选择器

  • 组合:

    • 后代选择器: ol li{}
    • 子选择器: div > p {}
    • 并集选择器: ul,div {}
    • 相邻选择器: h1 + p{}
  • 属性选择器

    • *[att],选择所有具有att属性的元素
    • E[att] ,选择所有具有att属性的E元素
    • E[att=“value”],选择所有具有att属性,且att属性的值为value的E元素
    • E[att~=“value”],选择所有具有att属性,且att属性的其中一个值为value的E元素
    • a[href][title] 所用具有href 和title的a标签
  • 伪类选择器:是实际DOM元素的某种状态

    • 状态伪类: link、visited、hover、active
    • 结构伪类:
      p:first-child: p元素且是父元素的第一个子元素,如果第一个不是p元素就没有效果【同理last-child最后一个p】
      p:first-of-type: 第一个类型为p的字元素,不一定父元素的第一个元素【同理p:nth-of-type(n)表示n个p类型元素】
      p:nth-child(n): 父元素中第n个元素,且是p元素【同理p:nth-last-child(2n+1)表示倒数第n个】
      p:only-child:没有任何兄弟元素
      p:only-of-type:没有任何同类型的兄弟元素
      :empty: 空元素
      p:not(.irrelevant) : 不满足指定条件
      root: 根元素
    • 表单伪类:
      :invalid:valid 表单输入内容是否有效
      :required:optional 表单项是否必填
      :in-range:out-of-range 表单项是否超出范围
      :read-only:read-write 表单项是否只读
      :enabled:disabled 表单项是否禁用

    在这里插入图片描述

  • 伪元素:附加在选择器上关键字,不属于DOM树上真正的元素,只是元素特定部分的内容

    • ::first-line:只作用于块级元素
    • ::first-letter只作用于块级元素
    • ::before:元素内容之前插入一些内容
    • ::after:元素内容之后插入一些内容
    • ::selection:用户所选定的元素部分

选择器的性能

CSS选择器匹配的机制:从右到左进行规则匹配

例如:

  1. #header > a,先匹配所有的 a 元素,再确定其父元素的 id 是否为 header
  2. #header a 先匹配所有的 a 元素, 再向其上级遍历直到根节点找是否有 id 是否为 header

所以称最右边选择符称之为关键选择器

如何减少 CSS 选择器性能损耗
选择器效率排序
id > 类 > 标签 > 相邻选择器(h1+p) > 子选择器(ul > li) > 后代选择器(li a) > 通配符选择器(*) > 属性选择器(a[rel=“external”]) >伪类选择器(a:hover, li:nth-child)

  1. 关键选择器避免使用通配符
  2. 避免使用低效选择器修饰效选择器 :用标签/类限制ID选择器: button#backButton,标签限制类: treecell.indented {…}
  3. 尽量少使用子选择器
  4. 嵌套越短越好
  5. 尽量利用继承选属性

关于!important

MDN指出“使用 !important 是一个坏习惯,应该尽量避免”,并给出了使用!important 的情况:

一定要优先考虑使用样式规则的优先级来解决问题而不是 !important
只有在需要覆盖全站或外部 CSS 的特定页面中使用 !important
永远不要在你的插件中使用 !important
永远不要在全站范围的 CSS 代码中使用 !important

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值