CSS选择器的深入了解
- 一、属性选择器
- 二、关系选择器
- 三、结构化的伪类选择器
- 四、伪对象选择器
- 五、超链接的伪类选择器
一、属性选择器
前提:"E"表示各个标签,"att "指各个属性
1、E[att]
选择具有att属性的元素
举个例子:如下所示,属性选择器h1[class]对前两行起作用,字体为斜体,颜色为红色,对第三行没有作用。
①代码展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
h1[class]{
color: red;
font-style: italic;
}
</style>
<body>
<h1 class="">西安邮电大学</h1>
<h1 class="">西安邮电大学</h1>
<h2 class="">西安邮电大学</h2>
</body>
</html>
②页面展示:
2、E[att=“val”]
选择具有att属性,并且att属性值等于val的元素.
举个例子:如下所示,属性选择器a[class=‘ex1’]只对第二行起作用,而a[class=‘ex3’]只对第三行起作用,二三行都是超链接的默认样式。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=<device-width>, initial-scale=1.0">
<title>Document</title>
</head>
<style>
a[class='ex1']{
color: red;
}
a[class='ex3']{
font-size: 25px;
color: aquamarine;
}
</style>
<body>
<ul>
<li ><a href="#" class="ex1">外部链接</a></li>
<li ><a href="#">内部链接</a></li>
<li ><a href="#" class="ex3">外部链接</a></li>
<li ><a href="#">内部链接</a></li>
</ul>
</body>
</html>
②页面展示:
3、E[att~=“val”]
选择具有att属性,并且att属性值是用空格隔开的单词,其中一个单词等于val
举个例子:如下所示,属性选择器 li[class~=‘zh’] 是用空格隔开的单词,其中一个单词等于zh,如页面展示中, 对一三行的样式起作用,字体颜色、字体大小、字体类型样式都已改变,而三四行就是默认值。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
li[class~='zh']{
font-size: 30px;
color: aqua;
font-family: '宋体';
}
</style>
<body>
<ul>
<li class="zh xiyou">红楼梦</li>
<li>西游记</li>
<li class="zh why">水浒传</li>
<li>三国演义</li>
</ul>
</body>
</html>
②页面展示:
4、E[att^=“val”]
选择具有att属性,并且att属性值是以val开头的字符串
举个例子:如下所示,属性选择器 input[name^=‘user’] 是将name属性值是以user开头的字符串的input标签的样式进行修改。
正如页面展示所示,一三行的输入框内容样式改变,颜色为红色,而第二行为默认样式,没有任何样式改变。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择具有name属性,并且name属性值是以user开头的input标签 */
input[name^='user']{
color: red;
}
</style>
<body>
密码: <input type="password" name="userpwd">
<br/><br/>
地址: <input type="text" name="address">
<br/><br/>
年龄:<input type="text" name="userage">
</body>
</html>
②页面展示:
5、E[att$=“val”]
选择具有att属性,并且att属性值是以val结尾的字符串
举个例子:如下所示,属性选择器 input[name$=‘age’]是将name属性值是以age结尾的字符串的input标签的样式进行修改。
正如页面展示所示,输入框内容样式改变,颜色为紫色。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择具有name属性,并且name属性值是以age结尾的input标签 */
input[name$='age']{
color: blueviolet;
}
</style>
<body>
年龄:<input type="text" name="userage">
</body>
</html>
②页面展示:
6、E[att*=“val”]
选择具有att属性,并且att属性值中包含val的字符串。
举个例子:如下所示,属性选择器 input[name=‘add’]是将name属性值中包含’add’的input标签的样式进行修改。
正如页面展示所示,输入框内容样式改变,颜色为青色。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择具有name属性,并且name属性值中包含'add'的input标签 */
input[name*='add']{
color: chartreuse;
}
</style>
<body>
地址: <input type="text" name="address">
</body>
</html>
②页面展示:
7、E[att|=“val”]
选择具有att属性,并且att属性值是以val开头、以’-'分隔的字符串
举个例子:如下所示,属性选择器input[name|=‘user’]是将name属性值中是以user开头,以’-'分隔的字符串的input标签的样式进行修改。
正如页面展示所示,输入框内容样式改变,颜色为橘色。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择具有name属性,并且name属性值是以user开头,以'-'分隔的字符串的input标签 */
input[name|='user']{
color: orange;
}
</style>
<body>
爱好:<input type="text" name="user-hobby">
</body>
</html>
②页面展示:
二、关系选择器
穿插个小知识点:html中的父元素、子元素、兄弟元素是什么?
html元素指的是从开始标签到结束标签的所有代码,不同的标签之间有包含关系,也有同级关系,举例如下:
<html>
<body>
<p>我是一段文字</p>
<p>我也是一段文字</p>
</body>
</html>
html元素定义了整个html文档, 这个元素拥有一个开始标签<html>; ,以及一个结束标签</html>。而这个html文档的元素内容是另一个html元素<body> 。
body元素定义了html文档的主体部分,相对于body来说,html就是body的父元素,body就是html的子元素。
同理,上例代码中,p元素相对于body来说,body就是p的父元素,p就是body的子元素。
而两个p元素互相没有包含的关系,那么这两个p元素就是同级关系,也就是兄弟元素。
1、包含选择器(E F)
选择所有被E包含的F元素
举个例子:如下所示,包含选择器 (ol li)是选择所有被ol包含的li元素样式进行修改。
正如页面展示所示,li标签样式被改变,字体颜色为红棕色,字体大小也被改变为20px,默认字体为16px。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择所有被ol包含的li元素 */
ol li{
font-size: 20px;
color: brown;
}
</style>
<body>
<ol>
<li>茅台</li>
<li>五粮液</li>
<li>泸州老窖</li>
<li>西凤酒</li>
</ol>
</body>
</html>
②页面展示:
2、子元素选择器(E>F)
选择所有作为E元素的子元素F
举个例子:如下所示,子元素选择器 (nav>p)是选择nav所包含的所有为p子元素标签进行修改。
正如页面展示所示,p标签样式被改变,字体颜色改为黄绿色。span标签就为默认样式,没有被改变。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择nav所包含的所有为p子元素标签 */
nav>p{
color: yellowgreen;
}
</style>
<body>
<nav>
<p>公司管理</p>
<p>采购管理</p>
<p>后勤管理</p>
<p>采购管理</p>
<span>AAAAA</span>
</nav>
</body>
</html>
②页面展示:
3、相邻元素选择器(E+F)
选择紧贴在E元素之后F元素
举个例子:如下所示,相邻元素选择器 (nav+p)是指选择紧贴在nav标签之后的p标签样式进行修改。
正如页面展示所示,紧贴nav标签的p标签样式被改变,字体颜色为红色。相隔的p标签就不行,字体颜色没有被改变。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择紧贴在nav标签之后的p标签 */
nav+p{
color: red;
}
</style>
<body>
<nav>
<p>公司管理</p>
<p>采购管理</p>
<p>后勤管理</p>
<p>采购管理</p>
<span>AAAAA</span>
</nav>
<p>西安邮电大学</p>
<p>西安交通大学</p>
</body>
</html>
②页面展示:
4、兄弟选择器(E~F)
选择E元素后面的所有兄弟元素F
**举个例子:如下所示,兄弟选择器 (ol~p)是指选择ol之后的所有兄弟标签样式进行修改。
正如页面展示所示,p样式被改变,字体颜色为深黄色,字体大小也被改变为45px。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择ol之后的所有兄弟标签 */
ol~p{
color: gold;
font-size: 45px;
}
</style>
<body>
<ol>
<li>茅台</li>
<li>五粮液</li>
<li>泸州老窖</li>
<li>西凤酒</li>
</ol>
<nav>
<p>公司管理</p>
<p>采购管理</p>
<p>后勤管理</p>
<p>采购管理</p>
<span>AAAAA</span>
</nav>
<p>西安邮电大学</p>
<aside>
<p>西北政法大学</p>
</aside>
<p>西安交通大学</p>
</body>
</html>
②页面展示:
三、结构化的伪类选择器
注意:伪类选择器带冒号
1、html:root:根元素选择器。
html文档中的根只有一个。样式应用于页面的每个元素。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
html:root{
background-color: rgb(228, 204, 209);
color: red;
}
</style>
<body>
<ul>
<li>AAAAA</li>
<li>BBBBBB</li>
</ul>
<p>CCCC</p>
<span>DDDDD</span>
</body>
</html>
②页面展示:
2、E:not(选择器)
不包含给定选择器的元素
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 将p标签中class属性值为abc的元素排除
即:选择class属性值不等于abc的p标签
*/
p:not(.abc){
color:blue;
}
</style>
<body>
<p class="abc" id="ps">西安交大</p>
<p id="pt">西北大</p>
<p class="abcd" id="pi">陕师大</p>
</body>
</html>
②页面展示:
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择id属性不是pt的p标签 */
p:not(#pt){
font-size: 35px;
}
</style>
<body>
<p class="abc" id="ps">西安交大</p>
<p id="pt">西北大</p>
<p class="abcd" id="pi">陕师大</p>
</body>
</html>
②页面展示:
3、E:only-child
匹配父元素仅有一个子元素E
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 匹配ul父元素只有一个子元素的标签 */
li:only-child{
background-color: antiquewhite;
}
</style>
<body>
<ul>
<li>北京</li>
</ul>
<ul>
<li>重庆</li>
<li>上海</li>
<li>天津</li>
</ul>
</body>
</html>
②页面展示:(注:可以看到,相同的无序标签,只对第一个无序标签里的含有一个子元素"li"起作用,对第二个的无序标签没有任何改变。)
4、E:first-child
匹配父元素的第一个子元素E
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择父元素中的第一个子元素的li */
li:first-child{
font-size: 25px;
color:blueviolet
}
</style>
<body>
<ul>
<li>北京</li>
</ul>
<ul>
<li>重庆</li>
<li>上海</li>
<li>天津</li>
</ul>
<ol>
<li>董事长</li>
<li>总经理</li>
<li>董事</li>
</ol>
</body>
</html>
②页面展示:
5、E:last-child
匹配父元素的最后一个子元素E
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择父元素中的最后一个子元素的li */
li:last-child{
font-size: 25px;
color: aqua;
}
</style>
<body>
<ul>
<li>北京</li>
</ul>
<ul>
<li>重庆</li>
<li>上海</li>
<li>天津</li>
</ul>
<ol>
<li>董事长</li>
<li>总经理</li>
<li>董事</li>
</ol>
</body>
</html>
②页面展示:(注:第一个无序标签里的li标签是父元素的第一个元素,也是最后一个元素,样式也进行了改变。)
6、E:nth-child(n)
匹配父元素中第(n)个子元素E
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择是父元素的第二个子元素的li */
li:nth-child(2){
color:blueviolet;
font-size:20px;
}
</style>
<body>
<ul>
<li>重庆</li>
<li>上海</li>
<li>天津</li>
</ul>
<ol>
<li>董事长</li>
<li>总经理</li>
<li>董事</li>
</ol>
</body>
</html>
②页面展示:
7、E:nth-last-child(n)
匹配父元素中倒数第(n)个子元素E
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择父元素中的倒数第一个子元素的li */
li:nth-last-child(1){
font-size: 25px;
color:pink
}
</style>
<body>
<ul>
<li>重庆</li>
<li>上海</li>
<li>天津</li>
</ul>
<ol>
<li>董事长</li>
<li>总经理</li>
<li>董事</li>
</ol>
</body>
</html>
②页面展示:
8、E:nth-of-type(n)
匹配同类型中的第n个同级兄弟元素E。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择aside的第三个p标签 */
p:nth-of-type(3){
color:red;
}
</style>
<body>
<aside>
<p>飞机</p>
<p>轮船</p>
<p>汽车</p>
</aside>
</body>
</html>
②页面展示:
9、E:empty
匹配没有任何子元素的元素E
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择没有任何元素的p标签(包括没有任何内容) */
p:empty{
height: 15px;
border: 1px;
background-color: rgb(38, 186, 197);
}
</style>
<body>
<p>AAAAAAAA</p>
<p></p>
<p>BBBBBBBB</p>
</body>
</html>
②页面展示:
10、E:checked
匹配用户界面上处于选中状态的元素E
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择处于选中状态的input ,将它的相邻的兄弟元素的文本设置为red*/
input:checked+span{
color:red;
}
</style>
<body>
性别:
<label><input type="radio" value="男" name="gender" checked/><span>男</span>
</label>
<label>
<input type="radio" value="女" name="gender"/><span>女</span>
</label>
</body>
</html>
②页面展示:(注:选中后,颜色改为红色)
11、E:enabled
匹配用户界面上处于可用状态的元素E。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择含有name属性并且可用的input标签 */
input[name]:enabled{
color:red;
}
</style>
<body>
<label>
姓名:
<input type="text" name="username"/>
</label>
<br/><br/>
<label>
测试:
<input type="text" name="test" value="abc" disabled/> <!--不可用 -->
</label>
</body>
</html>
②页面展示:(注:可以看到可用的input标签,输入框的内容颜色改变,颜色为红色,而不可用的input标签颜色没有任何改变)
12、E:disabled
匹配用户界面上处于禁用状态的元素E。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* 选择含有name属性并且不可用的input标签 */
input[name]:disabled{
color:blue;
}
</style>
<body>
<label>
姓名:
<input type="text" name="username"/>
</label>
<br/><br/>
<label>
测试:
<input type="text" name="test" value="abc" disabled/> <!--不可用 -->
</label>
</body>
</html>
②页面展示:(注:可以看到不可用的input标签,内容框的内容颜色改变,变为了蓝色,可用的input标签颜色没有被改变。)
四、伪对象选择器
1、E:before(CSS2) -> E::before(CSS3)
设置在对象前(依据对象树的逻辑结构)插入的内容。必须和content属性一起使用
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
p::before{
/* position: absolute; 定位方式:绝对定位 */
color:red;
content: '西安交通大学';
}
</style>
<body>
<p>西安邮电大学</p>
</body>
</html>
②页面展示:
2、E:after(CSS2)-> E::after(CSS3)
设置在对象后(依据对象树的逻辑结构)插入的内容。必须和content属性一起使用
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
p::after{
/* position: absolute; 定位方式:绝对定位 */
color:red;
content: '西安交通大学';
}
</style>
<body>
<p>西安邮电大学</p>
</body>
</html>
②页面展示:
五、超链接的伪类选择器
1、E:link
设置超链接a在未被访问前的样式,也就是超链接正常时候的状态。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
a:link{
/* 超链接未被访问之前的样式 */
font-size: 20px;
color:red;
}
</style>
<body>
<a href="">百度</a>
</body>
</html>
②页面展示:
2、E:visited
设置超链接a在被访问后的样式
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
a:visited{
/* 超链接被访问之后的样式 */
color:greenyellow;
}
</style>
<body>
<a href="">百度</a>
</body>
</html>
②页面展示:
3、E:hover
设置元素在其鼠标悬停时的样式
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
/* E:hover文本和超链接均可使用 */
p:hover{
/* 鼠标悬浮在p标签上的样式 */
font-style: italic;
font-size: 25px;
}
/* 鼠标悬浮在a标签的样式 */
a:hover{
font-weight:bold;
font-size:25px;
}
</style>
<body>
<a href="">百度</a>
<p>西安邮电大学</p>
</body>
</html>
②页面展示:
4、E:active
设置元素在被用户激活(在鼠标点击与释放之间发生的事件)时的样式。
①代码展示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
p:active{
/* 鼠标在被激活时(鼠标点击与释放之间发生的事情)的样式 */
color:blue;
}
</style>
<body>
<p>西安邮电大学</p>
</body>
</html>
②页面展示: