文章目录
引言
CSS是网页设计的核心技术之一,用于控制HTML页面的外观和布局。HTML负责"结构"(页面里有什么),CSS负责"样式"(这些内容长什么样、放在哪),二者分离让网页开发更灵活、易维护。
一、CSS基本概念
1、核心定义
CSS是"层叠样式表",核心特点有三个:
- 层叠性:多个样式规则作用于同一个元素时,优先级高的规则会覆盖优先级低的,优先级相同则"后来者居上";
- 继承性:子元素会默认继承父元素的部分样式(如字体、文本颜色)。减少重复代码;
- 样式化:脱离HTML标签的样式属性,通过CSS统一控制,实现"结构与样式分离"。
2、CSS的3种基础引入方式
CSS要作用于HTML,需通过以下方式引入:
| 引入方式 | 写法 | 适合场景 |
|---|---|---|
| 行内样式(内联样式) | <标签 style="样式名:值;"> |
临时给单个元素加样式,优先级最高(不推荐大量使用) |
| 内部样式 | <style>标签包裹CSS代码,写在HTML文档的<head>部分的<style>标签中 |
适合单个页面的使用(小型项目) |
| 外部样式 | <link href="css文件路径.css"> |
多个页面共享样式,将CSS代码写在单独的.css文件中,然后在HTML中通过<link>标签引入(推荐使用) |
3、代码实例
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS引入方式</title>
<!-- 2. 内嵌式:style标签写在head里 -->
<style>
p {
color: blue; /* 所有p标签文字变蓝色 */
font-size: 16px;
}
</style>
<!-- 3. 外联式:引入外部css文件(需新建style.css文件) -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- 1. 行内式:style属性直接写在标签里 -->
<h1 style="color: red; text-align: center;">我是行内样式</h1>
<p>我是内嵌样式控制的段落</p>
<div>我是外联样式控制的div(style.css里写div{font-weight: bold;})</div>
</body>
</html>
style.css文件内容:
css
div {
font-weight: bold; /* 加粗 */
color: green;
}
运行效果如下:

