CSS选择器
一、常用选择器
1.1 元素选择器
作用:根据标签名来选中指定的元素
语法:标签名{}
例子:p{} h1{} div{}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>元素选择器</title>
<style>
p{
color:red;
}
h1{
color:orange;
}
div{
color:green;
}
</style>
</head>
<body>
<p>
这是一哥p标签
</p>
<h1>
这是一个h1标签
</h1>
<div>
这是一个div标签
</div>
</body>
</html>
1.2 id选择器
作用:根据元素的id属性选中一个元素
语法:#id属性值{}
例子:#box{} #red{}
<!DOCTOPE html>
<html>
<head>
<meta charset="utf-8">
<title>id选择器</title>
<style>
#red{
color:red;
}
#green{
color:green;
}
</style>
</head>
<body>
<p id="red">
这是一个id为red的p标签
</p>
<p id="green">
这是一个id为green的p标签
</p>
</body>
</html>
1.3 class选择器
作用:根据元素的class属性值选中一组元素
语法:.class属性值
class是一个标签的属性,它和id类似,不同的是class可以重复使用,可以通过class属性来为元素分组,可以同时为一个元素指定多个class属性
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>class选择器</title>
<style>
.aaa{
color:red;
}
.bbb{
color:green;
}
.ccc{
color:orange;
}
</style>
</head>
<body>
<p class="aaa">
这是一个P标签
</p>
<span class="bbb">
这是一个span标签
</span>
<div class="ccc">
这是一个div标签
</div>
<p class="eee aaa">
这是一个p标签
</p>
</body>
</html>
1.4 通配选择器
作用:选中页面中的多有元素
语法:*
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>通配选择器</title>
<style>
*{
color:red;
}
</style>
</head>
<body>
<p>
这是一个p标签
</p>
<span>
这是一个span标签
</span>
<div>
这是一个div标签
</div>
</body>
</html>
二、复合选择器
2.1 交集选择器
作用:选中同时复合多个条件的元素
语法:选择器1选择器2选择器3选择器n{}
注意点:交集选择器中如果有元素选择器,必须使用元素选择器开头
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>交集选择器</title>
<style>
div.red{
color:red;
}
</style>
</head>
<body>
<div class="red">
这是一个class为red的div标签
</div>
<p class="red">
这是一个class为red的p标签
</p>
<div class="green">
这是一个class为green的div标签
</div>
</body>
</html>
2.2 并集选择器
作用:同时选择多个选择器对应的元素
语法:选择器1,选择器2,选择器3,选择器n{}
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<title>并集选择器</title>
<head>
<style>
h1,p{
color:red;
}
</style>
</head>
<body>
<div class="red">
这是一个class为red的div标签
<p>
这是一个p标签
</p>
</div>
<span class="red">这是一个class为red的span标签</span>
<h1>
这是一个h1标签
</h1>
<p>
这是一个p标签
</p>
</body>
</html>
三、关系选择器
-
父元素:直接包含子元素的元素叫做父元素
-
子元素:直接被父元素包含的元素是子元素
-
祖先元素:直接或间接包含后代元素的元素叫做祖先元素
一个元素的父元素也是它的祖先元素
-
后代元素:直接或间接被祖先元素包含的元素叫做后代元素
子元素也是后代元素
-
兄弟元素:拥有相同父元素的元素是兄弟元素
3.1 子类选择器
作用:选中指定父元素的指定子元素(只能一级一级指定)
语法:父元素 > 子元素
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>子元素选择器</title>
<style>
div.red > p.green{
color:red;
}
</style>
</head>
<body>
<div class="red">
这是一个div标签
<p>
这是一个p标签
<span>这是一个span标签</span>
</p>
<p class="green">
这是一个p标签
</p>
</div>
<hr/>
<div>
这是一个div标签
<p>
这是一个p标签
<span>这是一个span标签</span>
</p>
<p class="green">
这是一个p标签
</p>
</div>
<p>
这是一个p标签
</p>
</body>
</html>
3.2 后代选择器
作用:选中指定元素内的指定后代元素(可以不用一级一级指定)
语法:祖先 后代
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>子元素选择器</title>
<style>
div.red span{
color:red;
}
</style>
</head>
<body>
<div class="red">
这是一个div标签
<p>
这是一个p标签
<span>这是一个span标签</span>
</p>
<p class="green">
这是一个p标签
</p>
</div>
<hr/>
<div>
这是一个div标签
<p>
这是一个p标签
<span>这是一个span标签</span>
</p>
<p class="green">
这是一个p标签
</p>
</div>
<p>
这是一个p标签
</p>
</body>
</html>
3.3 兄弟选择器
- 作用1:选择所有a标签下边第一个兄弟
语法:a标签+b标签
-
作用2:选择所有a标签下边所有的兄弟
语法:a标签~b标签
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>兄弟选择器</title>
<style>
p+span{
color:red;
}
/*p~span{
color:red;
}*/
</style>
</head>
<body>
<div class="red">
这是一个div标签
<p>
这是一个p标签
<span>这是一个span标签</span>
</p>
<p class="green">
这是一个p标签
</p>
<span>这是一个span标签</span>
<span>这是一个span标签</span>
<span>这是一个span标签</span>
<span>这是一个span标签</span>
<span>这是一个span标签</span>
<span>这是一个span标签</span>
</div>
</body>
</html>
四、属性选择器
作用:选择含有指定属性的元素
语法:标签 [属性名=属性值]:选择含有指定属性和属性值的元素
标签 [属性名^=属性值]:选择属性值以指定值开头的元素
标签 [属性名$=属性值]:选择属性值以指定值结尾的元素
标签 [属性名*=属性值]:选择属性值含有某值的元素的元素
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>属性选择器</title>
<style>
p[title=red]{
color:red;
}
/*
p[title^=red]{
color:red;
}
p[title$red]{
color:red;
}
p[title*=red]{
color:red;
}
*/
</style>
</head>
<body>
<div title="red">
这是一个title为red的div标签
</div>
<div title="green">
这是一个title为green的div标签
</div>
<div title="orange">
这是一个title为orange的div标签
</div>
</body>
</html>
五、伪类选择器
伪类(不存在的类,特殊的类)
— 伪类用来描述一个元素的特殊状态
比如:第一个元素,被点击的元素,鼠标移入的元素…
— 伪类一般情况下都是使用:开头
-
表示第几个的伪类
:first-child 第一个子元素
:last-child 最后一个子元素
:nth-child()选中第n个子元素
特殊值:
n 第n个 n的范围0到正无穷
2n 或 even 表示选中偶数位的元素
2n+1 或 add 表示选中奇数位的元素
以上这些伪类都是根据所有的子元素进行排序
注意:1. 这里的必须是所有子元素里的第一个,而且是其所指的标签
2.这里不一定必须是上面的父子类元素,只是举例,以上列举的三种伪类只是针对选择第几个的!如以下举例。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>伪类</title>
<head>
<style>
div:child{
color:red;
}
</style>
</head>
</head>
<body>
<div>
这第一个div标签
</div>
<div>
这第二个div标签
</div>
<div>
这第三个div标签
</div>
<div>
这第四个div标签
</div>
<div>
这第五个div标签
</div>
<div>
这第六个div标签
</div>
</body>
</html>
-
表示同类元素进行排序
:first-of-type
:last-of-type
:nth-of-type()
— 这几个伪类的功能和上述的类似,不同点是他们是在同类型元素中进行 排序
注意:这里指的是所有子元素中同类型元素里面的第一个
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>伪类</title>
<sytle>
</sytle>
</head>
<body>
</body>
</html>
:first-child 匹配的是某父元素的第一个子元素,可以说是结构上的第一个子元素。并且满足标签所指。
:first-of-type 匹配的是该类型的第一个,类型是指什么呢,就是冒号前面匹配到的东西,比如 p:first-of-type,就是指所有p元素中的第一个。这里不再限制是第一个子元素了,只要是该类型元素的第一个就行了,当然这些元素的范围都是属于同一级的,也就是同辈的。
同样类型的选择器 :last-child 和 :last-of-type、:nth-child(n) 和 :nth-of-type(n) 也可以这样去理解。
-
超链接的伪类
:link 用来表示没访问过的链接(正常的链接)
:visited 用来表示访问过的链接(由于隐私原因,这个只能修改链接的颜色)
:hover 用来表示鼠标移入的状态
:active 用来表示鼠标点击
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>超链接的伪类</title>
<style>
a:link{
color:red;
}
a:visited{
color:green;
}
a:hover{
font-size:300px;
}
a:active{
color:orange;
font-size:600px;
}
</style>
</head>
<body>
<a href="https://www.baidu.com">百度链接</a><br/>
<a href="https://www.baidu.com">百度链接</a><br/>
</body>
</html>
-
伪元素
表示页面中一些特殊的并不真实的存在的元素(特殊的位置)
伪元素使用 :: 开头
::first-letter 表示第一个字母
::first-line 表示第一行
::selection 表示选中的内容
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>伪元素</title>
<style>
div::first-letter{
font-size:20px;
color:red;
}
p::first-line{
color:yellow;
}
.selection::selection{
color:green;
}
</style>
</head>
<body>
<div class="selection">
Hello Hello Hello
</div>
<p class="selection">
Lorem ipsum dolor sit amet consecteturadipisicing elit.Atque velit modi veniam nisi veritatis tempore laborum nemo ipsa itaque optio.Id odit consequatur mollitia excepturi,minus saepe nostrum vel porro.
</p>
</body>
</html>
六、继承
样式的继承,我们为一个元素设置的样式同时也会应用到它的后代元素上
继承是发生在祖先和后代之间的
继承的设计是为了方便我们的开发,
利用继承我们可以将一些通用的样式统一设置到公同的祖先元素上,
这样只需设置一次即可让所有的元素都具有该样式
注意:并不是所有的样式都会被继承
比如 背景相关的,布局相关等的这些样式都不会被继承
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>继承</title>
<style>
div{
color:red;/*可以被继承的属性*/
background-color:yellow;/*不可被继承的属性*/
}
</style>
</head>
<body>
<div>
这是一个div标签
<p>
这是一个p标签
<span>这是一个span标签</span>
</p>
</div>
</body>
</html>
七、选择器的权重
样式的冲突 :当我们通过不同的选择器,选中相同的元素,并且为相同的样式设置不同的值时,此时就发生了样式的冲突。
发生样式冲突时,应用哪个样式由选择器的权重(优先级)决定
选择器的权重
内联样式 1.0.0.0
id选择器 0.1.0.0
类和伪类选择器 0.0.1.0
元素选择器 0.0.0.1
通配选择器 0.0.0.0
继承的样式 没有优先级
比较优先级时:
1.需要将所有的选择器的优先级进行相加计算,最后优先级越高,则越优先显示(分组选择器是单独计算的);
2.选择器的累加不会超过其最大的数量级(即比如第四位相加,也不会加到影响第三位的数值),类选择器再高也不会超过id选择器;
3.如果优先级计算后相同,此时则优先使用靠下的样式。
可以在某一个样式的后边添加!important
,则此时该样式会获取到最高的优先级,甚至超过内联样式,注意:在开发中这个东西一定要慎用!