🎯 一、引子:CSS 是网页的时尚设计师
想象一下,HTML 是一个人的骨架和器官,那么 CSS 就是这个人穿的衣服、发型、配饰。没有 CSS 的 HTML,就像一个穿着睡衣上街的人------虽然功能齐全,但看起来总有点不太得体。
今天,我们就来聊聊这个让网页变得"有颜值"的神奇语言:CSS(层叠样式表) 。它不仅是前端开发的"化妆师",更是我们控制网页外观的超级武器!
🧠 二、基础概念扫盲班:什么是 CSS?
1. 声明(Declaration):属性与值的 CP 组合
在 CSS 中,一个 声明(declearation)就是一组键值对,比如:
Css
color: red;
font-size: 20px;
这就好比你给衣服选颜色和尺码,color
是属性,red
是它的值;font-size
是属性,20px
是它的值。它们组合在一起,就是一个完整的"穿搭指令"。
2. 声明块(Declaration Block):多个声明组成的集合
这些声明不是单打独斗的,而是被包裹在一个大括号 {}
里的,形成一个 声明块:
Css
{
color: red;
font-size: 20px;
}
这就像是一个完整的穿搭方案,包括了颜色、大小、字体等等所有风格细节。
3. 选择器(Selector)+ 声明块 = 规则集(Ruleset)
选择器决定了这个穿搭方案要应用在谁身上,声明块则是具体的穿搭内容。
Css
h1 {
color: red;
font-size: 20px;
}
这段代码的意思是:"嘿,所有的 <h1>
标题元素,你们都给我穿上红色衣服,字号调成 20 像素。"
这就是一个完整的 规则集(ruleset) ,也就是我们常说的 CSS 样式规则。
就会修饰我们的html:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
h1 {
color: red;
font-size: 20px;
}
</style>
</head>
<body>
<h1>hello 大佬</h1>
</body>
</html>

🔍 三、CSS 选择器:精准定位你的"穿搭对象"
选择器就像是一个侦探,负责找到 HTML 页面中你想打扮的元素。不同的选择器可以让你更精确地找到目标。
1. 相邻兄弟选择器:h1 + p
Css
h1 + p {
color: blue;
}
意思是:"紧接在 <h1>
后面的那个 <p>
元素,你要变成蓝色。"
就像你在排队时只跟紧挨着你的人打招呼一样。
📌 比如:
Html
<h1>我是标题</h1>
<p>我是紧跟其后的段落</p>
这个段落会被选中。
是只与其紧挨,且只有一个
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
h1+p {
color: red;
font-size: 20px;
}
</style>
</head>
<body>
<h1>hello 大佬</h1>
<p>段落1</p>
<p>段落2</p>
</body>
</html>

2. 后续兄弟选择器:h1 ~ p
Css
h1 ~ p {
color: green;
}
这次就不是只找第一个兄弟了,而是找所有在 <h1>
后面的 <p>
兄弟。
📌 示例:
Html
<h1>我是标题</h1>
<p>我也是段落</p>
<p>我也想变绿!</p>
这两个 <p>
都会被选中。 后续的兄弟元素(选中类型)都会被修饰
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
h1~p {
color: red;
font-size: 20px;
}
</style>
</head>
<body>
<h1>hello 大佬</h1>
<p>段落1</p>
<p>段落2</p>
<div>盒子1</div>
<p>段落3</p>
</body>
</html>

3. 子元素选择器:div > p
css
div > p {
background-color: yellow;
}
意思是:"只要你是 <div>
的亲生孩子(直接子元素),而且你是一个 <p>
,那就给你黄色背景。"
✅ 正确匹配:
html
<div>
<p>我是 div 的儿子</p>
</div>
❌ 不匹配:
html
<div>
<span><p>我不是亲生的</p></span>
</div>
我们来看看具体代码:一定要是指定的后代元素
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.outer>p {
color: red;
font-size: 20px;
}
.inner>p {
color: blue;
font-size: 30px;
}
</style>
</head>
<body>
<div class="outer">
<p>段落1</p>
<div class="inner">
<p>段落2</p>
</div>
<span>文字1</span>
</div>
</body>
</html>
🦋 四、伪类选择器:为元素的状态"穿衣打扮"
有时候,我们不仅想根据元素的位置来打扮它,还想根据它的状态来调整样式。这时候就要用到 伪类选择器(Pseudo-classes)。
1. 行为伪类:用户正在做什么?
:hover
:鼠标悬停:active
:点击瞬间:focus
:获得焦点(比如输入框被点击)
Css
button:hover {
background-color: lightblue;
}
input:focus {
border: 2px solid orange;
}
💡 小贴士:你可以把
:hover
理解成"靠近我我就换装",:focus
是"被选中我就发光"。
我们来看具体实现
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
button:active {
background-color: red;
}
input:focus {
background-color: yellow;
}
p:hover {
background-color: blue;
}
</style>
</head>
<body>
<button>点击我</button><br>
<input type="text" placeholder="请输入">
<p>一段文字</p>
</body>
</html>
点击按钮变成红色,聚焦输入框,背景颜色变成黄色,移动到p元素上面,背景颜色变成蓝色

