简述历代CSS选择器及其优先级

  CSS 中最重要的两部分,一部分是 CSS 选择器,另一部分是 CSS 属性,本文将重点描述 CSS 选择器。CSS 的工作流程本质上就是利用选择器选择到 HTML 中的元素,然后赋予他们样式规则,让每一个元素都变成我们想要的样子,都出现在我们想让它去的位置。

  CSS到目前位置已经扩充到第三版了,每扩充一版,它的选择器和属性都会有很多的扩展,这里,我将把三个版本的选择器一一进行诠释。

CSS1选择器

选择器

类型

说明

tagname

标签选择器

选择指定标签的元素

#id

ID选择器

通过ID获取元素

.class

类名选择器

通过类名获取元素

ele desc

后代选择器

获取包含在ele中 的desc元素,ele和desc均是选择器

ele:link

伪类选择器

超链接未被访问的样式

ele:visited

伪类选择器

超链接已被访问的样式

ele:hover

伪类选择器

鼠标经过的样式

ele:active

伪类选择器

超链接被点击时的样式

ele:focus

伪类选择器

元素获取焦点后的样式

ele:first-line

伪元素选择器

元素内的第一行文本

ele:first-letter

伪元素选择器

元素内的第一个字符

CSS2 选择器

选择器

类型

说明

*

通用选择器

选择文档中所有的元素

ele[attr]

属性选择器

选取定义了attr属性的ele元素

ele[attr=“val”]

属性选择器

选取定义了attr属性且值为“val”的ele元素

ele[attr~=“val”]

属性选择器

选取定义了attr属性且值中含有“val”单词的ele元素

ele[attr|=“val”]

属性选择器

选取定义了attr属性且值以“-”分割,“val”开头的ele元素

ele:before

伪元素选择器

在ele元素前面插入内容

ele:after

伪元素选择器

在ele元素后面插入内容

ele > desc

后代选择器

获取desc元素,且是ele元素的子元素

ele + b

相邻兄弟元素选择器

选取与ele元素相邻的b元素

CSS3 选择器

选择器

类型

说明

ele[attr^=“val”]

属性选择器

选取ele元素,且它含有attr属性并以val开头

ele[attr$=“val”]

属性选择器

选取ele元素,且它含有attr属性并以val结尾

ele[attr*=“val”]

属性选择器

选取ele元素,且它含有attr属性并在其中包含val

ele:first-child

结构伪类选择器

选取ele元素,且是父元素的第一个子元素

ele:last-child

结构伪类选择器

选取ele元素,且是父元素的最后一个子元素

ele:nth-child(n)

结构伪类选择器

选取ele元素,且是父元素的第n个子元素

ele:nth-of-type (n)

结构伪类选择器

选取ele元素,且是父元素中第n个ele元素

ele:nth-last-child(n)

结构伪类选择器

选取ele元素,且是父元素的倒数第n个子元素

ele:nth-last-of-type(n)

结构伪类选择器

选取ele元素,且是父元素的倒数第n个ele元素

ele:first-of-type(n)

结构伪类选择器

选取ele元素,且是父元素的第1个ele元素

ele:last-of-type(n)

结构伪类选择器

选取ele元素,且是父元素的最后一个ele元素

ele:only-child

结构伪类选择器

选取ele元素,且是父元素中的唯一元素

ele:only-of-type

结构伪类选择器

选取ele元素,且是父元素中的唯一 的ele元素

ele:empty

结构伪类选择器

选取ele元素,且不含子节点

ele:root

结构伪类选择器

选取html根元素

:enabled

伪类选择器

选择每个启用的input元素

:disable

伪类选择器

选择每个禁用的input元素

:checked

伪类选择器

选择每个选中的input元素

:not(selector)

伪类选择器

去除所有与给定选择器匹配的元素

::selection

伪类选择器

选中文本的样式

      以上就是目前CSS规范中绝大部分属性,一般而言,这些选择器在复杂度比较高的页面中也足够用了,但是,由于选择器众多,可以用各种办法选择到同一个元素,即CSS叠加性,再加上CSS某些属性给父元素设置可以被子元素继承,即CSS继承性。由于这两个特性,所以选择器有了优先级的概念。

      至于判断某个选择器优先级的方法,我们可以给出 a/b/c/d/e/f/g 七个等级,每一个等级都比下一个等级的优先级高。

      a 等级是行内样式,拥有行内样式,则a为1,否则a为0,换句话说,行内样式是优先级最高的,任何选择器都不会覆盖更改行内样式的优先级。

      b 等级是id选择器的数量,选择器中含有一个id,则b等级数值加1。

      c 等级是类名选择器、伪类选择器、属性选择器的数量,每包含一个,则c加1。

      d 等级是标签名选择器、伪元素的数量,每包含一个,则d加1。

  e 等级是通用选择器

  f 等级浏览器默认的样式

  g 等级是继承的样式

      优先级顺序中a>b>c>d>e>f>g。

  PS:本文中无论是选择器还是优先级,所述都不够全面,仅供参考。

posted @ 2017-04-08 01:01  蓝度飞  阅读(401)  评论(0编辑  收藏  举报