【一】基本选择器
【1】概览
-
在CSS中,选择器用于选取HTML文档中的元素。
-
根据选择器的类型和语法的不同,可以选择不同的元素。
-
常用的有id选择器、类选择器、元素/标签选择器和通用选择器。
选择符 | 名称 | 版本 | 描述 |
---|---|---|---|
* | 通配选择符(Universal Selector) | CSS2 | 所有元素对象。 |
E | 类型选择符(Type Selector) | CSS1 | 以文档语言对象类型作为选择符。 |
#myid | id选择符(ID Selector) | CSS1 | 以唯一标识符id属性等于myid的E对象作为选择符。 |
.myclass | class选择符(Class Selector) | CSS1 | 以class属性包含myclass的E对象作为选择符。 |
【2】选择器使用
(1)id选择器
-
通过元素的id属性进行选取
-
每个页面中id值是唯一的,所以在css中最好不要重复使用id选择器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>color</title> <style> /* 使用方法:# + id属性值 + {css属性名:css属性值} */ #p1 {color: aqua;} </style> </head> <body> <p id="p1">hello,world</p> </body> </html>
(2)类选择器
-
通过元素的class属性进行选取。
-
多个元素可以共享一个class,所以class选择器是应用样式的最佳方式。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>color</title> <style> /* 使用方法:. + id属性值 + {css属性名:css属性值} */ .p1 {color: aqua;} </style> </head> <body> <p class="p1">hello,world</p> <p class="p1">hello</p> <p class="p1">你好</p> </body> </html>
(3)元素/标签选择器
-
通过元素标签名称进行选取
-
例如选择所有的段落、列表等
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>color</title> <style> /* 使用方法:标签名 + {css属性名:css属性值} */ span {color: aqua;} p {color: blue} </style> </head> <body> <span>髣髴兮若轻云之蔽月</span> <span>飘摇兮若流风之回雪</span> <p>举头望明月</p> <p>低头思故乡</p> </body> </html>
(4)通用选择器
-
*表示所有的元素
-
对所有元素都有影响,即改变所有元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>color</title> <style> /* 使用方法:* + {css属性名:css属性值} */ * {color: aqua;} </style> </head> <body> <span>髣髴兮若轻云之蔽月</span> <span>飘摇兮若流风之回雪</span> <p>举头望明月</p> <p>低头思故乡</p> </body> </html>
【二】关系选择器
【1】概览
-
后代选择器
-
儿子选择器
-
毗邻选择器
-
弟弟选择器
选择符 | 名称 | 版本 | 描述 |
---|---|---|---|
E F | 包含选择符(Descendant combinator) | CSS1 | 选择所有被E元素包含的F元素。 |
E>F | 子选择符(Child combinator) | CSS2 | 选择所有作为E元素的子元素F。 |
E+F | 相邻选择符(Adjacent sibling combinator) | CSS2 | 选择紧贴在E元素之后F元素。 |
E~F | 兄弟选择符(General sibling combinator) | CSS3 | 选择E元素所有兄弟元素F。 |
【2】标签关系
<div>div1 <div>div2 <p>p1</p> </div> <p>p2 <span>span1</span> </p> <span>span2</span> </div>
-
分析亲属关系
-
对于div1来说div2,p2,span2都是儿子
-
对于div2、p2、span2来说,div1就是父亲
-
对于p1来说,div2是父亲,div1是爷爷
-
对于span2来说,div2,p2都是哥哥
-
在div1内部的所有标签无论层级,都称之为div1的后代
-
【3】使用方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试关系</title> <style> /*后代选择器*/ /*div里面的所有span标签都变成红色*/ /*空格*/ div span{color: red;} /*儿子选择器*/ /*div内的所有儿子标签变色,而其他标签(例如孙子辈)不会变色*/ /*>*/ div > span {color: blue;} /*毗邻选择器*/ /*同级别紧挨着下面的第一个标签*/ /*+*/ div + p {color: aqua} /*弟弟选择器*/ /*同级别下面的所有span标签,只要是在下面的无论辈分*/ /*~*/ div ~ span {color: antiquewhite} </style> </head> <body> <div>div1 <div>div2 <p>p1</p> </div> <p>p2 <span>span1</span> </p> <span>span2</span> </div> </body> </html>
【三】属性选择器
【1】概览
-
含有某个属性
-
含有某个属性并且有某个值
-
含有某个属性并且有某个值的某个标签
选择符 | 版本 | 描述 |
---|---|---|
E[att] | CSS2 | 选择具有att属性的E元素。 |
E[att="val"] | CSS2 | 选择具有att属性且属性值等于val的E元素。 |
E[att~="val"] | CSS2 | 选择具有att属性且属性值为一用空格分隔的字词列表,其中一个等于val的E元素。 |
E[att^="val"] | CSS3 | 选择具有att属性且属性值为以val开头的字符串的E元素。 |
E[att$="val"] | CSS3 | 选择具有att属性且属性值为以val结尾的字符串的E元素。 |
E[att*="val"] | CSS3 | 选择具有att属性且属性值为包含val的字符串的E元素。 |
E[att|="val"] | CSS2 | 选择具有att属性且属性值为以val开头并用连接符"-"分隔的字符串的E元素,如果属性值仅为val,也将被选择。 |
【2】使用方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试关系</title> <style> /*方式一:[type_name] {属性名:属性值}*/ [username]{color: red;} /*方式二: [type_name=type_value] {属性名:属性值}*/ [username="knight"]{color: aquamarine;} [username="ttdw"]{color: bisque;} </style> </head> <body> <input type="text" username> <input type="text" username="knight"> <input type="text" username="ttdw"> <p username="knight">测试</p> <div username="ttdw">童童大王</div> </body> </html>
【四】伪类选择器
选择符 | 版本 | 描述 |
---|---|---|
E:link | CSS1 | 设置超链接a在未被访问前的样式。 |
E:visited | CSS1 | 设置超链接a在其链接地址已被访问过时的样式。 |
E:hover | CSS1/2 | 设置元素在其鼠标悬停时的样式。 |
E:active | CSS1/2 | 设置元素在被用户激活(在鼠标点击与释放之间发生的事件)时的样式。 |
E:focus | CSS1/2 | 设置元素在成为输入焦点(该元素的onfocus事件发生)时的样式。 |
E:lang(fr) | CSS2 | 匹配使用特殊语言的E元素。 |
E:not(s) | CSS3 | 匹配不含有s选择符的元素E。 |
E:root | CSS3 | 匹配E元素在文档的根元素。 |
E:first-child | CSS2 | 匹配父元素的第一个子元素E。 |
E:last-child | CSS3 | 匹配父元素的最后一个子元素E。 |
E:only-child | CSS3 | 匹配父元素仅有的一个子元素E。 |
E:nth-child(n) | CSS3 | 匹配父元素的第n个子元素E。 |
E:nth-last-child(n) | CSS3 | 匹配父元素的倒数第n个子元素E。 |
E:first-of-type | CSS3 | 匹配父元素下第一个类型为E的子元素。 |
E:last-of-type | CSS3 | 匹配父元素下的所有E子元素中的倒数第一个。 |
E:only-of-type | CSS3 | 匹配父元素的所有子元素中唯一的那个子元素E。 |
E:nth-of-type(n) | CSS3 | 匹配父元素的第n个子元素E。 |
E:nth-last-of-type(n) | CSS3 | 匹配父元素的倒数第n个子元素E。 |
E:empty | CSS3 | 匹配没有任何子元素(包括text节点)的元素E。 |
E:checked | CSS3 | 匹配用户界面上处于选中状态的元素E。(用于input type为radio与checkbox时) |
E:enabled | CSS3 | 匹配用户界面上处于可用状态的元素E。 |
E:disabled | CSS3 | 匹配用户界面上处于禁用状态的元素E。 |
E:target | CSS3 | 匹配相关URL指向的E元素。 |
@page:first | CSS2 | 设置页面容器第一页使用的样式。仅用于@page规则 |
@page:left | CSS2 | 设置页面容器位于装订线左边的所有页面使用的样式。仅用于@page规则 |
@page:right | CSS2 | 设置页面容器位于装订线右边的所有页面使用的样式。仅用于@page规则 |
【1】使用方法
(1)超链接设置样式顺序
超链接状态顺序: a:link {} a:visited {} a:hover {} a:active {}
E:link { sRules } 设置超链接a在未被访问前的样式。 如果需要给超链接定义:访问前,鼠标悬停,当前被点击,已访问这4种伪类效果,而又没有按照一致的书写顺序,不同的浏览器可能会有不同的表现 超链接的4种状态,需要有特定的书写顺序才能生效。 E:visited { sRules } 设置超链接a在其链接地址已被访问过时的样式。 如果需要给超链接定义:访问前,鼠标悬停,当前被点击,已访问这4种伪类效果,而又没有按照一致的书写顺序,不同的浏览器可能会有不同的表现 超链接的4种状态,需要有特定的书写顺序才能生效。 E:hover { sRules } 设置元素在其鼠标悬停时的样式。 如果需要给超链接定义:访问前,鼠标悬停,当前被点击,已访问这4种伪类效果,而又没有按照一致的书写顺序,不同的浏览器可能会有不同的表现 超链接的4种状态,需要有特定的书写顺序才能生效。 E:active { sRules } 设置元素在被用户激活(在鼠标点击与释放之间发生的事件)时的样式。 如果需要给超链接定义:访问前,鼠标悬停,当前被点击,已访问这4种伪类效果,而又没有按照一致的书写顺序,不同的浏览器可能会有不同的表现 超链接的4种状态,需要有特定的书写顺序才能生效。 E:focus { sRules } 设置对象在成为输入焦点(该对象的onfocus事件发生)时的样式。 webkit内核浏览器会默认给:focus状态的元素加上outline的样式。
(2)使用示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试关系</title> <style> /*为被访问之前的颜色*/ a:link {color: bisque} /*已经被访问过后的颜色*/ a:visited {color: blue} /*鼠标光点悬浮在上的颜色*/ a:hover {color: aquamarine} /*鼠标点击未松开时的颜色*/ a:active {color: red} /*设置对象在成为输入焦点时的样式*/ input:focus{color: coral} </style> </head> <body> <a href="https://www.baidu.com/">当前网址是否存在</a> <input type="text"> </body> </html>
(3)补充
E:first-child { sRules } 匹配父元素的第一个子元素E。 要使该属性生效,E元素必须是某个元素的子元素,E的父元素最高是body,即E可以是body的子元素 E必须是它的兄弟元素中的第一个元素,换言之,E必须是父元素的第一个子元素。 与之类似的伪类还有E:last-child,只不过情况正好相反,需要它是最后一个子元素。 E:last-child { sRules } 匹配父元素的最后一个子元素E。 要使该属性生效,E元素必须是某个元素的子元素,E的父元素最高是body,即E可以是body的子元素 E必须是它的兄弟元素中的最后一个元素,换言之,E必须是父元素的最后一个子元素。 与之类似的伪类还有E:first-child,只不过情况正好相反,需要它是第一个子元素。 E:only-child { sRules } 匹配父元素仅有的一个子元素E。 要使该属性生效,E元素必须是某个元素的子元素,E的父元素最高是body,即E可以是body的子元素 E:nth-child(n) { sRules } 匹配父元素的第n个子元素E,假设该子元素不是E,则选择符无效。 要使该属性生效,E元素必须是某个元素的子元素,E的父元素最高是body,即E可以是body的子元素 该选择符允许使用一个乘法因子(n)来作为换算方式,比如我们想选中所有的偶数子元素E,那么选择符可以写成:E:nth-child(2n) E:nth-last-child(n) { sRules } 匹配父元素的倒数第n个子元素E,假设该子元素不是E,则选择符无效。 要使该属性生效,E元素必须是某个元素的子元素,E的父元素最高是body,即E可以是body的子元素 该选择符允许使用一个乘法因子(n)来作为换算方式,比如我们想选中倒数第一个子元素E,那么选择符可以写成:E:nth-last-child(1)
【五】伪元素选择器
【1】概览
选择符 | 版本 | 描述 |
---|---|---|
E:first-letter/E::first-letter | CSS1/3 | 设置对象内的第一个字符的样式。 |
E:first-line/E::first-line | CSS1/3 | 设置对象内的第一行的样式。 |
E:before/E::before | CSS2/3 | 设置在对象前(依据对象树的逻辑结构)发生的内容。用来和content属性一起使用 |
E:after/E::after | CSS2/3 | 设置在对象后(依据对象树的逻辑结构)发生的内容。用来和content属性一起使用 |
E::placeholder | CSS3 | 设置对象文字占位符的样式。 |
E::selection | CSS3 | 设置对象被选择时的颜色。 |
【2】注解
E:first-letter/E::first-letter { sRules } 设置对象内的第一个字符的样式。 此伪对象仅作用于块对象。内联对象要使用该伪对象,必须先将其设置为块级对象。 该伪类常被用来配合font-size属性和float属性制作首字下沉效果。 IE6在使用该选择符时有个显式的BUG:选择符与包含规则的花括号之间不能紧挨着,需留有空格或换行。同时还存在该BUG的选择符包括:E:first-line CSS3将伪对象选择符(Pseudo-Element Selectors)前面的单个冒号(:)修改为双冒号(::)用以区别伪类选择符(Pseudo-Classes Selectors),但以前的写法仍然有效。 即E:first-letter可转化为E::first-letter E:first-line/E::first-line { sRules } 设置对象内的第一行的样式。 此伪对象仅作用于块对象。内联对象要使用该伪对象,必须先将其设置为块级对象。 IE6在使用该选择符时有个显式的BUG:选择符与包含规则的花括号之间不能紧挨着,需留有空格或换行。同时还存在该BUG的选择符包括:E:first-letter CSS3将伪对象选择符(Pseudo-Element Selectors)前面的单个冒号(:)修改为双冒号(::)用以区别伪类选择符(Pseudo-Classes Selectors),但以前的写法仍然有效。 即E:first-line可转化为E::first-line E:before/E::before { sRules } 设置在对象前(依据对象树的逻辑结构)发生的内容。用来和content属性一起使用,并且必须定义content属性 CSS3将伪对象选择符(Pseudo-Element Selectors)前面的单个冒号(:)修改为双冒号(::)用以区别伪类选择符(Pseudo-Classes Selectors),但以前的写法仍然有效。 即E:before可转化为E::before E:after/E::after { sRules } 设置在对象后(依据对象树的逻辑结构)发生的内容。用来和content属性一起使用,并且必须定义content属性 CSS3将伪对象选择符(Pseudo-Element Selectors)前面的单个冒号(:)修改为双冒号(::)用以区别伪类选择符(Pseudo-Classes Selectors),但以前的写法仍然有效。 即E:after可转化为E::after E::placeholder { sRules } 设置对象文字占位符的样式。 ::placeholder 伪元素用于控制表单输入框占位符的外观,它允许开发者/设计师改变文字占位符的样式,默认的文字占位符为浅灰色。 当表单背景色为类似的颜色时它可能效果并不是很明显,那么就可以使用这个伪元素来改变文字占位符的颜色。 需要注意的是,除了Firefox是 ::[prefix]placeholder,其他浏览器都是使用 ::[prefix]input-placeholder\ E::selection { sRules } 设置对象被选择时的样式。 需要注意的是,::selection只能定义被选择时的background-color,color及text-shadow(IE11尚不支持定义该属性)。
【3】使用示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试关系</title> <style> /*修改首个字,大小颜色*/ p:first-letter { font-size:48px; color: coral; } /*在文本开头添加内容 */ p:before{ content: '是的'; color: bisque; } p:after{ content: '嘿嘿'; color: aqua; } </style> </head> <body> <p>她真好看</p> </body> </html>
【六】分组与嵌套
【1】分组
(1)使用方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试关系</title> <style> /*查找p或者span*/ p,span{ color: coral; } </style> </head> <body> <div>div1 <div>div2 <p>p1</p> <div>div4</div> </div> <p>p2 <span>span1</span> </p> <span>span2</span> <div>div3</div> </div> </body> </html>
【2】嵌套
(1)使用方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试关系</title> <style> /*查找id是d1的内部class包含c1的儿子标签*/ /*查找id是c2的p标签*/ #d1>.c1,p.c2{ color: coral; } /*查找div内部id是d2的后代标签*/ div #d2{ color: bisque; } </style> </head> <body> <div>div1 <div id="d3">div2 <p class="c2">p1</p> <div class="c1">div4</div> </div> <p id="d1">p2 <span class="c1">span1</span> <p class="c2">p5</p> <span id="d2">span2</span> <div>div3</div> </div> </body> </html>
【七】选择器优先级
【1】概述
-
!important
-
行内 style 属性
-
id选择器
-
类选择器
-
标签选择器
-
行内选择器
【2】选择器相同,书写顺序不同
-
就近原则:谁离的近,就使用谁的样式
【3】选择器不同
-
!important > 行内 style 属性 > 行内选择器 > id选择器 > 类选择器 > 标签选择器
-
精确度越高,优先级越高