视频加载失败

CSS3基础和选择器

3445 字
17 分钟
CSS3基础和选择器

前言#

CSS3是前端简单又不简单的知识内容,简单的是语法,不简单的是其选择器,属性和属性值非常多,学好CSS3是网页布局中尤为关键的一步,页面美观,有没有样式冲突Bug,都看CSS3的基础知识是否牢固;

CSS3可以分为以下几个阶段:基础概念、选择器、文本属性、盒模型、浮动、定位、边框、圆角、背景渐变、2D与3D转换,过渡与动画,当然还有后续的Flex + Grid + 响应式+单位与尺寸,这些在移动Web端讲解。

学习CSS3不应该背属性和属性值,应该先学结构->再学布局->再学视觉->最后学增强效果,现在学习的就是知识内容,先把基础该学的学完,在深入研究自学,完全不看视频,编写样式,提升更快

学习目标#

本文只学习CSS3的基础概念和选择器部分,熟练掌握选择器有哪些,选择器在日常开发中一般不会用到很复杂,但是至少遇到要看得懂

CSS3基础概念#

简介:CSS(cascading style sheet,层叠式样式表)是用来给 HTML标签添加样式的语言;CSS3是CSS的最新版本,增加了大量的样式、动画、3D特 效和移动端特性等

CSS使样式和结构分离:CSS使样式和结构分离,样式和结构不用“杂糅着写”,而 是彼此分开:HTML就负责结构,CSS负责样式;HTML和CSS怎么结合呢?“选择器”就是两者的纽带

CSS的本质:CSS就是样式的“清单”,要书写合适的选择器,然后把指 定元素的样式“一条一条罗列”出来;CSS没有加减乘除、与或非、循环、选择、判断,CSS不是 “编程” ,就是简单直接的罗列样式;背诵CSS属性是非常重要的,属性背诵熟练程度决定了做网 页的速度

CSS的书写位置:内嵌式、外链式、导入式

基本语法: 选择器,大括号,KV值;最后一条样式可以不书写分号;可以没有换行

标签选择器#

  • 标签选择器也称元素选择器、类型选择器,它直接使用元素 的标签名当做选择器,将选择页面上所有该种标签
  • 标签选择器将选择页面上所有该种标签,无论这个标签所处 位置的深浅
  • 标签选择器“覆盖面”非常大,所以通常用于标签的初始化

示例:

index.html
<style>
h1 {
color: red;
}
</style>
<h1>我是h1</h1>
<div>
<h1>我是div下的h1</h1>
</div>

页面上所有的h1标签字体都会变成红色,所以说“覆盖面”非常大,为什么说初始化呢,因为如果写div h1 这样的选择器,字体就可以自定义颜色,而不是红色,新定义的覆盖之前的

id选择器#

  • 标签可以有id属性,是这个标签的唯一标识,同一个页面上不能有相同id的标签
  • id的名称只能由字母、数字、下划线、短横构成,且不能以 数字开头,字母区分大小写,但习惯上一般为小写字母
  • CSS选择器可以使用井号#前缀,选择指定id的标签

示例:

index.html
<style>
#_para1 {
color: red;
}
</style>
<h1 id='_para1'>我是h1</h1>
<div>
<h1>我是div下的h1</h1>
</div>

页面上的“我是h1”就会变成红色字体,关于id选择器有以下几点记住:唯一性,选择器使用井号#前缀和id的名称组成,不能数字开头

class选择器#

  • class属性表示“类名”
  • 类名的命名规范和id的命名规范相同
  • 使用点.前缀选择指定class的标签
  • 多个标签可以使用相同类名 [多(标签)对一(类名)]
  • 同一个标签可以使用属于多个类,类名用空格隔开 [一(标签)对多(类名)]

示例:

index.html
<style>
.para1 {
color: red;
}
.para2 {
background-color: burlywood;
}
</style>
<h1 class='para1 para2'>我是h1</h1>
<div>
<h1 class='para1'>我是div下的h1</h1>
</div>

页面字体都是红色,但是只有“我是h1”有背景颜色,这就是class的应用

复合选择器#

复合选择器可以分为以下三种:

选择器名称示例示例的意义说明
后代选择器.box .spec选择类名为box的标签内部的类 名为spec的标签特点就是空格
交集选择器li.spec选择既是li标签,也属于spec 类的标签特点就是没有空格逗号,全部写在一起
并集选择器ul, ol选择所有ul和ol标签特点就是逗号

