一.选择器语法及其意义(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. 奇偶数判断2(if else+switch语句)

    public class 奇偶数判断2 { public static void main(String [] agrs){ float s = 17f; //定义浮点型数据s float h = s ...

  2. python之面向对象之继承

    #写一个类SchoolMember class SchoolMember(object): member_num = 0 def __init__(self,name,age,sex): self.n ...

  3. [leetcode]158. Read N Characters Given Read4 II - Call multiple times 用Read4读取N个字符2 - 调用多次

    The API: int read4(char *buf) reads 4 characters at a time from a file. The return value is the actu ...

  4. c3p0数据源配置

    Xml代码   <c3p0-config> <default-config> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: --> ...

  5. BZOJ1221 [HNOI2001]软件开发 - 费用流

    题解 非常显然的费用流. 但是建图还是需要思考的QuQ 将每天分成两个节点 $x_{i,1}, x_{i,2} $, $ x_{i,1}$用于提供服务, $x_{i ,2}$ 用来从源点获得$nd[i ...

  6. 这样的UI UX设计师描述你满意吗?

    UI/UX 设计师是我们耳熟能详的名称,但是这些红遍大江南北的设计师到底是什么鬼? 今天小编跟大家好好分享一些关于UI UX 设计师的描述,让大家搞清楚两者的含义和职责.全文主要分成UI设计师描述和U ...

  7. Devexpress VCL Build v2013 vol 13.2.5 发布

    支持xe6 了,但是承诺的功能在哪里? What's New in 13.2.5 (VCL Product Line)   New Major Features in 13.2 What's New ...

  8. 2018.09.19 atcoder Snuke's Coloring(思维题)

    传送门 谁能想到这道题会写这么久. 本来是一道很sb的题啊. 就是每次选一个点只会影响到周围的九个方格,随便1e9进制就可以hash了,但是我非要作死用stl写. 结果由于技术不够高超,一直调不出来. ...

  9. hdu-1087(动态规划)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087 思路:每确定一个数,后面一个数肯定比它大.所以可以先从最后一个数开始,不断向前确定前面的状态,推 ...

  10. 【转】关于编译链接——gcc/g++

    添加运行时共享库目录 运行使用共享库的程序需要加载共享库(不同于G++ 编译时指定的链接库),添加共享库的步骤: 修改文件 /etc/ld.so.conf 添加共享库目录 运行 ldconfig 同步 ...