CSS选择器
一、基本选择器
1、id选择器
#1、作用:
根据指定的id名称,在当前界面中找到对应的唯一一个标签,然后设置属性
#2、格式
id名称{
属性:值;
}
#3、注意点:
1、企业开发中,仅仅为了设置样式一般不会使用id,(前端开发中id一般是留给js使用的)
2、每个标签都可以设置唯一一个id,id就像是一个生份证,因此同一界面的id不能重复使用
3、引用id要加#
4、id的命名只能由字符、数字、下划线组成,不能以数字开头,不能使用关键字如html、a、img等
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#p1 {
color: red;
}
#p2 {
color: green;
}
</style>
</head>
<body>
<p id="p1">两只黄鹂玩皮球</p>
<p id="p2">一行白鹭上西天</p>
</body>
</html>
2、类选择器
#1、作用:根据指定的类的名称,在当前界面中找到对应的标签,然后进行设置
#2、格式:
.类名称{
属性:值;
}
#3、注意点:
1、类名就是专门用来给某个特定的标签设置样式的
2、每个标签都可以设置一个或者多个class(空格分隔),class就相当于人/标签的名称,因此同一界面内class可以重复
3、引用class一定要加.
4、class命名规则与id的一样
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.p1 {
color: red;
}
.p2 {
font-size: 30px;
}
.p3 {
text-decoration: underline;
}
</style>
</head>
<body>
<p class="p2 p1">一行白鹭上西天</p>
<p class="p3 p2">两只黄鹂玩皮球</p>
<p class="p1 p3">一枝红杏出墙来</p>
</body>
</html>
3、标签选择器
#1、作用:根据指定的标签名称,在当前界面中找到所有该名称的标签,设置属性
#2、格式:
标签名称{
属性:值;
}
#3、注意点:
1、只要是html的标签都能当做标签选择器
2、标签选择器选中的只是当前界面中的所有标签,而不能单独选中某一标签
3、无论嵌套多少层,标签选择器都能选中
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>标签选择器</title>
<style type="text/css">
p {
color:red;
}
</style>
</head>
<body>
<p>两岸猿声啼不住</p>
<ul>
<li>
<ul>
<li>
<p>轻舟已过万重山</p>
</li>
</ul>
</li>
</ul>
</body>
</html>
<!--(两句文字都是显示红色)-->
4、通配符选择器
#1、作用:选择所有标签
#2、格式:
* {
属性:值;
}
#3、注意点:
企业开发中一般不使用通配符选择器,因为通配符选择器是设置界面上所有的标签的属性,所以在设置之前会会遍历所有的标签,性能和效率很差
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>通配符选择器</title>
<style>
* {
color:red;
}
</style>
</head>
<body>
<h1>标题</h1>
<p>段落</p>
<a href="#">点击带你去神秘的地方</a>
</body>
</html>
二、组合选择器
1、后代选择器
#1、作用:找到指定标签的所有后代标签,设置属性
#2、格式:
标签名1 xxx {
属性:值;
}
#3、注意:
1、后代选择器必须用空格隔开
2、后代不仅仅是儿子,也包括孙子、重孙子...
3、后代选择器不仅仅可以使用标签名称,还可以使用其他选择器如id或者class
4、后代选择器可以通过空格一直延续下去
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>后代选择器</title>
<style>
div p {
color:red;
}
div ul li a {
color: green;
}
</style>
</head>
<body>
<p>111</p>
<div>
<ul>
<li>
<p>222</p>
<a href="#">点击1</a>
<p>333</p>
<ul>
<li>
<p>444</p>
</li>
</ul>
<a href="#">点击2</a>
</li>
</ul>
</div>
<p>555</p>
</body>
</html>
2、子元素选择器
#1、作用:找到指定标签的所有特定的直接子元素,然后设置属性
#2、格式:
标签名1>标签名2 {
属性:值;
}
先找到名称叫做"标签名称1"的标签,然后在这个标签中查找所有直接子元素名称叫做"标签名称2"的元素
#3、注意点:
1、子元素选择器之间需要需要使用>连接,不能有空格(比如div >p会找div标签的所有后代标签,标签名为">p")
2、子元素选择器只会查找儿子,不会查找其他嵌套的标签
3、子元素选择器不仅可以用标签名称,还可以使用其他选择器,比如id或class
4、子元素选择器可以通过>符号一直延续下去
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>子元素选择器</title>
<style>
body>div>p {
color:red;
}
.aaa>a {
color:purple;
}
</style>
</head>
<body>
<p>111</p>
<div>
<p>222</p>
<ul>
<li>
<p>333</p>
</li>
</ul>
</div>
<ul>
<li class="aaa">
<a href="#">点击</a>
</li>
</ul>
</body>
</html>
3、毗邻选择器(/相邻兄弟选择器,CSS2推出)
#1、作用:选定紧邻其后的那个标签
#2、格式
选择器1+选择器2 {
属性:值;
}
#3、注意点:
1、毗邻选择器必须通过+号链接
2、毗邻选择器只能选中紧跟其后的那个标签,不能选中被隔开的标签
4、弟弟选择器(/通用兄弟选择器,CSS3推出)
#1、作用:给指定选择器后面的所有选择器中国的所有标签设置属性
#2、格式:
选择器1~选择器2 {
属性:值;
}
#3、注意点:
1、通用兄弟选择器必须用~来链接
2、通用兄弟选择器选中的是指选择器后面的某个选择器选中的所有标签(无论有没有被隔开,都可以被选中)
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>兄弟选择器</title>
<style>
h1 + p {
font-size: 30px;
}
h3 ~ p {
color: red;
}
</style>
</head>
<body>
<h1>锦瑟</h1>
<hr>
<p>李商隐</p>
<h3>唐</h3>
<p>此情可待成追忆</p>
<p>只是当时已惘然</p>
</body>
</html>
三、交集选择器与并集选择器
1、交集选择器(不常用)
#1、作用:给所有选择器选中的标签内的相交的那部分标签设置属性】
#2、格式:
选择1选择器2 {
属性:值;
}
#3、注意:
1、选择器与选择器之前没有任何连接符号
2、选择器可以使用标签名称、id、class
3、交集选择器在企业开发中并不多见,了解即可(因为:p.part1 完全可以用.part1取代)
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>交集选择器</title>
<style>
p.part1 {
color: red;
}
p#p1 {
font-size: 30px;
}
</style>
</head>
<body>
<p class="part1">段落1</p>
<p>段落2</p>
<p id="p1">段落3</p>
<p>段落4</p>
</body>
</html>
2、并集选择器
#1、作用:给所有满足条件的标签设置属性
#2、格式:
选择器1,选择器2 {
属性:值;
}
#3、注意:
1、选择器与选择器之间必须用逗号来链接
2、选择器可以使用标签名称、id、class
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>并集选择器</title>
<style>
p, .p1, a, h1 {
color: red;
}
</style>
</head>
<body>
<h1>选择器</h1>
<h2>并集选择器</h2>
<p>111</p>
<p class="p1">222</p>
<ul>
<li>
<a href="#">点击</a>
</li>
</ul>
</body>
</html>
四、序列选择器
#1、作用:
CSS3中新推出的选择器中,最具代表性的10个,又被称为序列选择器,
过去的选择器中要选中某个必须加id或class,有了这10个后,不用加id或class,想选中同级别的第几个就选第几个
#2、格式
#2.1 同级别 (指定序列的必须还要是指定的类型,否则无法选中)
:first-child 同级别的第一个
:last-child 同级别的最后一个
:nth-child(n) 同级别的第n个
:uth-last-child(n) 同级别倒数第n个
#2.2 同级别同类型
:first-of-type 同级别同类型的第一个
:last-of-type 同级别同类型的最后一个
:nth-of-type(n) 同级别同类型的第n个
:nth-last-of-type(n) 同级别同类型的倒数第n个
#2.3 其他
:only-of-type 同类型的唯一一个
:only-child 同级别的唯一一个
示例一:(同级别)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>序列选择器</title>
<style>
p:first-child {
color: red;
}
</style>
</head>
<body>
<h1>序列选择器</h1>
<p>111</p>
<p>222</p>
<p>333</p>
<ul>
<li>
<p>444</p>
</li>
</ul>
</body>
</html>
示例二:(同级别同类型)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>序列选择器</title>
<style>
p:first-of-type {
color: red;
}
</style>
</head>
<body>
<h1>序列选择器</h1>
<p>111</p>
<p>222</p>
<p>333</p>
<ul>
<li>
<p>444</p>
<p>555</p>
</li>
</ul>
</body>
</html>
示例三:(only-of-type)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>序列选择器</title>
<style>
p:only-of-type {
color: red;
}
</style>
</head>
<body>
<h3>序列选择器</h3>
<p>111</p>
<p>222</p>
<p>333</p>
<ul>
<li>
<p>444</p>
</li>
</ul>
<ul>
<li>
<p>555</p>
</li>
</ul>
</body>
</html>
示例四:(only-child)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>序列选择器</title>
<style>
p:only-child {
color: red;
}
</style>
</head>
<body>
<h4>同级别唯一一个</h4>
<p>111</p>
<ul>
<li>
<p>222</p>
</li>
</ul>
<ul>
<li>
<p>333</p>
</li>
</ul>
</body>
</html>
五、属性选择器
#1、作用:根据指定的属性名称找到对应的标签,然后设置属性
常用于input标签
#2、格式与具体用法
[属性名]
其他选择器[属性名]
[属性名=值]
[属性名^=值]
[属性名$=值]
[属性名*=值]
#3、示例:
1、找到所有包含id属性的标签
[id]
2、找到所有包含id属性的p标签
p[id]
3、找到所有class属性值为part1的p标签
p[class="part1"]
4、找到所有href属性以“https”开头的a标签
a[herf=^"https"]
5、找到所有src属性值以png结尾的img标签
img[src$="png"]
6、找到所有class属性值中包含part2的标签
[class*="part2"]
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>属性选择器</title>
<style>
[id] {
color:red;
}
p[id] {
font-size: 30px;
}
p[class="part1"] {
color: green;
}
a[href^="https"] {
color:purple;
}
img[src$="png"] {
width: 200px;
}
[class*="part"]
</style>
</head>
<body>
<h1 id="id1">属性选择器</h1>
<p id="id2">段落1</p>
<p class="part1">段落2</p>
<p class="xx part2 yy">段落3</p>
<a href="#">点击</a>
<a href="http://www.baidu.com">百度</a>
<a href="https://www.baidu.com">百度一下</a>
<img src="aaa.png" alt="">
</body>
</html>
六、伪类选择器
#1、常用的几种伪类选择器
#1.1 没有访问过的超链接a标签样式
a:link {
color:blue;
}
#1.2 访问过的超链接a标签样式
a:visited {
color:gray;
}
#1.3 鼠标悬浮在元素上应用样式:
a:hover {
background-color: blue;
}
#1.4 鼠标点击瞬间的样式:
a:active {
color: green;
}
#1.5 input输入框获取焦点时的样式
input:focus {
outline: none;
background-color: yellow
}
#2、注意:
1、a标签的伪类选择器可以单独出现,也可以一起出现
2、a标签的伪类选择器如果一起出现,有严格的顺序要求,否则失效
link,visited, hover,active
3、hover是所有其他标签都能用的
4、focus只能给input标签使用
示例:
<style>
a:link {
color: red;
}
a:visited {
color: #55BBBB;
}
a:hover {
color: green;
}
a:active {
color: red;
}
input:hover {
outline:none;
background-color: gray;
}
</style>
七、伪元素选择器
#1、常用的伪元素:
#1.1 first-letter: 杂志文章首字母样式调整
示例:
p:first-letter {
font-size: 40px;
}
#1.2 before
用于在元素的内容前面插入新内容
示例:在所有p标签内容前面加上一个红色的¥
p:before {
content: "¥";
color:red;
}
#1.3 after
用于在元素的内容后面插入新内容
例如:在所有p标签的内容后面加上一个绿色的$。
p:after {
content:"$";
color: green;
}
八、CSS三大特性
1、继承性
#1、定义:给某个元素设置一些属性,钙元素的后代也可以使用,这个我们称之为继承性
#2、注意:
① 只有以color、font-、text-、line-开头的属性才可以继承
② a标签的文字颜色和下划线是不能继承别人的
③ h标签的文字大小是不能继承别人的,会变大,但是会在原来字体大小的基础上变大
PS:打来浏览器审查元素可以看到一些inherited from... dse 属性
#3、应用场景:
同常基于继承性统一设置网页的文字颜色、字体、文字大小等样式
2、层叠性
#1、指的是CSS处理冲突的一种能力,即如果有多个选择器选中了同一个标签那么就会有覆盖效果
#2、注意:
① 层叠性只有在多个选择器选中了同一个标签,然后设置了同样的属性,才会发生层叠性
② 通过Chrome浏览器可以查看到,一些属性被花掉了(被覆盖了)
3、优先级
# 定义:当多个选择器选中同一个标签,并且给同一个标签设置了相同的属性时,如何层叠就由优先级来确定
#优先级:
整体优先级从高到低:行内样式>嵌入样式>外部样式
行内样式不推荐使用,所以以嵌入式为例介绍优先级
# 1、大前提:直接选中>间接选中(即继承而来的)
# 2、如果都是间接选中,那么谁离目标比较近,就使用谁的
# 3、如果都是直接选中,并且都是同类型的选择器,那么就是谁写的在后面就使用谁的
# 4、如果都是直接选中,并且是不同类型的选择器,那么会按照选择器的优先级来层叠
id>类>标签>通配符(也算是直接选中)> 继承>浏览器默认(即没有任何属性设置)
# 5、优先级之 !important
作用:强制指定的属性优先级提升为最高。 不推荐使用的原因:大量使用!important代码会打破原有的秩序,难以维护
注意:
- !important只能用于直接选中,不能用于间接选中
- !important只能用于提升被指定属性的优先级,其他属性的优先级不会被提升
- !important必须写在属性分号的前面
#6、优先级之权重计算
- 强调:如果都是直接选中,并且混杂可一系列其他的选择器一起使用时,则需要通过计算机权重来判定优先级
- 计算方式:
① id数多的优先级高
② id数相同,则判定类数多的优先级高
③ id数、类数均相同时,则判定标签数多的优先级高
④ id数、class数、标签数相同时,谁写在后面谁的优先级高