想理解这三个其实有点困难,每个字都能看到理解,但是看到还是想一下,特别是后代和交集,区别就是一个空格。接下来用示例巩固这三个选择器

第一题:哪些 <p> 会变成红色?

<div class="box">
<p>第一段</p>
<section>
<p>第二段</p>
</section>
</div>
<p>第三段</p>
.box p {
color: red;
}
查看答案与解析

答案:第一段和第二段

  • box p 表示选择 .box 内部所有层级的 p,所以第一段和第二段都会匹配。

第二题:下面哪个 CSS 表示“选择 .article 里面的所有 <strong> 元素”?

A. .article, strong
B. .article strong
C. .articlestrong
D. .article.strong
查看答案与解析

答案:B

  • 两个选择器之间的空格表示后代关系,因此会选择 .article 内部任意层级的 strong。

第三题:结果是什么?

<ul class="menu">
<li><a href="#">首页</a></li>
<li><span><a href="#">关于</a></span></li>
</ul>
.menu a {
color: blue;
}
查看答案与解析

答案:两个 a 都变蓝

  • 两个 a 无论嵌套一层还是多层,都位于 .menu 内部,因此都会匹配 .menu a。

第四题:哪个元素会变红?

<p class="active">A</p>
<div class="active">B</div>
<p>C</p>
p.active {
color: red;
}
查看答案与解析

答案:只有 A

  • p.active 要求同一个元素既是 p,又具有 active 类,因此只有 A 符合。

第五题:下面哪个选择器表示“选择同时拥有 btn 和 primary 两个 class 的元素”?

A. .btn .primary
B. .btn + .primary
C. .btn, .primary
D. .btn.primary
查看答案与解析

答案:D

  • 两个类选择器连续书写且没有空格,表示同一个元素同时拥有 btn 和 primary 两个类。

第六题:哪个元素会被选中?

<h2 class="title big">标题1</h2>
<h2 class="title">标题2</h2>
<p class="title big">标题3</p>
h2.title.big {
color: red;
}
查看答案与解析

答案:只有标题1

  • 标题1同时满足三个条件:标签是 h2,并且具有 title 和 big 两个类。

第七题:这段代码表示什么?

h1, h2, p {
color: red;
}
查看答案与解析

答案:同时选择所有 h1、所有 h2 和所有 p

  • 逗号用于组合多个独立选择器,相当于给它们应用同一组 CSS 样式。

第八题:如果希望“.title 和 .content 两类元素的文字都变成黑色”,应该怎么写?

查看答案与解析

答案:.title, .content { color: black; }

  • 逗号把两个独立选择器组合起来,因此 .title 和 .content 都会应用相同样式。

第九题:下面三个选择器含义完全不同:

.box p
.box.p
.box, p

哪组选项对应正确?

A. 后代选择器、并集选择器、交集选择器
B. 交集选择器、后代选择器、并集选择器
C. 后代选择器、交集选择器、并集选择器
D. 并集选择器、交集选择器、后代选择器
查看答案与解析

答案:C

  • .box p 中的空格表示后代;.box.p 连续书写表示同一元素同时具有两个类;.box, p 中的逗号表示并集。

最值得死记的其实就这一行:

.box p /* 空格:后代 */
.box.active /* 紧挨:交集 */
.box, p /* 逗号:并集 */

这三个能一眼区分,后面大部分复合选择器就不会再搅成一锅 CSS 粥了。

伪类#

CSS的伪类目前有60多个,而且随着 CSS 标准继续发展,还会新增,所以不能死记硬背,但是也不能只记住hover、active、link 、visited 或者first-child等这些,应该拓宽思路;其中序号选择器也属于伪类的一种

伪类是选择器后加单个冒号,看到伪类,应该有这样的一个问题:它在描述元素的什么状态或条件 ,伪类几乎所有标签能用,但不是所有,要想一下:这个元素有没有这个状态? 比如div这个标签,没有focus这个状态,设置了也没用,以下是常用的伪类

伪类作用
:hover鼠标悬停
:active鼠标按下
:focus获得焦点
:first-child第一个子元素
:last-child最后一个子元素
:nth-child()第 N 个子元素
:checked被选中的表单元素
:disabled被禁用
:not()排除元素
:has()根据内部元素匹配

伪类:序号选择器:

举例意义
:first-child第一个子元素
:last-child最后一个子元素
:nth-child(3)第3个子元素
:nth-last-child(3)倒数第3个子元素
:nth-of-type(3)第3个某类型子元素
:nth-last-of-type(3)倒数第3个某类型子元素

