选择器

117 阅读7分钟

什么是选择器

选择器用来指定网页上我们想要样式化的html元素。是css规则的第一部分。它是元素和其他部分组合起来告诉浏览器哪个html元素应当是被选为应用规则中的css属性值的方式。选择器选择的元素,叫做‘选择器的对象’

选择器列表

如果你有多个使用相同样式的CSS选择器,那么这些单独的选择器可以被混编为一个选择器列表,这样,规则就可以应用到所有的单个选择器上了。 将多个选择器组合起来,在它们之间加上一个逗号,变为选择器列表。空格可以在逗号前或后,你可能还会发现如果每个选择器都另起一行,会更好读些。

选择器的种类

选择器可以分为两类:基础选择器和复合选择器

基础选择器

标签选择器
  • 作用:可以选出所有相同的标签,如p,使用较多
  • 缺点:不能差异化
  • 用法:p {color: red}
类选择器
  • 作用:可以选出一个或多个标签,使用非常多
  • 缺点:在获取DOM对象时,如果想要获取某个元素会很麻烦,不建议使用类选择器获取DOM元素。可以根据需求选择
  • 用法:.nav {color: red}
id选择器
  • 作用:一次只能选择一个标签,不推荐使用。
  • 缺点:只能使用一次
  • 用法:#eg {color: red}
通配符选择器
  • 作用:选择所有的标签,不推荐使用
  • 缺点:选择的太多,有部分不需要
  • 用法:* {color: red}

复合选择器

  • 目的是为了选择更准确更精细的目标元素标签
  • 复合选择器就是由两个或多个基础选择器,通过不同方式组合而成的。
后代选择器
  • 作用:用于选择元素后代,使用较多
  • 特征:选择所有的子孙后代
  • 用法:符号是空格 .nav p{color: #000;}
子代选择器
  • 作用:选择最近一级元素,使用较少
  • 特征:只选择亲儿子
  • 用法:符号是> .nav>p{color: #000;}
交集选择器
  • 作用:选择两个标签交集的部分,使用较少
  • 特征:既是...又是
  • 用法:没有符号 p.nav{color: #000;}
并集选择器(多元素选择器)
  • 作用:选择某些相同样式使用较多
  • 特征:可以用于集体的声明
  • 用法:符号是逗号 p,.nav{color:#000;}
毗邻元素选择器
  • 作用:匹配所有紧随当前元素之后的同级元素
  • 特征:筛选同级元素
  • 用法:符号是+ p+.nav{color:#000;}
同级元素通用选择器(CSS3新增)
  • 作用:匹配任何在当前元素之后的同级元素
  • 特征:筛选之后的同级元素
  • 用法:符号是~ p~.nav{color:#000;}
属性选择器
  • 作用:匹配所有属性满足的当前元素
  • 特征:筛选属性相同的元素
  • 用法:符号是[] p[attr]

属性选择器具体划分有以下几种:

选择器含义
p[att]匹配所有具有att属性的p元素,不考虑它的属性值
p[att=val]匹配所有att属性等于'val'的p元素
p[att~=val]匹配所有att属性具有多个空格分隔的值、其中一个值等于'val'的p元素
p[att|=val]匹配所有att属性具有多个连字符分隔的值,其中一个值以'val'开头的p元素

以下几个是css3新增的

选择器含义
p[att^='val']匹配所有att属性以'val'开头的p元素
p[att$=val]匹配所有att属性以'val'结尾的p元素
p[att*=val]匹配所有att属性包含'val'的p元素
链接伪类选择器
  • 作用:给链接更改状态,使用较多
  • 用法:重点记住a{}和a:hover{}等

以下是css2.1中的伪类选择器

选择器含义
p:first-child匹配p元素的第一个子元素
p:link匹配所有未被点击的链接,主要用于a元素
p:visited匹配所有已经被点击的链接,主要用于a元素
p:active匹配所有鼠标已经按下但还没有释放的p素
p:hover匹配所有鼠标停在上面的p元素
p:focus匹配所有鼠标光标焦点在上面的p元素
p:lang(c)匹配所有lang属性c的p元素

以下是css2.1中的伪元素

选择器含义
p:first-line匹配p元素的第一行
p:first-letter匹配p元素的第一个字母
p:before在p元素之前插入生成的内容
p:after在p元素之后插入生成的内容

以下是css3中与用户界面有关的伪类

选择器含义
p:enabled匹配表单中被激活的元素
p:disabled匹配表单中禁用的元素
p:checked匹配表单中被选中的元素,一般是radio或checkbox元素
p::selection匹配用户当前选中的元素

以下是CSS3中的结构性伪类

选择器含义
p:root匹配文档的根元素,在html中,就是html元素
p:nth-child(n)匹配其父元素的第n个子元素,第一个子编号为1
p:nth-last-child(n)匹配其父元素的倒数第n个子元素,第一个子编号为1
p:nth-of-type(n)和p:nth-child(n)类似,只是匹配的是相同标签的元素
p:nth-last-type(n)和nth-last-child(n)类似,只是匹配的是相同标签的元素
p:last-child匹配其父元素的最后一个子元素,等同于p:nth-last-child(1)
p:first-of-type匹配其父元素下使用同一种标签的第一个元素,等同于p:nth-of-type(1)
p:last-of-type匹配其父元素下使用同一种标签的最后一个元素,等同于p:nth-last-type(1)
p:only-child匹配其父元素下仅有的一个元素
p:only-of-type匹配其父元素下使用同一种标签的唯一的一个元素
p:empty匹配一个不包含子元素的元素,需要特别注意的是文本元素也是一个元素

以下是css3中的反选伪类

选择器含义
p:not(s)匹配不符合当前选择器的任何元素

以下是css3中的target伪类

选择器含义
p:target匹配文档中特定'id'点击后的效果

选择器的特性

css选择器具有三大特性

  1. 层叠性
  2. 继承性
  3. 优先级 下面我们具体介绍一下这三种特性。

层叠性

层叠性的意思就是可以一层层往相同元素相同属性上添加不同样式。主要有以下几种表现

  • 相同选择器相同属性设置相同样式,一个样式会覆盖另一个样式,具体是怎样覆盖的,得结合就近原则和优先级优先级来看
  • 样式冲突遵循的是就近原则
  • 样式不冲突则不会重叠

继承性

继承性很好理解,就是子元素可以继承父元素的样式,一般关于文本的样式都可以继承。如:text-, font-, line-这些开头的属性和color属性。

优先级

优先级顾名思义,相同元素相同属性,选择器优先级越高,当前样式就会生效,其他优先级低的样式就会被覆盖掉。主要有以下几个方面

  • 当一个元素指定多个选择器时,则有优先级的产生
  • 当选择器相同则执行层叠性
  • 当选择器不同,则根据选择器权重执行
  • 具体选择器权重如下:
    • 继承或者*(通配符选择器): 0
    • 元素选择器: 1
    • 类选择器,伪类选择器:10
    • id选择器: 100
    • 行内样式style="": 1000
    • !import: 无穷大
  • 权重由四组数字组成,但是不会进位
  • 值从左到右,左边最大,一级大于一级,级别之间不可超越
  • 复合选择器的权重会叠加但不会进位