二、CSS基础选择器
选择器是CSS的核心机制,它决定了哪些HTML元素会应用对应的样式规则。理解选择器是掌握CSS的关键。
1、基础选择器分类(4种核心)
| 选择器类型 | 语法 | 作用 | 示例 |
|---|---|---|---|
| 标签选择器 | 标签名{样式} | 选中页面中所有该标签的元素 | p { color: red; }(所有p标签变红) |
| 类选择器 | .类名{样式} | 选中所有class="类名"的元素(可复用) | .box { width: 100px; }(所有class=box的元素宽100px) |
| id选择器 | #id名{样式} | 选中唯一的id= "id名"的元素(一个页面id唯一) | #title { font-size: 20px; }(id=title的元素字号为20px) |
| 通配符选择器 | *{样式} | 选中页面所有元素(常用于清除默认样式) | * { margin: 0; padding: 0;}(清除所有元素默认边距) |
2、代码实例
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>基础选择器</title>
<style>
/* 1. 标签选择器:所有h2标签生效 */
h2 {
color: purple;
}
/* 2. 类选择器:所有class="content"的元素生效 */
.content {
font-size: 14px;
line-height: 24px;
}
/* 3. id选择器:唯一id="header"的元素生效 */
#header {
text-align: center;
background-color: #f5f5f5;
}
/* 4. 通配符选择器:清除所有元素默认边距 */
* {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<h2>我是标题(标签选择器控制)</h2>
<p class="content">我是段落1(类选择器控制)</p>
<div class="content">我是div(类选择器复用)</div>
<div id="header">我是头部(id选择器控制)</div>
</body>
</html>
运行结果如下:

注意:
- 类选择器可给多个元素加同一个类,是开发中最常用的选择器;
- id选择器一个页面只能用一次,常用于选唯一元素(如页面头部、底部);
- 通配符选择器会增加浏览器性能消耗,仅用于清除默认样式,不推荐大量使用。
三、CSS字体与文本样式
字体和文本样式是控制文字外观的核心,良好的字体设计能显著提升用户体验。常用属性见下表所示:
1、字体样式(控制字体本身)
| 属性 | 作用 | 取值示例 |
|---|---|---|
| font-size | 字号 | 12px、1em |
| font-family | 字体 | 微软雅黑、宋体 |
| font-weight | 字体粗细 | normal、bold、100-900(400=normal,700=bold) |
| font-style | 字体样式 | normal(正常)、italic(斜体) |
2、文本样式(控制文字排版)
| 属性 | 作用 | 取值示例 |
|---|---|---|
| color | 文字颜色 | red、#ff0000(十六进制,推荐)、rgb(255,0,0) |
| text-align | 文本水平对齐 | left(左)、center(中)、right(右) |
| text-decoration | 文本装饰 | none(清除下划线)、underline(下划线)、line-through(删除线) |
| line-height | 行高 | 24px、1.5(倍数,推荐) |
| text-indent | 首行缩进 | 2em(首行缩进2个字符,常用) |
3、代码实例
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>字体与文本样式</title>
<style>
.text-box {
/* 字体样式 */
font-size: 16px; /* 字号16px(网页默认字号) */
font-family: "微软雅黑", Arial, sans-serif; /* 优先微软雅黑,没有则用Arial */
font-weight: 500; /* 半加粗(400正常,700加粗) */
font-style: normal; /* 取消斜体 */
/* 文本样式 */
color: #333; /* 深灰色(网页常用文字色) */
line-height: 1.8; /* 行高1.8倍,阅读更舒适 */
text-indent: 2em; /* 首行缩进2个字符 */
text-align: left; /* 左对齐(默认) */
}
a {
text-decoration: none; /* 清除a标签默认下划线 */
color: #0088ff;
}
a:hover {
text-decoration: underline; /* 鼠标悬停加下划线 */
}
.italic-text {
font-style: italic; /* 斜体 */
color: #ff6600;
}
</style>
</head>
<body>
<div class="text-box">
CSS(层叠样式表)是网页设计的核心技术,用于控制HTML页面的外观和布局。通过CSS,我们可以轻松修改文字的大小、颜色、行高,让页面更美观。
</div>
<p class="italic-text">这是斜体文字,颜色为橙色</p>
<a href="#">这是一个链接(无下划线,悬停显示)</a>
</body>
</html>
运行结果如下:

四、CSS复合选择器
复合选择器是由两个或多个选择器组合而成,能更精准选中元素。
1、4种常用的复合选择器见下表
| 选择器类型 | 语法 | 作用 | 示例 |
|---|---|---|---|
| 后代选择器 | 选择器1 选择器2 {样式} | 选中选择器1内部的所有选择器2元素 | ul li { color: red;}(ul里的所有li变红) |
| 子选择器 | 选择器1 > 选择器2 {样式} | 选中选择器1直接子元素的选择器2(仅一级) | div > p {font-weight: bold;}(div直接子元素p加粗) |
| 并集选择器 | 选择器1, 选择器2 {样式} | 同时选中选择器1和选择器2(批量设置样式) | h1, h2, p {margin:10px 0;}(h1、h2、p都加上下边距) |
| 伪类选择器 | 选择器: 伪类名 {样式} | 选中元素的"特殊状态"(如a标签的hover) | a:hover {color:red;}(鼠标悬停在a标签上变红) |
2、代码实例
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>复合选择器</title>
<style>
/* 1. 后代选择器:nav里的所有a标签生效 */
.nav a {
color: #333;
text-decoration: none;
margin: 0 10px;
}
/* 2. 子选择器:box直接子元素p生效(仅一级) */
.box > p {
font-weight: bold;
color: green;
}
/* 3. 并集选择器:h3、.desc、span同时生效 */
h3, .desc, span {
font-size: 14px;
color: #666;
}
/* 4. 伪类选择器:a标签的4种状态(LVHA顺序) */
a:link { color: #0088ff; } /* 未访问的链接 */
a:visited { color: #999; } /* 已访问的链接 */
a:hover { color: #ff6600; } /* 鼠标悬停 */
a:active { color: #ff0000; } /* 鼠标点击时 */
</style>
</head>
<body>
<div class="nav">
<a href="#">首页</a>
<a href="#">产品</a>
<div>
<a href="#">子菜单</a> <!-- 后代选择器也会选中这个a -->
</div>
</div>
<div class="box">
<p>我是box的直接子元素p(加粗绿色)</p>
<div>
<p>我是box的孙子元素p(不生效)</p>
</div>
</div>
<h3>标题3</h3>
<p class="desc">描述文本</p>
<span>span标签</span>
</body>
</html>
运行效果:

注意:
- 后代选择器包含"所有层级"的子元素,子选择器仅包含"直接子元素";
- a标签的伪类需按link -> visited -> hover ->active顺序写,否则hover可能不生效;
- 并集选择器用逗号分隔,可批量减少重复代码。
五、CSS背景样式
背景样式用于控制元素的背景(颜色、图片、平铺、位置等),是页面美化的核心:
1、常用背景属性
| 属性 | 作用 | 取值示例 |
|---|---|---|
| background-color | 背景颜色 | #f5f5f5、rgb(245,245,245)、transparent(透明) |
| background-image | 背景图片 | url("图片路径") |
| background-repeat | 背景平铺 | no-repeat(不平铺)、repeat-x(水平平铺)、repeat-y(垂直平铺) |
| background-position | 背景位置 | center center(居中)、left top(左上)、50px 30px(坐标) |
| background-size | 背景尺寸 | cover(覆盖元素)、contain(适应元素)、100px 80px(宽高) |
| 复合属性 | background | 简写顺序:color image repeat position/size |
2、代码实例
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS背景样式</title>
<style>
.bg-box {
width: 400px;
height: 300px;
/* 复合写法:背景色 + 背景图 + 不平铺 + 居中 + 覆盖 */
background: #e58989 url("bg.jpg") no-repeat center center / cover;
/* 拆分写法(先学拆分,再学复合):
background-color: #e58989;
background-image: url("bg.jpg");
background-repeat: no-repeat;
background-position: center center;
background-size: cover;
*/
}
.simple-bg {
width: 200px;
height: 100px;
background-color: #0088ff; /* 纯背景色 */
color: white; /* 文字白色,对比明显 */
text-align: center;
line-height: 100px; /* 行高=高度,文字垂直居中 */
}
</style>
</head>
<body>
<div class="simple-bg">纯背景色盒子</div>
<div class="bg-box">背景图片盒子(需替换bg.jpg为实际图片路径)</div>
</body>
</html>
运行效果:

注意:
- 背景图片路径:若CSS写在
<style>里,路径相对于HTML文件;若写在外部CSS文件,路径相对于CSS文件; - background-size需写在background-position后,用
/分隔(复合写法); - 背景图片默认会平铺,需用
no-repeat取消平铺,不要忘记这一点。
六、CSS显示模式
HTML元素默认有"显示模式",决定元素是"独占一行"还是"并排显示",有3种核心模式需要掌握。
1、核心显示模式分类
| 显示模式 | 特点 | 代表元素 |
|---|---|---|
| 块级元素(bolck) | 独占一行;宽度默认100%可设宽高 | div、p、h1~h6、ul、li、dl |
| 行内元素(inline) | 并排显示;宽高由内容决定;不可设宽高 | a、span、em、strong |
| 行内块元素(inline-block) | 并排显示;可设宽高 | img、input、button |
2、模式转换(核心:display属性)
通过display属性可转换元素的显示模式,这是布局的核心技巧:
display: block;:转为块级元素;display: inline;:转为行内元素;display: inline-block;:转为行内块元素;display:none;:隐藏元素(不占位置)。
3、代码实例
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>显示模式</title>
<style>
/* 块级元素:div默认独占一行 */
div {
width: 100px;
height: 100px;
background-color: #ffcccc;
margin: 5px;
}
/* 行内元素:span默认并排,不可设宽高 */
span {
width: 100px; /* 无效 */
height: 100px; /* 无效 */
background-color: #ccffcc;
margin: 5px;
}
/* 行内块元素:img默认并排,可设宽高 */
img {
width: 50px;
height: 50px;
margin: 5px;
}
/* 模式转换:把a标签转为行内块(可设宽高,并排显示) */
a {
display: inline-block;
width: 80px;
height: 30px;
background-color: #0088ff;
color: white;
text-decoration: none;
text-align: center;
line-height: 30px;
margin: 5px;
}
</style>
</head>
<body>
<div>块级元素1</div>
<div>块级元素2(独占一行)</div>
<span>行内元素1</span>
<span>行内元素2(并排,宽高无效)</span>
<img src="pic1.jpg" alt="图片1">
<img src="pic2.jpg" alt="图片2">(行内块,可设宽高)
<a href="#">链接1</a>
<a href="#">链接2</a>(转为行内块,可设宽高)
</body>
</html>
运行效果:

注意:
- 行内元素的
margin只有左右生效,上下不会生效,特别要注意这一点; - 行内块元素之间会有"默认间隙"(因HTML换行),可通过父级元素设
font-size: 0;解决; display: none;隐藏元素后,元素不占页面空间(区别于visibility:hidden;)后者占空间。
七、CSS盒子模型
所有HTML元素都可以看作"盒子",盒子模型是控制元素尺寸和间距的核心,这一知识点非常重要,需要吃透。
1、盒子模型的4个组成部分

- 内容区(content):元素的宽高;
- 内边距(padding):内容区到边框的距离(内边距会撑大盒子);
- 边框(border):盒子的边框(会撑大盒子);
- 外边距(margin):盒子与其他盒子的距离(不会撑大盒子)。
2、核心属性
| 部分 | 属性 | 作用 | 简写 |
|---|---|---|---|
| 内容区 | width/height | 设置盒子内容的宽高 | - |
| 内边距 | padding | 上下左右内边距 | padding:10px(四向)、padding:10px 20px;(上下/左右)、padding:10px 20px 30px 40px;(上右下左) |
| 边框 | border | 边框宽度、样式、颜色 | border: 1px solid #ccc(宽度 1px、实线、灰色) |
| 外边距 | margin | 上下左右外边距 | 同padding简写规则 |
核心技巧:box-sizing
默认情况下,盒子的width/height仅代表"内容区",内边距和边框会撑大盒子,解决方法:
css
box-sizing: border-box; /* 让width/height包含内容区+内边距+边框,盒子尺寸不被撑大 */
3、代码实例
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>盒子模型</title>
<style>
.box {
width: 200px;
height: 100px;
/* 边框:1px实线红色 */
border: 1px solid red;
/* 内边距:上下10px,左右20px */
padding: 10px 20px;
/* 外边距:上下20px,左右居中(auto仅块级元素生效) */
margin: 20px auto;
/* 关键:让width/height包含padding和border,盒子总宽仍为200px */
box-sizing: border-box;
background-color: #f5f5f5;
}
.small-box {
width: 100px;
height: 50px;
background-color: #0088ff;
margin: 10px; /* 与父盒子内边距的距离 */
}
</style>
</head>
<body>
<div class="box">
<div class="small-box">子盒子</div>
父盒子:宽200px(包含padding和border),内边距上下10px左右20px,边框1px,外边距上下20px左右居中
</div>
</body>
</html>
运行效果:

注意:
- 外边距合并:两个块级元素上下外边距相遇时,会取 "较大值"(如上面盒子 margin-bottom:20px,下面盒子 margin-top:10px,最终间距 20px);
- 行内元素的 padding 上下会 "显示" 但不会 "撑大" 父元素;
margin: 0 auto;仅能让 "块级元素" 水平居中(需设置宽度)。
八、CSS浮动
浮动(float)是早期布局的核心,用于让块级元素 "并排显示",需掌握其核心用法和清除浮动的技巧:
1、浮动的核心作用
- 让块级元素从 "独占一行" 变为 "并排显示";
- 文字环绕图片。
2、浮动属性
css
float: left; /* 向左浮动 */
float: right; /* 向右浮动 */
float: none; /* 取消浮动(默认) */
3、浮动的问题:父元素高度塌陷
浮动元素会 "脱离标准流",父元素若没有设置高度,会因子元素浮动而 "高度为 0"(塌陷),需 "清除浮动"。
清除浮动是方法详解见下面的代码:
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<style type="text/css">
#box{
border: 1px solid green;
/* 方案二的给父级元素手动添加一个高度 */
/* height: 200px; */
/* 方案三的溢出处理 */
/* overflow: hidden; */
}
/* 方案四的给父级元素添加伪类样式 */
#box:after{
/* 清空内容 */
content: '';
/* 设置为块级元素 */
display: block;
/* 清除左右两侧的浮动 */
clear: both;
}
.box1{
width: 200px;
height: 200px;
border: 1px dashed #1C88CC;
/* display: inline-block; */
/* 设置浮动 */
float: left;
}
.box2{
width: 200px;
height: 200px;
border: 1px dashed darkred;
/* 设置浮动 */
float: right;
}
/* 方案一的清除左右两边的浮动 */
#clear{
/* 清除左右两边的浮动 */
clear: both;
}
</style>
<body>
<div id="box">
<div class="box1">我是第一个div</div>
<div class="box2">我是第二个div</div>
</div>
<!-- 问题:同时设置了左右浮动,那么父级元素会塌陷 -->
<!-- 解决方案一:给浮动元素最末尾加上一个空的div,并设置清除左右两边的浮动-->
<!-- 不推荐:尽量减少不必要的空的代码<div></div> -->
<!--
<div id="box">
<div class="box1">我是第一个div</div>
<div class="box2">我是第二个div</div>
<div id="clear"></div>
</div>
-->
<!-- 解决方案二:给父级元素手动添加一个高度 -->
<!-- 不推荐:有新的数据加入时,父级元素的高度不容易被实时控制,需要不断调整高度 -->
<!-- 解决方案三:解决父级元素的溢出问题 -->
<!-- 不推荐:如果父级元素有下拉操作,无法支持下拉操作 -->
<!-- 解决方案四:给父级元素添加一个after伪类样式,设置清空内容 块级元素 清空左右两侧的浮动 -->
<!-- 推荐 -->
</body>
</html>
运行效果:

另一个有关浮动的案例
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS浮动</title>
<style>
/* 清除浮动的伪元素(推荐写法,可复用) */
.clearfix::after {
content: "";
display: block;
clear: both;
height: 0;
visibility: hidden;
}
.container {
width: 400px;
border: 1px solid #ccc;
margin: 20px auto;
}
.box1 {
width: 100px;
height: 100px;
background-color: #ffcccc;
float: left; /* 左浮动 */
}
.box2 {
width: 100px;
height: 100px;
background-color: #ccffcc;
float: left; /* 左浮动,与box1并排 */
}
/* 文字环绕图片(浮动经典场景) */
.img-box {
width: 300px;
border: 1px solid #ccc;
padding: 10px;
margin: 0 auto;
}
.img-box img {
width: 80px;
height: 80px;
float: left; /* 图片左浮动,文字环绕 */
margin-right: 10px;
}
</style>
</head>
<body>
<!-- 浮动布局:两个盒子并排 -->
<div class="container clearfix">
<div class="box1">浮动盒子1</div>
<div class="box2">浮动盒子2</div>
</div>
<!-- 文字环绕图片 -->
<div class="img-box">
<img src="pic.jpg" alt="图片">
这是文字环绕图片的效果,浮动的核心场景之一。图片左浮动后,文字会自动环绕在图片右侧,这是网页排版中非常常见的效果。
</div>
</body>
</html>
运行效果(图片需要自行添加):

注意:
- 浮动元素会脱离标准流,不再占用原位置;
- 清除浮动的核心是 "让父元素感知到浮动子元素的高度";
九、CSS定位
定位(position)用于精准控制元素的位置(如固定导航、弹窗、角标),需掌握 4 种定位模式:
1、定位模式分类
| 定位模式 | 语法 | 特点 | 应用场景 |
|---|---|---|---|
| 静态定位(static) | position: static; |
默认模式,元素在标准流中 | 无(默认) |
| 相对定位(relative) | position: relative; |
相对于自身原位置偏移;不脱离标准流 | 微调元素位置、作为绝对定位的父容器 |
| 绝对定位(absolute) | position: absolute; |
相对于最近的 "定位父容器" 偏移;脱离标准流 | 弹窗、角标、精准定位元素 |
| 固定定位(fixed) | position: fixed; |
相对于浏览器视口偏移;脱离标准流;滚动页面位置不变 | 固定导航、回到顶部按钮 |
注意:
- 绝对定位的 "参考父容器":必须是最近的、非 static 的定位元素(relative/absolute/fixed);若没有,参考浏览器视口;
- 定位元素的偏移属性(top/right/bottom/left)仅在非 static 模式下生效;
- 定位元素可通过
z-index控制层级(数值越大,层级越高,默认 auto)。
2、代码实例
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS定位</title>
<style>
/* 父容器:相对定位,作为绝对定位的参考 */
.parent {
width: 300px;
height: 200px;
border: 1px solid #ccc;
margin: 50px auto;
position: relative; /* 相对定位,不脱离标准流 */
}
/* 相对定位:相对于自身原位置右移10px,下移10px */
.relative-box {
width: 100px;
height: 50px;
background-color: #ffcccc;
position: relative;
top: 10px;
left: 10px;
}
/* 绝对定位:相对于父容器右上角定位 */
.absolute-box {
width: 80px;
height: 40px;
background-color: #ccffcc;
position: absolute;
top: 20px;
right: 20px;
}
/* 固定定位:固定在浏览器右下角,滚动页面不变 */
.fixed-box {
width: 60px;
height: 60px;
background-color: #0088ff;
color: white;
text-align: center;
line-height: 60px;
position: fixed;
bottom: 30px;
right: 30px;
border-radius: 50%; /* 圆形 */
}
</style>
</head>
<body>
<div class="parent">
<div class="relative-box">相对定位</div>
<div class="absolute-box">绝对定位</div>
</div>
<div class="fixed-box">回到顶部</div>
<!-- 加大量文本,测试固定定位滚动效果 -->
<p>测试滚动...</p><p>测试滚动...</p><p>测试滚动...</p><p>测试滚动...</p>
<p>测试滚动...</p><p>测试滚动...</p><p>测试滚动...</p><p>测试滚动...</p>
<p>测试滚动...</p><p>测试滚动...</p><p>测试滚动...</p><p>测试滚动...</p>
<p>测试滚动...</p><p>测试滚动...</p><p>测试滚动...</p><p>测试滚动...</p>
</body>
</html>
注意:
- 绝对定位和固定定位会脱离标准流,不占用原位置;
- 相对定位是 "占位置的偏移",绝对定位是 "不占位置的偏移";
- 固定定位的元素不会随页面滚动而移动,适合做 "回到顶部""固定导航" 等功能。
结语
从 "结构与样式分离" 的核心逻辑,到选择器、盒子模型、浮动与定位的层层递进,CSS 的学习本质是理解 "如何精准控制页面的每一处细节"。它既是让网页从 "骨架" 变 "妆容" 的工具,更是前端开发者构建美观、易用界面的基础 ------ 掌握这些基础,你已能搭建出清晰、规整的网页;而后续的灵活组合与实践,会让你在 "样式设计" 与 "用户体验" 的平衡中,逐渐体会到前端开发的创造力与温度。