元素关系选择器#

字如其意,其实就是标签与标签之前的关系

名称举例意义
子选择器div>p嵌套包含关系,只嵌套的第一层只要是div下的子标签p都选中,
相邻兄弟选择器img+p平级关系,图片后面紧跟着的段落将被选中,但凡中间隔了几个标签都不会选中
通用兄弟选择器p~span平级关系,p元素之后的所有同层级span元素 p不会被选中

子选择器

  • 当使用 > 符号分隔两个元素时,它只会匹配那些作为第一 个元素的直接子元素,即两个标签为父子关系
  • 子选择器从IE7开始兼容

相邻兄弟选择器

  • 写法:+ 写在两个选择器之间。
  • 两个元素必须是兄弟元素,也就是拥有同一个父元素,平级的关系。
  • +后面的元素被选中
  • 相邻兄弟选择器从IE7开始兼容

通用兄弟选择器

  • 通用兄弟选择器(),ab 选择a元素之后所有同层级b元素
  • 通用兄弟选择器从IE7开始兼容

属性选择器#

核心就 7 种常用写法,这里的attr是一个代词,不是什么属性,是代表某某属性

写法含义示例
[attr]有这个属性就选中[disabled]
[attr="value"]属性值完全等于某值[type="text"]
[attr~="value"]属性值是空格分隔的一组词,其中包含某个完整词[class~="active"]
`[attr=“value”]`等于某值,或者以 value- 开头
[attr^="value"]属性值以某内容开头[href^="https"]
[attr$="value"]属性值以某内容结尾[href$=".pdf"]
[attr*="value"]属性值中包含某段内容[href*="google"]

伪元素#

它们并没有真的往 HTML 里面添加两个标签,而是 CSS 创建出来的“虚拟元素”;最常见的是这些:

伪元素作用
::before在元素内容前插入“虚拟内容”
::after在元素内容后插入“虚拟内容”
::first-letter选中第一个字母/字符
::first-line选中第一行文字
::selection选中文字时的样式
::placeholder输入框占位文字
::marker列表前面的项目符号/编号
::file-selector-button文件上传按钮
::backdrop全屏、dialog 后面的遮罩层

层叠性和选择器权重计算#

层叠性

  • CSS全名叫做“层叠式样式表” ,层叠性是它很重要的性质
  • 层叠性:多个选择器可以同时作用于同一个标签,效果叠加

层叠性的冲突处理

  • 如果多个选择器定义的属性有冲突呢?CSS有严密的处理冲 突的规则
  • id权重 > class权重 > 标签权重

复杂选择器权重计算

  • 复杂选择器可以通过(id的个数, class的个数, 标签的个 数)的形式,计算权重

!important提升权重

  • 如果我们需要将某个选择器的某条属性提升权重,可以在属 性后面写!important
  • 很多公司不允许使用!important,因为这会带来不经意的 样式冲突

拓展选择器练习题#

可以ChatGptt提问:给我5道关于CSS3选择器的综合练习题,这5道要有特点,能答对基本就对CSS3的选择器有很大的掌握

拓展选择器速记#

选择器类型写法说明
ID选择器#id使用#
类选择器.class使用.
后代div .cla空格,无论藏多深,只要是这个标签内部的
交集选择器div.cla没有空格,连着写,就是有一个标签同时全部满足的才选中
并集选择器ul,li,ol逗号隔开的,就是不管层级,只要是写到的,都是选中
子选择器div>p嵌套包含关系,选中多个,只嵌套的第一层只要是div下的子标签p都选中,就是只要是子元素的,不管中间隔了多少个元素
相邻兄弟选择器img+p平级关系,选中一个,图片后面紧跟着的段落将被选中,但凡中间隔了几个标签都不会选中
通用兄弟选择器p~span平级关系,选中多个,p元素之后的所有同层级span元素 p不会被选中

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

CSS3基础和选择器
https://f.youzi177.cn/posts/2026100601css3-ji-chu-he-xuan-ze-qi/
作者
小封鸭
发布于
2026-10-06
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
小封鸭
小楼一夜听春雨,深巷明朝卖杏花
公告
欢迎来到我的博客。这里主要记录前端全栈和日常内容
分类
标签
最新动态
站点统计
文章
60
分类
3
标签
12
总字数
107,734
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
EdgeOne Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录