一、什么是选择器
选择器是指通过一定的语法规则选取到对应的HTML标记,然后给这个对应的HTML标记设置样式
二、选择器的分类
CSS中提供了多种不同类型的选择器,例如基本选择器、组合选择器、伪类选择器、伪元素选择器等等。
1、基本选择器
(1)概览
- 在CSS中,选择器用于选取HTML文档中的元素。
- 根据选择器的类型和语法的不同,可以选择不同的元素。
- 常用的有id选择器、类选择器、元素/标签选择器和通用选择器。
选择器 |
格式 |
含义 |
缺点 |
举例 |
id选择器 |
#id属性值 |
id选择器可以为标有特定的ID的HTML元素指定特定的样式,只能使用一次,ID选择器以“#”来定义。 |
只能使用一次 |
#title |
类选择器 |
.class属性值 |
类选择器,给拥有指定的CLASS属性值的元素设置样式 |
可以根据需求选择 |
.box |
元素/标签选择器 |
标签名 |
标签选择器,匹配对应的HTML标签。 |
不能差异化选择 |
p |
通用选择器 |
* |
通用选择器,将匹配HTML所有标签。 |
选择的太多,有部分不需要 |
* |
(2)id选择器
- 通过元素的id属性进行选取。
- 每个页面中id值是唯一的,所以在css中最好不重复使用id选择器。
| <style> |
| |
| #d1 { |
| color: greenyellow; |
| } |
| </style> |
(3)类选择器
类选择器可以根据标签的 class 属性匹配具体的 HTML 标签,所有符合条件的标签都会根据选择器内的样式进行格式化。类选择器的定义需要用到一个英文的句号.,后面紧跟 class 属性的值,如下所示:
.black选择器能够匹配文档中所有具有class="black"属性的标签。
由于 class 属性不是唯一的,可以应用于不同的标签,因此您还可以在定义类选择器时指定具体的标签,如下所示:
p.black选择器仅会将其中的样式应用到所有具有class="black"属性的标签中,对于其它的具有class="black"属性的标签则没有影响。
另外,一个 HTML 标签中 class 属性可能不止一个,例如:
| <p class="info selected"></p> |
| <p class="info"></p> |
假如我们要为所有 class 属性包含 info 的元素设置粗体,为所有 class 属性包含 selected 的元素设置红色字体,为 class 属性中既包含 info 又包含selected 的元素设置蓝色背景,则可以写成下面这样:
| .info { |
| font-weight:bold; |
| } |
| .selected { |
| color: red; |
| } |
| .info.selected { |
| background: blue; |
| } |
这种由多个 class 属性值所组成的类选择器我们可以称之为“多类选择器”,而前面介绍的由单个 class 属性值定义的类选择器可以称为“单类选择器”。
注意:多类选择器中,多个 class 属性之间是紧挨着的(例如 .info.selected),不需要使用空格分开。
(4)元素/标签选择器
- 通过元素的标签名称进行选取。
- 比如选择所有的段落、列表等。
| <style> |
| |
| span { |
| color: green; |
| } |
| </style> |
(5)通用选择器
| <style> |
| |
| * { |
| color: blue; |
| } |
| </style> |
(6)总体应用实例
| <!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> |
| <style> |
| |
| #myH1 { |
| color: red; |
| } |
| |
| |
| .title { |
| font-size: 24px; |
| } |
| |
| .content { |
| line-height: 1.5; |
| } |
| |
| |
| p { |
| color: blue; |
| } |
| |
| ul { |
| list-style-type: none; |
| } |
| |
| |
| * { |
| margin: 0; |
| padding: 0; |
| } |
| </style> |
| </head> |
| <body> |
| <h1 id="myH1">Hello, World!</h1> |
| <p class="title">This is a title.</p> |
| <p class="content">This is a content.</p> |
| <ul> |
| <li>This is a list item.</li> |
| <li>This is another list item.</li> |
| </ul> |
| </body> |
| </html> |
在上面的示例中,我们创建了一个包含一个id为"myH1"的标题、两个类分别为"title"和"content"的段落以及一个无序列表的HTML文档。
2、组合选择器
(1)概览
选择器 |
格式 |
含义 |
举例 |
后代元素选择器 |
E F |
后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分隔 |
div span |
儿子元素选择器 |
E>F |
子元素选择器,匹配所有E元素的子元素F |
div>span |
毗邻元素选择器 |
E+F |
毗邻元素选择器,匹配所有紧随E元素之后的同级元素F,同级别紧挨着的下面第一个 |
div+span |
弟弟元素选择器 |
E~F |
弟弟元素选择器,匹配所有E元素之后的所有元素F |
div~span |
(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是爷爷(可以将div1和div2统称为祖先)
- 对于span2来说:div2、p2是哥哥 span2是弟弟
- div1内部所有的标签无论层级都可以称之为是div1的后代
ps:判断的时候一定要看层级关系
(3)样式设计实例
| |
| d1 > span { |
| |
| color: red; |
| } |
| |
| |
| d1 span { |
| |
| color: red; |
| } |
| |
| |
| d1 + a { |
| |
| color: red; |
| } |
| |
| |
| d1 ~ a { |
| |
| color: red; |
| } |
3、属性选择器
(1)概览
- 含有某个属性
- 含有某个属性并且有某个值
- 含有某个属性并且有某个值的某个标签
attr是英文单词 “attribude”的简写,中文意思 “属性” 属性名
val是英文单词 “value”的简写,中文意思是“值” 属性值
属性选择器种类 |
含义 |
举例 |
[attr] |
匹配所有具有attr属性的元素,不考虑它的值 |
[align] |
[attr = "val"] |
匹配所有attr属性值等于val的元素 |
[align="center"]{.....},属性值一般加引号 |
标签 [attr = "val"] |
匹配所有attr属性值等于val的元素的标签 |
input [align="center"] |
(2)实例
| <style> |
| |
| [username] { |
| background-color: red; |
| } |
| |
| |
| [username='xiao'] { |
| background-color: orange; |
| } |
| |
| |
| input[username='xiao'] { |
| background-color: bisque; |
| } |
| </style> |
4、分组与嵌套
(1)分组
| |
| div, p, span { |
| color: red; |
| } |
(2)嵌套
| |
| #d1, .c1, span { |
| color: red; |
| } |
(3)综合
玩法1
| div#d1 查找id是d1的div标签 |
| div.c1 查找class包含c1的div标签 |
玩法2
| div #d1 查找div内部id是d1的后代标签 |
| #d1>.c1 查找id是d1的内部class包含c1的儿子标签 |
5、伪类选择器
(1)概览
标签属性 |
含义 |
状态 |
元素/标签 : link |
向未被访问的链接添加样式 |
正常状态 |
元素/标签 : visited |
向已被访问的链接添加样式 |
访问过后状态 |
元素/标签 : hover |
当鼠标悬浮在元素上方时,向元素添加样式 |
鼠标放上状态 |
元素/标签 : active |
鼠标放在元素上面时,点击的一瞬间 |
激活状态 |
input : focus |
input框获取焦点(鼠标点击了input框) |
聚焦状态 |
(2)实例
| <style> |
| a:link{ |
| color: #f00; |
| } |
| a:visited{ |
| color: #000; |
| } |
| a:hover{ |
| color: gold; |
| } |
| a:active{ |
| color: #0f0; |
| } |
| input:focus { |
| background-color: blue; |
| } |
| |
| </style> |
| <body> |
| <a href="http://www.bilibili.com">哔哩哔哩</a> |
| <a href="http://www.douyu.com">斗鱼</a> |
| <a href="http://www.123.com">123</a> |
| <input type="text"> |
| </body> |
(3)a链接的属性实现顺序
- 超级链接的不同状态它其实是有顺序的,也就是说伪类选择器设置其实是有顺序的。如果不按照伪类选择器的顺序,那么样式就会失效。
顺序:要遵循 “爱恨法则” 要先有爱,才有恨。“love hate”。
- l :link
- v:visited
- h:hover
- a:active
6、伪元素选择器
(1)使用方法
| |
| p:first-letter { |
| color: red; |
| font-size: 48px; |
| } |
| |
| |
| p:before { |
| content: '哈哈'; |
| color: blue; |
| } |
| |
| |
| p:after { |
| content: '嘿嘿'; |
| color: yellow; |
| } |
(2)应用场景
三、基本选择器优先级
- 选择器相同,书写顺序不同
- 选择器不同...
- 行内 > id选择器 > 类选择器 > 标签选择器
- 选择器不同的情况下,精确度越高越有效
| ## 行内 > id选择器 > 类选择器 > 标签选择器 |
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>Title</title> |
| |
| <style> |
| #d1 { |
| color: orange; |
| } |
| .c1 { |
| color: blueviolet; |
| } |
| p { |
| color: red; |
| } |
| </style> |
| <!-- <link rel="stylesheet" href="mycss.css">--> |
| </head> |
| <body> |
| <p id="d1" class="c1" style="color: blue">下一个更乖</p> |
| </body> |
| </html> |
| |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)