一.选择器语法及其意义(pattern and meaning)

Pattern

Meaning

CSS level

E

an element of type E

标记选择器,匹配所有标签名为E的元素

1

E:link
E:visited

an E element being the source anchor of a hyperlink
of which the target is not yet visited (:link) or already visited (:visited)

伪类,匹配未访问链接与已访问链接

1

E::first-line

the first formatted line of an E element

首行伪元素,匹配元素E的第一行内容

需要注意的是:第一行的长度取决于容器的大小和字体大小等等,并不是匹配第一个句号;除此之外,first-line伪元素会受到before/after伪元素的影响

P.S.IE6不支持(单冒号也不支持)

1

E::first-letter

the first formatted letter of an E element

首字母伪元素,匹配元素E的第一个字母

需要注意的是:同上

P.S.IE6不支持(单冒号也不支持)

1

E.warning

an E element whose class is "warning" (the
document language specifies how class is determined).

类选择器,匹配class属性是warning的E元素

P.S.类选择器.attr等价于*.attr,所以列表中没有.attr

1

E#myid

an E element with ID equal to "myid".

ID选择器,匹配id属性是myid的E元素

P.S.类选择器#myid等价于*#myid,所以列表中没有#myid

1

E F

an F element descendant of an E element

后代选择器,匹配被E元素包裹着的F元素

1

E:active
E:hover
E:focus

an E element during certain user actions

伪类,分别匹配处于激活状态,鼠标悬停状态,持有焦点状态的E元素

P.S.注意LVHA爱恨原则,a标签的激活状态就是鼠标按下不抬起

1 and 2

*

any element

通配选择器,匹配所有元素

2

E[foo]

an E element with a "foo" attribute

属性选择器,匹配声明了属性名为foo的E元素

2

E[foo="bar"]

an E element whose "foo" attribute value is
exactly equal to "bar"

属性选择器,匹配声明了属性名为foo且值为bar的E元素

2

E[foo~="bar"]

an E element whose "foo" attribute value is
a list of whitespace-separated values, one of which is exactly equal to
"bar"

属性选择器,匹配声明了属性名为foo且值列表中包含bar的E元素

P.S.例如foo=”value1 bar value2”

2

E[foo|="en"]

an E element whose "foo" attribute has a
hyphen-separated list of values beginning (from the left) with "en"

属性选择器,匹配声明了属性名为foo且值为以独立en开头的E元素(连字符隔开的)

P.S.需要注意的是如果存在E1foo=”en”,E2foo=”en-x”,E3foo=”en_xx”,E4foo=”enxxx”,那么匹配结果是E1和E2,与^=选择器不同

2

E:first-child

an E element, first child of its parent

结构化伪类,匹配E的父元素的第一个孩子

P.S.先数,再筛类型

2

E:lang(fr)

an element of type E in language "fr" (the
document language specifies how language is determined)

伪类,表示语言是法语(body的lang属性值为fr)匹配body内的所有元素(继承)

P.S.用于为不同的语言环境指定样式,比如某些国家的引号并不是”

2

E::before

generated content before an E element

伪元素,在E标签前面添加内容(只能添加文本,不能添加标记)

P.S.IE6不支持

2

E::after

generated content after an E element

伪元素,在E标签后面添加内容(只能添加文本,不能添加标记)

P.S.IE6不支持

2

E > F

an F element child of an E element

子选择器,匹配作为E的直接孩子的F元素(不包括孙子)

P.S.IE6不支持

2

E + F

an F element immediately preceded by an E element

相邻兄弟选择器,匹配紧跟在E后面的F元素

2

E[foo^="bar"]

an E element whose "foo" attribute value
begins exactly with the string "bar"

子串匹配属性选择器,匹配声明了属性名为foo且值以bar开头的E元素

3

E[foo$="bar"]

an E element whose "foo" attribute value
ends exactly with the string "bar"

子串匹配属性选择器,匹配声明了属性名为foo且值以bar结尾的E元素

3

E[foo*="bar"]

an E element whose "foo" attribute value
contains the substring "bar"

子串匹配属性选择器,匹配声明了属性名为foo且值包含bar的E元素

3

E:root

an E element, root of the document

结构化伪类,匹配根元素(一般是html标签)

P.S.IE6不支持

3

E:nth-child(n)

an E element, the n-th child of its parent

结构化伪类,匹配E的父元素的第n个孩子且要求该孩子类型为E,如果不是则匹配失败(n的值是从1开始,2n和2n+1分别表示第偶数个和第奇数个,等价于even和odd,n表示所有孩子,-n + 2表示前两个孩子)

P.S.IE6不支持,先数,再筛类型

3

E:nth-last-child(n)

