CSS 选择器 | 青训营笔记

77 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的的第3天

今天总结一下CSS 常用的选择器,以优先级(权重)从小到大开始介绍

0 通配符选择器 *

  • 含义:可以选中页面中所有元素,对所有元素都生效
  • 用途:一般用于设置一些初始化的公共属性(像<body>标签或者<ul>标签有它自带的一些样式,比如内边距和外边距,就可以通过通配符选择器初始化)

1 标签(元素)选择器

  • 标签名作为选择器

10 class类选择器 .

  • 先在HTML标签上设置一个id的属性值class="XXX"
  • CSS格式为:.XXX{ }
  • XXX中不能包含有空格、XXX不能以数字开头

10 属性选择器[ ]

[target]选择带有target 属性的所有元素。
[target=_blank]选择带有 target="_blank" 属性值的所有元素。
[title~=flower]选择 title 属性包含单词 "flower" 的所有元素。
[lang|=en]选择 lang 属性值以 "en" 开头的所有元素。
  • ~=的包含,不是指属性值里面包含是属性里面包含这一整个完整的单词
  • |=xxx的开头,一定要在xxx后面跟-小横杠,或者整个属性值就是xxx,才能生效

10 伪类选择器 :

  • 伪类是指处于xxx状态时
  • 伪类选择器经常与标签名称一起使用,用于选中某一标签的伪类,特别是a标签(超链接)
  • 其他选择器后面跟伪类选择器的时候,不能有空格!

:link 未被访问时

:visited 已被访问时

:hover 鼠标悬停时

:active 链接被激活时

书写以上伪类时,一定要按照以上顺序从上到下写!

因为在某一时刻,元素很有可能处在多种状态下!

比如鼠标悬停时也是未被访问时

链接被激活时也是鼠标悬停时

所以遵从CSS的层叠特性(最后一次的定义生效),那就得按照顺序从上到下写!

记忆口诀:LoVe HAte 爱与恨

100 id选择器 #

  • 先在HTML标签上设置一个id的属性值id="xxx"

  • CSS格式为:#xxx{ }

  • xxx中不能包含有空格、xxx不能以数字开头;可以用大写字母,但必须保证选择器和id值同样都是大写

  • 一个HTML中如果多次给不同标签,赋值相同id,对应CSS样式虽然都会生效。但为了语法正确,最好一个网页中一个id命名只使用一次。

    id 是为某个元素 指定 DOM 操作时的"唯一"标示符

    它与页面如何渲染没有关系 渲染是否正确取决与文档结构与样式 (这里是浏览器默认样式表+你写的一条样式规则) 所以可以正常显示

    但是不唯一的标示符 会给DOM操作时带来麻烦 如果使用byID方可能只会获取到第一个ID指向的元素 因为它是唯一的 DOM只找到合适结果就返回了 如果是ID绑定到JS全局环境的浏览器 直接访问ID标示符可能返回所有同名ID的Element数组

    由于规范没有明确说重名后会怎么样 这导致浏览器在处理这种情况时 具体实现可能存在差异 特别是老旧版本的

▲派生选择器(后代、子元素、兄弟)

后代选择器 (空格)

  • 格式:父元素 子元素{ }

  • 父元素和子元素之间至少要有一个空格,可以有很多空格

  • 如果同样的子元素有多个,则全部生效

    比如<p>你好<span>小明</span><span>小红</span>

    那么p span{ color:blue; }会使得“小明”和“小红”都变蓝色

子元素选择器 >

  • 格式:父元素 > 子元素{ }
  • 与后代选择器的区别是,后代选择器可以越级;而子元素选择器只能在父元素的往下一级生效

越级:比如div h1 span相当于“...div...h1...span”,其中的...代表还可以嵌套其他标签

所以浏览器对于后代选择器的匹配规则是从右到左

先找span,再找上级有没有h1和div

浏览器的这种查找方法能提高性能。

后续兄弟选择器 ~

  • 格式:父元素 ~ 子元素{ }
  • 选取父元素之后的所有同级元素

相邻兄弟选择器 +

  • 格式:父元素 + 子元素{ }
  • 选取父元素之后的第一个同级元素

选择器权重

  • 通配符选择器 * 0

  • 标签、伪元素选择器 1

  • 类 class、属性[ ]、伪类: 选择器 10

  • id选择器 100

  • 内联样式(第一种引入方法) 1000

  • !important: 正无穷 【使用方法是放在样式值的后面(带个空格)

本文若有不足之处,欢迎纠正。😉