class和ID的使用场景
一般情况而言,class代表这一类,多个元素可以共同属于一个class,而ID是唯一的,每一个ID对应唯一的元素。class试用于设置共性,而ID适合设置个性。
CSS常见的选择器
基础选择器
- *通用选择器,选择页面全部元素
- ID选择器,匹配特定的ID元素
- 类选择器,匹配class类型中包含特定类的元素
组合选择器
- E,F:多元素选择器,用,分隔,同时匹配元素E或元素F
- E F:后代选择器,用空格分隔,匹配E元素所有的后代元素F
- E>F:子元素选择器,匹配E元素的所有直接元素
- E+F:直接相邻选择器,匹配E元素之后的相邻的同级元素F
- E~F:普通相邻选择器,匹配E元素之后的同级元素F(无论直接相邻与否)
属性选择器
- E[attr]:匹配所有具有属性attr的元素
- E[attr=value]:匹配属性值为value的元素
- E[attr~=value]:匹配所有属性attr具有多个空格分隔,其中一个值等于value的元素
- E[attr^=value]:匹配属性attr的值以value开头的元素
- E[attr$=value]:匹配属性attr的值以value结尾的元素
- E[attr*=value]:p匹配属性attr的值包含value的元素
伪类选择器
- E:first-child:匹配元素E的第一个子元素
- E:link :匹配素有未被点击的链接
- E:visited :匹配所有已经被点击的链接
- E:active :匹配鼠标已经在其上按下,但是还没有释放的E元素
- E:hover :匹配鼠标悬停其上的E元素
- E:focus :匹配获得当前焦点的E元素
- E:lang(c) :匹配lang属性等于c的元素
- E:enabled :匹配表单中可用的元素
- Edisabled :匹配表单中禁用的元素
- E:checked: 匹配表单中被选中的radio或checkbox元素
- E:selection: 匹配用户当前选中的元素
- E:root :匹配文档的根元素,对于HTML文档,就是HTML元素
- E:nth-child(n) :匹配其父元素的第n个子元素,第一个编号为1
- E:nth-last-child :匹配其父元素的第n个子元素,第一个编号为1
- E:nth-of-type(n):与:nth-child作用类似,但是仅匹配使用同种标签的元素
- E:nth-last-of-type(n) :与nth-last-child作用相似,但是仅匹配使用同种标签的元素
- E:first-child:匹配父元素的第一个子元素
- E:last-child :匹配父元素的最后一个子元素
- E:first-of-type :即 E:nth-of-type(1)
- E:last-of-type :即 E:nth-last-of-type(1)
- E:only-child :匹配父元素下仅有的一个子元素
- E:only-of-type :匹配父元素下使用同种标签的唯一一个子元素
伪类元素选择器
- E::first-line :匹配E元素内容的第一行
- E::first-letter :匹配E元素内容的第一个字母
- E::before :在E元素之前插入生成的内容
- E::after :在E元素之后插入生成的内容
CSS选择器的优先级
以下优先权是从高到低
- 在属性后面使用!import会覆盖页面内任何位置定义的元素样式
- 作为style属性写在元素标签上的内联样式
- id选择器
- 类选择器
- 伪类选择器
- 属性选择器
- 标签选择器
- 通配符选择器
- 浏览器自定义
当各种选择器交错在一起时候,当情况比较复杂时,可以用下述方法进行优先权重的比较: - 根据组合选择器按照以下规则统计各类选择器的个数:
行内样式 --> 统计值为a
ID选择器 --> 统计值为b
类、属性选择器、伪类选择器 --> 统计为c
标签选择器、伪类选择器 --> 统计为d - 先比较a值的大小,a值大的则优先级高;如果a值相等,则再比较b值的大小,b值大的优先级高;如果b值相等,则比较c值的大小,c值大的优先级高;如果c值相等,则比较d值的大小,d值大的优先级高;
a:link,a:hover,a:active,a:visited的顺序
首先,a:link排在第一位;a:visited排在第二位;a:hover排在第三位;a:active排在最后,原因如下:
由于a:link状态表示着链接最为初始的状态,当访问过后,颜色要改变,因此要覆盖a:link原来状态,因此排在a:link之后。
a:hover需要排在a:active之前是因为当点击时候,a:active状态的颜色需要将a:hover的覆盖,因此这样排列。
尽管访问过后的链接颜色需要改变,但是不能将a:hover的颜色体现给覆盖掉,因此a:hover排列在a:visited之后。