an E element, the n-th child of its parent, counting
from the last one

结构化伪类,匹配E的父元素的倒数第n个孩子且要求该孩子类型为E,如果不是则匹配失败,n的取值同上

P.S.IE6不支持,先数,再筛类型

3

E:nth-of-type(n)

an E element, the n-th sibling of its type

结构化伪类,匹配E的父元素的第n个E类型的孩子

P.S.IE6不支持,先筛类型,再数

3

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

an E element, the n-th sibling of its type, counting
from the last one

结构化伪类,匹配E的父元素的倒数第n个E类型的孩子(同上)

P.S.IE6不支持,先筛类型,再数

3

E:last-child

an E element, last child of its parent

结构化伪类,匹配E的父元素的最后一个孩子

P.S.IE6不支持,先数,再筛类型

3

E:first-of-type

an E element, first sibling of its type

结构化伪类,匹配E的父元素的第一个E类型的孩子

P.S.IE6不支持,先筛类型,再数

3

E:last-of-type

an E element, last sibling of its type

结构化伪类,匹配E的父元素的最后一个E类型的孩子

P.S.IE6不支持,先筛类型,再数

3

E:only-child

an E element, only child of its parent

结构化伪类,匹配E的父元素的惟一一个孩子且要求该孩子类型为E

P.S.IE6不支持,先数(确定“独生子女”),再筛类型

3

E:only-of-type

an E element, only sibling of its type

结构化伪类,匹配E的父元素的惟一一个E类型的孩子

P.S.IE6不支持,先筛类型,再数(确定“独生子女”)

3

E:empty

an E element that has no children (including text
nodes)

结构化伪类,匹配E类型的空元素(没有任何孩子,包括文本节点)

P.S.IE6不支持

3

E:target

an E element being the target of the referring URI

伪类,表示页内跳转目标位置

P.S.IE6不支持

3

E:enabled
E:disabled

a user interface element E which is enabled or
disabled

UI元素状态伪类,匹配处于有效状态和失效状态的E元素

P.S.IE6不支持

3

E:checked

a user interface element E which is checked (for
instance a radio-button or checkbox)

伪类,匹配处于选中状态的radio和checkbox(可自定义的样式很少)

P.S.IE6不支持

3

E:not(s)

an E element that does not match simple selector s

取反伪类,匹配对s选择器匹配结果的补集中的E元素,例如span:not(:empty)匹配所有非空的span

P.S.IE6不支持,不能嵌套使用,而且参数s不能指定类型,默认与E的类型相同,也就是说span:not(span:empty)是不合法的

3

E ~ F

an F element preceded by an E element

一般相邻选择器,匹配跟在E后面的所有F元素

3

二.选择器语法的大小写敏感性(case-sensitivity)

选择器语法不是大小写敏感的(case-insensitive),a:hover等价于a:HOVER,但标签名和属性名以及属性值是大小写敏感的(取决于HTML,必须保持一致)

三.选择器的分类

  1. type selector——类型选择器(标记选择器)
  2. universal selector——通配选择器
  3. attribute selector——属性选择器
  4. class selector——类选择器
  5. ID selector——ID选择器
  6. pseudo-class——伪类

四.pseudo-class伪类与pseudo-element伪元素的区别

  • 形式上,伪类有一个冒号,而伪元素有两个冒号
  • 意义上,伪类相当于给现有元素添加了class属性值,而伪元素相当于创建了一个新的元素(p:first-child匹配p的第一个子元素,相当给第一个子元素设置了匿名class;p::first-line匹配段落第一行内容,相当于创建了一个span)

特别的,伪类要遵循LVHA爱恨原则;before, after不是伪类而是伪元素(最容易混淆,原因是浏览器兼容问题——某些浏览器不支持双冒号)

五.选择器特殊性(specificity)的计算

特殊性高的样式会覆盖特殊性低的样式,比如:#cnblogs_post_body > p{/*style1*/}和p{/*style2*/}共存时,表现出来的是特殊性更高的style1,特殊性的计算规则如下:

a = ID选择器的个数

b = (类选择器 + 属性选择器 + 伪类)的个数

c = (标记选择器 + 伪元素)的个数

P.S.1.忽略通配选择器

P.S.2.取反选择器不算数(取反选择器本身不计入伪类的个数,但左右的都算),例如#s12:not(FOO) /* a=1 b=0 c=1 -> specificity = 101 */

P.S.3.重复出现相同的简单选择器都算有效计数

参考资料:

官方文档:http://www.w3.org/TR/css3-selectors/