2. 状态伪类:元素当前的状态
:checked
:复选框或单选按钮被选中时:enabled
/:disabled
:元素是否启用
Css
input:checked + label {
color: purple;
}
📌 应用场景:当你选中某个选项时,对应的标签文字变成紫色,非常直观。
我们来看看具体实现
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
input:checked+label {
color: red;
font-weight: bold;
}
button:disabled {
background-color: yellow;
}
</style>
</head>
<body>
<input type="checkbox">
<label for="">选项</label><br>
<button>点击我</button>
<script>
let btn = document.querySelector('button');
btn.addEventListener('click', function () {
btn.disabled = true
})
</script>
</body>
</html>
我们添加了一个点击事件,点击后按钮就不可用了,我们css的修饰,按钮不可用就变成黄色,单选框被勾选label变成红色

3. 结构伪类:根据结构关系来选择元素
这部分是我们今天重点学习的内容之一,特别是 nth-child()
和 nth-of-type()
的区别。
✅ .container p:nth-child(3)
:第 3 个孩子必须是 p 才行
Css
.container p:nth-child(3) {
color: red;
}
📌 解释:
- 容器
.container
中第 3 个子元素必须是<p>
,才会被选中。 - 如果第 3 个是
<div>
或其他标签,就不会命中。
🧪 示例:
Html
<div class="container">
<p>1</p>
<div>2</div>
<p>3</p> <!-- 会被选中 -->
</div>

✅ .container p:nth-of-type(3)
:第 3 个 p 元素,不管它排第几
Css
.container p:nth-of-type(3) {
color: blue;
}
📌 解释:
- 只要是
.container
中的第 3 个<p>
元素,无论它在整个容器中的位置如何,都会被选中。 - 类似于"按类型排队",不看整体顺序。
🧪 示例:
Html
<div class="container">
<p>1</p>
<div>2</div>
<p>3</p> <!-- 第 2 个 p,不会被选中 -->
<p>4</p> <!-- 第 3 个 p,会被选中 -->
</div>

🧠 对比记忆口诀:
.container p:nth-child
:我只认"座位号",必须坐那个位置。并且类型也要对.container p:nth-of-type
:我只认"类型+数量",哪怕你坐在后排也无所谓。
🧩 五、进阶技巧:让选择器更强大
1. 属性选择器:根据属性来筛选
Css
input[type="text"] {
width: 200px;
}
📌 说明:所有
type="text"
的输入框,宽度设为 200px。
2. 通配符选择器:*
Css
* {
margin: 0;
padding: 0;
}
⚠️ 注意:慎用,影响全局。
3. 分组选择器:多个选择器共享一套样式
Css
h1, h2, h3 {
color: #333;
}
📌 效果:所有一级、二级、三级标题都使用深灰色字体。
🧵 六、总结:CSS 是一门优雅的语言
通过今天的学习,我们掌握了:
- 声明、声明块、规则集的基本结构;
- 多种选择器的使用方法;
- 伪类选择器的作用及分类;
nth-child()
与nth-of-type()
的区别;- 如何用 CSS 来为网页"穿衣打扮"。
结语:CSS 很有趣,也很值得深入研究!
CSS 并不只是写几个颜色和边距那么简单,它是构建现代网页视觉体验的重要基石。掌握好选择器,就像拥有一双能精准识别"穿搭对象"的眼睛,让你的网页美得恰到好处。
希望这篇轻松幽默的技术博客,能帮助你更好地回顾今天所学的内容。如果你觉得有用,不妨点赞收藏,下次继续带你看懂更多 CSS 的奥秘!