1.基础选择器
基础选择器是复合选择器的基础,一切骚操作都离不开基础选择器,所以这玩意儿必须掌握熟练。
简单分类和描述
我们以下面简单代码作为后续操作的基础
<body>
<div>
div: 我是div
<p>p: 我是p1</p>
<p>p: 我是p2</p>
<ul>
<li>li: 我是li1</li>
<li>li: 我是li2</li>
<li>li: 我是li3</li>
<li>li: 我是li4</li>
<li>li: 我是li5</li>
<li>li: 我是li6</li>
</ul>
</div>
</body>
1.1. 通配符选择器
“*”即代表通配符选择器,意思是指操控所有单元,后面的{}中键入所需要的写入的样式
语法
*{
#需要的样式
}
例:将所有文本内容设置为红色
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
<style>
* {
color: red;
}
</style>
</head>
<body>
<div>
div: 我是div
<p>p: 我是p1</p>
<p>p: 我是p2</p>
<ul>
<li>li: 我是li1</li>
<li>li: 我是li2</li>
<li>li: 我是li3</li>
<li>li: 我是li4</li>
<li>li: 我是li5</li>
<li>li: 我是li6</li>
</ul>
</div>
</body>
1.2.标签选择器
标签名即代表标签选择器,意思是指操控所指定的标签,后面的{}中键入所需要的写入的样式
语法
标签名{
#需要的样式
}
例:将所有li中文本设置为红色
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<style>
li {
color: red;
}
</style>
<body>
<div>
div: 我是div
<p>p: 我是p1</p>
<p>p: 我是p2</p>
<ul>
<li>li: 我是li1</li>
<li>li: 我是li2</li>
<li>li: 我是li3</li>
<li>li: 我是li4</li>
<li>li: 我是li5</li>
<li>li: 我是li6</li>
</ul>
</div>
</body>
1.3.类选择器
“.自定义类名” 即代表类选择器,意思是指操控所有具有对应类选择器名的标签,后面的{}中键入所需要的写入的样式。当然使用前,先要用class为标签取对应的类名,类选择器和id选择器能够精确的指定对应的标签,其灵活性是通配符选择器和标签选择器所不能比拟的。
样式
<ul class="自定义类名">
.自定义类名{
#需要的样式
}
例:为p1、p2分别设置不同颜色
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<style>
.txt1{
color:blue;
}
.txt2{
color:green;
}
</style>
<body>
<div>
div: 我是div
<p class="txt1">p: 我是p1</p>
<p class="txt2">p: 我是p2</p>
<ul>
<li>li: 我是li1</li>
<li>li: 我是li2</li>
<li>li: 我是li3</li>
<li>li: 我是li4</li>
<li>li: 我是li5</li>
<li>li: 我是li6</li>
</ul>
</div>
</body>
1.4.ID选择器
“#自定义id名” 即代表id选择器,意思是指操控所有具有对应id选择器名的标签,后面的{}中键入所需要的写入的样式。当然使用前,先要用id为标签取对应的id名,类选择器和id选择器能够精确的指定对应的标签,其灵活性是通配符选择器和标签选择器所不能比拟的。
样式
<ul id="自定义id名">
.自定义id名{
#需要的样式
}
id选择器与类选择器很很相似所以也能实现同样的功能
例:为p1、p2分别设置不同颜色
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<style>
#txt1{
color:blue;
}
#txt2{
color:green;
}
</style>
<body>
<div>
div: 我是div
<p id="txt1">p: 我是p1</p>
<p id="txt2">p: 我是p2</p>
<ul>
<li>li: 我是li1</li>
<li>li: 我是li2</li>
<li>li: 我是li3</li>
<li>li: 我是li4</li>
<li>li: 我是li5</li>
<li>li: 我是li6</li>
</ul>
</div>
</body>
1.5.id选择器和类选择器的区别
一个类选择器,是为所有具有相同类名的标签设置属性,可以使用很多次。
而一个ID 选择器,是为所有第一个具有id名的标签设置属性,只能使用一次。
当我们有一个样式需要在很多标签上使用时,一般用类选择器
当我们的样式在一个标签上使用时,一般使用id选择器.
例:区别
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<style>
.txt3{
color:red;
}
#txt1{
color:blue;
}
#txt2{
color:green;
}
</style>
<body>
<div>
div: 我是div
<p id="txt1">p: 我是p1</p>
<p id="txt2">p: 我是p2</p>
<ul>
<li class="txt3">li: 我是li1</li>
<li class="txt3">li: 我是li2</li>
<li class="txt3">li: 我是li3</li>
<li>li: 我是li4</li>
<li>li: 我是li5</li>
<li>li: 我是li6</li>
</ul>
</div>
</body>
2.选择器的权限等级
2.1.权限等级概念
权限等级问题是为了解决一个问题“当我们为一个标签设置多种样式时,结果会如何?”,作为一个编写代码者,必须要清楚自己写的每一句话是什么意思,不然很容易闹笑话。
同样的,我们先看一个例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<style>
*{
color:yellow;
}
p {
color:red;
}
#txt1{
color:blue;
}
.txt2{
color:green;
}
</style>
<body>
<div>
div: 我是div
<p id="txt1" class="txt2">p: 我是p1 缝合怪</p>
<p>p: 我是p2</p>
<ul>
<li>li: 我是li1</li>
<li>li: 我是li2</li>
<li>li: 我是li3</li>
<li>li: 我是li4</li>
<li>li: 我是li5</li>
<li>li: 我是li6</li>
</ul>
</div>
</body>
p1缝合怪最后呈现的颜色是蓝色,我们由此可知权限等级最高的是id选择器,其他方式的等级也可以如此测试,但这里就不卖关子了。
2.2.权限等级排序
id选择器>类选择器>标签选择器>通配符选择器
3.复合选择器
3.1.复合选择器概念
所谓复合选择器就是由多个基础选择器组成的选择器,复合选择器可以由各种各样的组合产生,使用复合选择器,更准确更精细地选择目标元素标签,减少冗余代码。
样式:
ul li {
#样式
}
当然复合选择器也不是简单就间隔一个空格就完了的,它还是有几个不同形式的,它们也对应了不同的功能,下面我们详细讲一讲
3.2.并集选择器
3.2.1.并集选择器介绍
功能:通过抽出重复代码,统一管理,实现减少代码冗余
先看代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<style>
#txt1{
color:blue;
}
#txt2{
color:blue;
}
</style>
<body>
<div>
div: 我是div
<p id="txt1">p: 我是p1</p>
<p id="txt2">p: 我是p2</p>
<ul>
<li>li: 我是li1</li>
<li>li: 我是li2</li>
<li>li: 我是li3</li>
<li>li: 我是li4</li>
<li>li: 我是li5</li>
<li>li: 我是li6</li>
</ul>
</div>
</body>
从css部分中我们可以看见#txt1和#txt2的样式是一样的,这里只是两个id选择器所以看不出啥,但要是有一百个一千个呢?那就显得臃肿了,所以为了减少这种冗余,并集选择器应运而生
3.2.2.并集选择器使用
其实很简单,也就是用“,”逗号把各个基础选择器分开而已。
.tx1,#txt2,ul,p,#{
#样式
}
知道并集选择器后我们来优化一下上面的代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<style>
#txt2,#txt1{
color:blue;
}
</style>
<body>
<div>
div: 我是div
<p id="txt1">p: 我是p1</p>
<p id="txt2">p: 我是p2</p>
<ul>
<li>li: 我是li1</li>
<li>li: 我是li2</li>
<li>li: 我是li3</li>
<li>li: 我是li4</li>
<li>li: 我是li5</li>
<li>li: 我是li6</li>
</ul>
</div>
</body>
就像你看到那样,代码功能是一样的,但省了代码,看起来更舒服也更方便管理
3.3. 交集选择器
3.3.1.交集选择器介绍
所谓交集选择器即是两个或多个选择器共同指定的部分,为的是精确指定目标。
样式
选择器1选择器2选择器3{
#样式
}
需要注意的是为了避免误会类选择器和id选择器一般不能放在最前面。如“#txtp”的实际含义就不是交集选择器,而是一个单纯的id选择器。
例
`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<style>
</style>
<body>
<div>
div: 我是div
<p class="txt1">p: 我是p1</p>
<h6 class="txt1">p: 我是p2</h6>
<ul>
<li>li: 我是li1</li>
<li>li: 我是li2</li>
<li>li: 我是li3</li>
<li>li: 我是li4</li>
<li>li: 我是li5</li>
<li>li: 我是li6</li>
</ul>
</div>
</body>
如上述代码所示,h6和p标签都有类名txt1,如何精确的类名为txt1的h6标签改变颜色呢?这里我们就可以用交集选择器。
3.3.2. 交集选择器使用
几种举例:
p#txt1{
#样式
}
p#txt1.txt2{
#样式
}
p#txt1{
#样式
}
下面我们解决最开始的问题。
`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<style>
h6.txt1{
color:blue;
}
</style>
<body>
<div>
div: 我是div
<p class="txt1">p: 我是p1</p>
<h6 class="txt1">p: 我是p2</h6>
<ul>
<li>li: 我是li1</li>
<li>li: 我是li2</li>
<li>li: 我是li3</li>
<li>li: 我是li4</li>
<li>li: 我是li5</li>
<li>li: 我是li6</li>
</ul>
</div>
</body>
3.4.子选择器(后代选择器)
3.4.1.子选择器概念
这里子的意思不是儿子女儿,而是被元素包含在内的元素,处于包含别人地位的元素称之为父元素,处于被别人包含地位的元素称之为子元素,这里要做的就是精确选中父元素的“子”当然“孙”也是可以的
样式
xx yy zz{
#样式
}
这里指定地点是xx下的yy下的zz
xx yy zz不好理解所以有更形象的
父元素 子元素 孙元素 曾孙元素{
}
3.4.2.子选择器使用
该讲的都讲了,来个实例吧
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<style>
.font .red{
color:red;
font-weight:block;
}
.font .blue{
color:blue;
font-weight:block;
}
.font .pink{
color:pink;
font-weight:block;
}
.font .brown{
color:brown;
font-weight:block;
}
.font .white{
color:white;
font-weight:block;
}
.font .yellow{
color:yellow;
font-weight:block;
}
</style>
<body>
<div class="font">
div: 我是div
<p class="red">p: 我是p1</p>
<p class="blue">p: 我是p2</p>
<ul>
<li class="pink">li: 我是li1</li>
<li>li: 我是li2</li>
<li class="brown">li: 我是li3</li>
<li class="yellow">li: 我是li4</li>
<li class="white">li: 我是li5</li>
<li>li: 我是li6</li>
</ul>
</div>
</body>
3.5.伪选择器
伪选择器,也称伪元素选择器,没错它是假的选择器,很假但又不是那么假,它假就假在它不能实际改变元素的样式,而是做一些小修饰,只是插入了一些修饰类的元素,这些元素对于用户来说是可见的,但是对于HTML来说不可见。当我们想要不通过HTML来设计,仅仅需要在某个标签前后做一点小小的装饰的时候,可以使用伪元素选择器。
div::before {
content:""; # 这个必须写,没有就赋空值
#content的属性
....
}
div::after {
content:""; # 这个必须写,没有就赋空值
#content的属性
....
}
伪选择器就像爬山虎,自己是没有骨头的,只能寄生在别的已经存在标签上才能显现,before和after则是表示它寄生的位置,在前还是在后
url可以设置图片,attr可以获取属性值
来个梨子(before和after):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<style>
div::before{
content:"我是content";
}
</style>
<body>
<div>
div: 我是div
<p>p: 我是小明</p>
<p>p: 我是小兰</p>
<p>p: 我是小樱</p>
</div>
</body>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<style>
div::after{
content:"你是个铲铲";
}
</style>
<body>
<div>
div: 我是div
<p>p: 我是小明</p>
<p>p: 我是小兰</p>
<p>p: 我是小樱</p>
</div>
</body>
来张图片的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<style>
div::after{
content:url(../image/OIP-CAXZZBDKG.jpg);
}
</style>
<body>
<div>
div: 是猫猫我呀!
</div>
</body>
来张取属性名的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<style>
div::after{
content:attr(id);
}
</style>
<body>
<div id="喵喵!">
div: 是猫猫我呀!
</div>
</body>