CSS选择器分类总结的更多相关文章

  1. css选择器分类

    css选择器大致可以分为10大类: 1.元素选择器 如:p{} 2.类选择器 如:.xx{} 3.ID选择器 如:#xx{} 4.关联选择器 如:p a{} 5.子元素选择器 如:p>a{} 6 ...

  2. css选择器分类与作用

    本文旨在总结css中各种选择器及其相应用途(持续更新) 通配符(全局)选择器 样式:*{} 示例: 总结:选定文档中所有类型的对象,如图所示写在css样式文件开头用来定义全局通用的一些属性.font- ...

  3. CSS选择器分类整理

    读完<CSS权威指南>,对选择器有如下整理: selector 本质上是执行元素样式匹配规则,我们可以利用它来限定某些元素 选择器类型: <!-- 实体,即HTML中存在 --> ...

  4. CSS选择器操作大全

    一,CSS选择器分类 二,选择器语法 1,基本选择器语法 选择器 类型 功能描述 *  通配选择器  选择文档中所以HTML元素 E  元素选择器 选择指定类型的HTML元素 #id  ID选择器 选 ...

  5. CSS选择器有哪些?选择器的优先级如何排序?

    CSS选择器分类: CSS的选择器分类可以分为三大类:id选择器,类选择器,标签选择器. 用法如下: 选择器   e.g. 说明 id选择器 #id #header 选择id="header ...

  6. css选择器的分类及优先级计算方法总结

    首先声明一下CSS三大特性—— 继承. 优先级和层叠.继承即子类元素继承父类的样式;优先级是指不同类别样式的权重比较;层叠是说当数量相同时,通过层叠(后者覆盖前者)的样式. css选择符分类 首先来看 ...

  7. css选择器的使用详解

    -.css选择器的分类: 二.常用选择器详解: 1.标签选择器: 语法: 标签名 { 属性:属性值; } 代码示例: h1 { color: #ccc; font-size: 28px; } 2.类选 ...

  8. CSS选择器优先级总结

    CSS三大特性-- 继承. 优先级和层叠. 继承:即子类元素继承父类的样式; 优先级:是指不同类别样式的权重比较; 层叠:是说当数量相同时,通过层叠(后者覆盖前者)的样式. css选择符分类 首先来看 ...

  9. CSS和CSS选择器

    一:CSS CSS有三种书写形式(优先级从高到低) 1)行内样式:(内联样式)直接在标签style属性中书写 2)内页样式:在本网页的style标签中书写 3)外部样式:在单独的CSS文件中书写,然后 ...

随机推荐

  1. 网络基础相关的知识 socket模块

    1.架构 1.C/S架构:client客户端和server服务器端 优势:能充分发挥pc机的性能 2.B/S架构:browser浏览器和server服务器    隶属于C/S架构 B/S架构  统一了 ...

  2. SpringMVC入门(基于XML方式实现)

    ----------------------siwuxie095 SpringMVC 入门(基于 XML 方式实现) (一)搭建 SpringMVC 环境 1.先下载相关库文件,下载链接: (1)ht ...

  3. 基于AspectJ的XML方式进行AOP开发

    -------------------siwuxie095                                 基于 AspectJ 的 XML 方式进行 AOP 开发         1 ...

  4. Python错误:close failed in file object destructor

    我遇到的情况: 二进制程序调shell再调Python后,shell退出,Python进程挂到init上(不是僵尸进程),但 此时二进制程序未退出,这时候中断而二进制程序出现此提示. 经查询: 应该是 ...

  5. ubuntu18 realsenseD435i

    (flappbird) luo@luo-All-Series:~/librealsense/build201901/tools/enumerate-devices$ ./rs-enumerate-de ...

  6. mysql索引提高查询速度

    使用索引提高查询速度 1.前言 在web开发中,业务模版,业务逻辑(包括缓存.连接池)和数据库这三个部分,数据库在其中负责执行SQL查询并返回查询结果,是影响网站速度最重要的性能瓶颈.本文主要针对My ...

  7. 201621123008 《Java程序设计》第二周学习总结

    1. 本周学习总结 通过查询API掌握了一下几种类的基本用法: String类 StringBuilder类 ArrayList类 BigInteger类 BigDecimal类 Arrays类 认知 ...

  8. How to Set Up an Rsync Daemon on Your Linux Server

    Introduction This tutorial will take you through setting up an rsync daemon on your Linux server. Yo ...

  9. 16款值得一用的iPhone线框图模板 (PSD & Sketch)

    在任何网站或移动应用设计的过程中,线框图作为设计元素和功能的图示,它有助于帮助定义和更好地传达信息层次结构,让参与设计和开发的人员更好的理解设计师的思路和设计的功能点. 即使线框图设计是一个比较耗时的 ...

  10. 常用C字符串函数

    static void str_repalce(char *src,char *from,char *to) {     char *p,*q;     int lenFrom;     int le ...