CSS3 是 CSS(层叠样式表)的第三个主要版本,在 CSS2.1 基础上新增了大量特性,涵盖布局、视觉效果、动画、响应式等多个维度,极大提升了网页样式的表现力和开发效率。由于 CSS3 属性数量庞大(且部分属性为细分或实验性),以下将按核心功能模块分类,整理常用属性、用法及示例,帮助系统理解。
一、CSS3 新增选择器(非 “属性”,但为核心基础)
CSS3 扩展了选择器能力,无需依赖 HTML 类名或 ID 即可精准定位元素,减少 HTML 冗余。
| 选择器类型 | 语法示例 | 作用说明 |
|---|---|---|
| 属性选择器 | [attr^="val"] |
匹配属性 attr 以 val 开头的元素 |
[attr$="val"] |
匹配属性 attr 以 val 结尾的元素 |
|
[attr*="val"] |
匹配属性 attr 包含 val 的元素 |
|
| 结构伪类选择器 | :nth-child(n) |
匹配父元素下第 n 个子元素(n 可写公式,如 2n 偶数) |
:nth-of-type(n) |
匹配父元素下第 n 个同类型子元素 |
|
:first-child / :last-child
|
匹配父元素第一个 / 最后一个子元素 | |
:empty |
匹配无内容(无文本、无子元素)的元素 | |
| 状态伪类选择器 |
:hover / :active / :focus
|
鼠标悬浮 / 点击 / 获取焦点时的元素(部分为 CSS2 但常用) |
:checked |
匹配被选中的表单元素(如单选框、复选框) | |
| 伪元素选择器 |
::before / ::after
|
在元素内容前 / 后插入 “虚拟元素”(需配合 content 属性) |
::first-letter |
匹配文本的第一个字符 | |
::selection |
匹配用户选中的文本(仅支持 color/background 等少数属性) |
二、盒模型模块(Box Model)
CSS3 新增 box-sizing 属性,解决了传统盒模型(content-box)中 “边框 / 内边距撑大元素” 的问题。
核心属性:box-sizing
-
作用:定义元素的 “盒模型计算方式”,即
width/height是否包含边框(border)和内边距(padding)。 -
取值:
-
content-box(默认):width= 内容宽度(不含padding/border),元素实际宽度 = 内容宽 +padding+border。 -
border-box(推荐):width= 内容宽 +padding+border,元素实际宽度固定为定义的width,避免意外撑大。
-
-
示例 :
.box { width: 200px; padding: 20px; border: 1px solid #000; box-sizing: border-box; /* 实际宽度仍为 200px,padding 和 border 从内部扣除 */ }
三、背景与边框模块
CSS3 大幅增强了背景和边框的视觉效果,支持多背景、圆角、阴影等。
1. 背景相关属性
| 属性名 | 作用说明 | 取值示例 |
|---|---|---|
background-image |
设置背景图片(支持多背景,用逗号分隔) | url("a.jpg"), url("b.png") |
background-size |
控制背景图片尺寸 |
cover(覆盖容器)、contain(适应容器)、100px 200px(固定尺寸) |
background-position |
控制背景图片位置(支持百分比 / 关键词) |
center center(居中)、20% 80%
|
background-clip |
控制背景的 “裁剪范围” |
border-box(默认,包含边框)、padding-box(仅内边距)、content-box(仅内容) |
background-origin |
控制背景图片的 “定位原点” | 同 background-clip 的取值 |
background-attachment |
控制背景图片是否随滚动条滚动 |
fixed(固定)、scroll(滚动) |
-
多背景示例 :
.bg { width: 500px; height: 300px; background-image: url("logo.png"), url("bg-pattern.jpg"); background-size: 100px auto, cover; /* 第一个背景(logo)宽100px,第二个(图案)覆盖容器 */ background-position: top left, center; background-repeat: no-repeat, repeat; /* 第一个不重复,第二个重复 */ }
2. 边框相关属性
| 属性名 | 作用说明 | 取值示例 |
|---|---|---|
border-radius |
设置边框圆角(支持简写,实现圆形 / 椭圆) |
5px(统一圆角)、10px 20px 30px 40px(左上→右上→右下→左下)、50%(圆形,需元素宽高相等) |
box-shadow |
为元素添加阴影(支持多阴影,逗号分隔) |
水平偏移 垂直偏移 模糊度 扩散度 颜色 内阴影(如 2px 2px 5px rgba(0,0,0,0.3),内阴影加 inset) |
border-image |
用图片替代 “传统边框”(需配合 border 使用) |
url("border.png") 30 round(图片地址、切片大小、重复方式) |
-
边框圆角 + 阴影示例:
.card { width: 300px; height: 200px; border: 1px solid #eee; border-radius: 12px; /* 圆角 */ box-shadow: 0 4px 12px rgba(0,0,0,0.08); /* 水平0、垂直4、模糊12、半透明阴影 */ }
四、文本与字体模块
CSS3 优化了文本排版和字体引入方式,支持阴影、溢出处理、自定义字体等。
| 属性名 | 作用说明 | 取值示例 |
|---|---|---|
text-shadow |
为文本添加阴影(类似 box-shadow) |
1px 1px 2px #ff0000(水平 1、垂直 1、模糊 2、红色) |
text-overflow |
处理文本溢出容器的显示方式(需配合 white-space: nowrap 和 overflow: hidden) |
ellipsis(省略号)、clip(裁剪) |
white-space |
控制文本换行方式 |
nowrap(不换行)、pre(保留空格和换行) |
word-wrap / overflow-wrap
|
允许长单词换行(避免溢出) |
break-word(强制换行) |
word-break |
控制单词的断行规则 |
break-all(任意字符处断行)、keep-all(仅在空格 / 连字符处断行) |
@font-face |
引入自定义字体(无需依赖系统字体) | 见下方示例 |
-
文本溢出省略示例:
.text { width: 200px; white-space: nowrap; /* 不换行 */ overflow: hidden; /* 隐藏溢出内容 */ text-overflow: ellipsis; /* 溢出部分显示省略号 */ } -
自定义字体示例:
/* 定义自定义字体 */ @font-face { font-family: "MyFont"; /* 字体名称(自定义) */ src: url("MyFont-Regular.woff2") format("woff2"), /* 优先加载的字体文件 */ url("MyFont-Regular.woff") format("woff"); /* 降级字体文件(兼容性) */ font-weight: normal; /* 字体粗细 */ font-style: normal; /* 字体样式(正常/斜体) */ } /* 使用自定义字体 */ .title { font-family: "MyFont", sans-serif; /* sans-serif 为降级字体 */ }
五、变形(Transform)模块
transform 允许对元素进行旋转、平移、缩放、倾斜等 2D/3D 变形,不影响其他元素布局(类似 “视觉上的改变”)。
核心属性:transform
-
作用:定义元素的变形效果,支持多个变形函数(用空格分隔)。
-
2D 变形函数(常用):
-
translate(x, y):平移(x 水平方向,y 垂直方向,单位 px/%),简化写法translateX(x)/translateY(y)。 -
rotate(deg):旋转(单位deg,正为顺时针,负为逆时针)。 -
scale(x, y):缩放(x 水平缩放,y 垂直缩放,1 为原尺寸,>1 放大,<1 缩小),简化写法scaleX(x)/scaleY(y)。 -
skew(x-deg, y-deg):倾斜(x 水平倾斜,y 垂直倾斜,单位deg),简化写法skewX(x)/skewY(y)。 -
matrix(a, b, c, d, e, f):复合变形(通过矩阵计算,较少直接使用)。
-
-
3D 变形函数(常用):
-
translate3d(x, y, z):3D 平移(z 轴为 “前后” 方向,单位 px)。 -
rotate3d(x, y, z, deg):3D 旋转(x/y/z 为 0 或 1,指定旋转轴),简化写法rotateX(deg)/rotateY(deg)/rotateZ(deg)。 -
perspective(n):定义 3D 透视效果(模拟人眼距离,值越小透视越强,单位 px,需写在父元素或变形元素上)。
-
-
辅助属性:
transform-origin:- 作用:定义变形的 “原点”(默认是元素中心
center center)。 - 取值:
x y(可写关键词,如top left;或 px/%),3D 时加z轴值。
- 作用:定义变形的 “原点”(默认是元素中心
-
示例(2D 旋转 + 缩放):
.box { width: 100px; height: 100px; background: red; transition: transform 0.3s; /* 配合过渡实现平滑效果 */ transform-origin: top left; /* 变形原点设为左上角 */ } .box:hover { transform: rotate(45deg) scale(1.2); /* hover 时旋转45度+放大1.2倍 */ }
六、过渡(Transition)模块
transition 用于实现元素状态变化时的平滑过渡(如 hover 与默认状态的切换),无需 JS 即可实现简单动画。
核心属性:transition(可简写,也可拆分为单个属性)
| 拆分属性 | 作用说明 | 取值示例 |
|---|---|---|
transition-property |
指定需要过渡的属性(all 表示所有可过渡属性) |
width, background-color、all
|
transition-duration |
过渡持续时间(必须设置,否则无效果) |
0.3s、500ms
|
transition-timing-function |
过渡的 “时间曲线”(控制速度变化) |
ease(默认,慢→快→慢)、linear(匀速)、ease-in(慢→快)、ease-out(快→慢)、cubic-bezier(n,n,n,n)(自定义曲线) |
transition-delay |
过渡延迟时间(可选,默认 0) |
0.2s(延迟 0.2 秒后开始过渡) |
-
简写语法:
transition: property duration timing-function delay;(顺序固定,可省略延迟)。 -
示例(按钮 hover 平滑变色 + 放大) :
.btn { padding: 8px 16px; background: #007bff; color: white; border: none; border-radius: 4px; /* 简写过渡:所有属性、0.3秒、ease曲线 */ transition: all 0.3s ease; } .btn:hover { background: #0056b3; /* 变色 */ transform: scale(1.05); /* 轻微放大 */ }
七、动画(Animation)模块
animation 比 transition 更强大,支持多关键帧、循环、自动播放等复杂动画,需配合 @keyframes 定义动画流程。
1. 核心属性:animation(可简写,也可拆分为单个属性)
| 拆分属性 | 作用说明 | 取值示例 |
|---|---|---|
animation-name |
指定动画名称(需与 @keyframes 名称一致) |
fadeIn、slide
|
animation-duration |
动画持续时间(必须设置) |
2s、1500ms
|
animation-timing-function |
动画时间曲线(同 transition-timing-function) |
linear、ease 等 |
animation-delay |
动画延迟时间 | 0.5s |
animation-iteration-count |
动画循环次数 |
infinite(无限循环)、3(循环 3 次) |
animation-direction |
动画循环方向 |
normal(默认,正向)、reverse(反向)、alternate(正向→反向→正向…,需循环次数≥2) |
animation-fill-mode |
动画结束后元素的状态 |
forwards(保持最后一帧状态)、backwards(延迟时先应用第一帧状态)、both(同时应用 forwards 和 backwards) |
animation-play-state |
控制动画播放状态 |
running(默认,播放)、paused(暂停,可通过 JS 控制) |
-
简写语法:
animation: name duration timing-function delay iteration-count direction fill-mode play-state;(顺序灵活,可省略部分属性)。
2. 关键帧定义:@keyframes
-
作用:定义动画的 “关键节点”(从开始到结束的状态变化),用
from(0%)和to(100%)或百分比(如 25%、50%)表示进度。 -
语法:
@keyframes 动画名称 { from { /* 动画开始状态(0%) */ } 50% { /* 动画中间状态(50%) */ } to { /* 动画结束状态(100%) */ } } -
示例(无限旋转的加载动画):
/* 定义旋转动画 */ @keyframes spin { from { transform: rotate(0deg); } /* 开始:0度 */ to { transform: rotate(360deg); } /* 结束:360度(一圈) */ } /* 使用动画 */ .loader { width: 40px; height: 40px; border: 4px solid #eee; border-top: 4px solid #007bff; /* 顶部边框变色,形成“扇形”效果 */ border-radius: 50%; /* 圆形 */ /* 简写动画:名称spin、1秒、匀速、无限循环 */ animation: spin 1s linear infinite; }
八、弹性盒(Flexbox)布局模块
Flexbox(弹性盒)是 CSS3 引入的一维布局模型(适合 “行” 或 “列” 方向的布局),可轻松实现元素的对齐、分布、自适应,解决传统浮动布局的痛点。
1. 核心概念:容器(父元素)与项目(子元素)
- 给父元素设置
display: flex,父元素成为 “Flex 容器”,子元素自动成为 “Flex 项目”。 - 容器存在两根轴:主轴(默认水平,由
flex-direction控制)和交叉轴(垂直于主轴)。
2. 容器属性(作用于父元素)
| 属性名 | 作用说明 | 取值示例 |
|---|---|---|
display |
定义容器为 Flex 布局 |
flex(块级容器)、inline-flex(行内容器) |
flex-direction |
控制主轴方向(项目排列方向) |
row(默认,水平从左到右)、row-reverse(水平从右到左)、column(垂直从上到下)、column-reverse(垂直从下到上) |
justify-content |
控制项目在主轴上的对齐方式 |
flex-start(默认,靠主轴起点)、flex-end(靠主轴终点)、center(居中)、space-between(两端对齐,项目间距相等)、space-around(项目两侧间距相等) |
align-items |
控制项目在交叉轴上的对齐方式 |
stretch(默认,拉伸填满交叉轴)、flex-start(靠交叉轴起点)、flex-end(靠交叉轴终点)、center(居中)、baseline(按项目基线对齐) |
flex-wrap |
控制项目是否换行(默认不换行,溢出压缩) |
nowrap(默认,不换行)、wrap(换行,新行在下方)、wrap-reverse(换行,新行在上方) |
align-content |
控制多 line 项目在交叉轴上的对齐方式(仅当项目换行时生效) | 取值同 justify-content(如 center、space-between) |
3. 项目属性(作用于子元素)
| 属性名 | 作用说明 | 取值示例 |
|---|---|---|
flex-grow |
项目的 “放大比例”(默认 0,不放大) |
1(剩余空间按比例分配,如两个项目都设 1,各占 50%) |
flex-shrink |
项目的 “缩小比例”(默认 1,溢出时缩小) |
0(不缩小,溢出时显示)、2(比其他项目缩小更快) |
flex-basis |
项目在主轴上的 “基准尺寸”(默认 auto,即项目自身尺寸) |
200px(固定基准宽)、50%(基准宽为容器的 50%) |
flex |
flex-grow + flex-shrink + flex-basis 的简写(推荐使用) |
1(等价于 1 1 auto,自适应放大缩小)、0 0 200px(固定尺寸,不放大不缩小) |
align-self |
单独控制某个项目的交叉轴对齐方式(覆盖容器的 align-items) |
同 align-items 的取值 |
order |
控制项目的排列顺序(默认 0,值越小越靠前) |
1、-1(负数比正数靠前) |
-
示例(水平居中 + 垂直居中的卡片) :
.container { width: 500px; height: 300px; border: 1px solid #eee; display: flex; /* 父元素设为 Flex 容器 */ justify-content: center; /* 主轴(水平)居中 */ align-items: center; /* 交叉轴(垂直)居中 */ } .card { width: 200px; height: 150px; background: #f5f5f5; text-align: center; line-height: 150px; }
九、网格(Grid)布局模块
Grid(网格)是 CSS3 引入的二维布局模型(同时控制 “行” 和 “列”),适合复杂的页面布局(如仪表盘、多栏卡片),比 Flexbox 更灵活。
1. 核心概念:容器(父元素)与项目(子元素)
- 给父元素设置
display: grid,父元素成为 “Grid 容器”,子元素自动成为 “Grid 项目”。 - 容器通过
grid-template-columns/grid-template-rows定义 “列轨道” 和 “行轨道”,轨道之间的间距用grid-gap(或gap)设置。
2. 容器核心属性
| 属性名 | 作用说明 | 取值示例 |
|---|---|---|
display |
定义容器为 Grid 布局 |
grid(块级容器)、inline-grid(行内容器) |
grid-template-columns |
定义 “列轨道” 的数量和宽度 |
100px 200px auto(3 列,宽分别为 100px、200px、自适应)、repeat(3, 1fr)(3 列,每列占 1 份剩余空间)、1fr 2fr(2 列,比例 1:2) |
grid-template-rows |
定义 “行轨道” 的数量和高度 | 同 grid-template-columns(如 100px auto 150px) |
gap / grid-gap
|
定义轨道之间的间距(行列间距) |
10px(行列间距均为 10px)、10px 20px(行间距 10px,列间距 20px) |
grid-template-areas |
给 “网格区域” 命名(方便项目定位) | 见下方示例(用字符串表示区域分布) |
justify-items |
控制项目在 “单元格水平方向” 的对齐方式 |
stretch(默认)、start、center、end
|
align-items |
控制项目在 “单元格垂直方向” 的对齐方式 | 同 justify-items 的取值 |
place-items |
align-items + justify-items 的简写 |
center center(水平 + 垂直居中) |
3. 项目核心属性
| 属性名 | 作用说明 | 取值示例 |
|---|---|---|
grid-column |
控制项目 “列方向” 的位置(起始列线 + 结束列线) |
1 / 3(从第 1 列线到第 3 列线,占 2 列)、span 2(占 2 列) |
grid-row |
控制项目 “行方向” 的位置(起始行线 + 结束行线) |
2 / 4(从第 2 行线到第 4 行线,占 2 行)、span 1(占 1 行) |
grid-area |
项目所属的 “网格区域”(配合容器 grid-template-areas 使用) |
header、main(对应容器定义的区域名) |
justify-self |
单独控制项目在单元格水平方向的对齐方式(覆盖容器 justify-items) |
center、end 等 |
align-self |
单独控制项目在单元格垂直方向的对齐方式(覆盖容器 align-items) |
center、end 等 |
-
示例(三列两行的页面布局):
.grid-container { display: grid; grid-template-columns: repeat(3, 1fr); /* 3列,每列1份 */ grid-template-rows: 100px auto 80px; /* 3行,高分别为100px、自适应、80px */ gap: 10px; /* 间距10px */ grid-template-areas: "header header header" /* 第一行:header 占3列 */ "main main sidebar" /* 第二行:main 占2列,sidebar 占1列 */ "footer footer footer"; /* 第三行:footer 占3列 */ height: 500px; } .header { grid-area: header; background: #007bff; } .main { grid-area: main; background: #f5f5f5; } .sidebar { grid-area: sidebar; background: #eee; } .footer { grid-area: footer; background: #333; color: white; }
十、多列布局(Columns)模块
多列布局用于将文本内容按列分割(类似报纸 / 杂志的分栏效果),适合长文本排版。
| 属性名 | 作用说明 | 取值示例 |
|---|---|---|
column-count |
定义分栏的 “列数”(优先于 column-width) |
2(2 列)、3(3 列) |
column-width |
定义每列的 “最小宽度”(容器足够宽时自动增加列数) |
200px(每列最小 200px) |
column-gap |
定义列之间的 “间距” |
20px、1em
|
column-rule |
定义列之间的 “分隔线”(简写,含宽度、样式、颜色) |
1px solid #eee(1px 灰色实线) |
column-span |
控制元素是否 “跨列”(作用于子元素) |
1(默认,不跨列)、all(跨所有列) |
-
示例(新闻文本分 2 栏) :
.news { width: 800px; column-count: 2; /* 分2栏 */ column-gap: 30px; /* 列间距30px */ column-rule: 1px dashed #***c; /* 列分隔线:1px 虚线灰色 */ } .news-title { column-span: all; /* 标题跨所有列 */ text-align: center; font-size: 24px; }
十一、用户界面(UI)模块
CSS3 新增了部分用于优化用户界面的属性,如光标样式、元素可调整大小等。
| 属性名 | 作用说明 | 取值示例 |
|---|---|---|
cursor |
控制鼠标悬浮在元素上时的 “光标样式” |
pointer(手型,链接默认)、text(文本光标)、move(移动光标)、not-allowed(禁止光标)、url("cursor.png"), auto(自定义光标,需加降级) |
resize |
控制元素是否 “允许用户调整大小” |
none(默认,不允许)、both(水平 + 垂直可调整)、horizontal(仅水平)、vertical(仅垂直)(需配合 overflow: auto 或 hidden 使用) |
outline |
控制元素获取焦点时的 “外边框”(区别于 border,不占空间) |
none(去除默认焦点边框,需自定义焦点样式保证可访问性)、2px solid #007bff
|
appearance |
控制元素的 “默认外观”(如去除下拉框的默认样式) |
none(清除默认外观)、button(模拟按钮外观)(需加浏览器前缀,如 -webkit-appearance) |
-
示例(自定义可调整大小的文本域):
textarea { width: 300px; height: 150px; padding: 10px; border: 1px solid #***c; border-radius: 4px; resize: vertical; /* 仅允许垂直调整大小 */ outline: none; /* 去除默认焦点边框 */ } textarea:focus { border-color: #007bff; /* 自定义焦点边框颜色 */ }
十二、媒体查询(Media Queries)
媒体查询是响应式设计的核心,允许根据设备的屏幕尺寸、分辨率等条件,加载不同的 CSS 样式(如手机、平板、电脑显示不同布局)。
语法结构
/* 基础语法:当条件满足时,应用内部样式 */
@media 媒体类型 and (媒体特性) {
/* 条件满足时的 CSS 样式 */
}
-
媒体类型(可选,默认
all):-
all:所有设备。 -
screen:屏幕设备(电脑、手机、平板等)。 -
print:打印设备。
-
-
常用媒体特性:
-
width/max-width/min-width:屏幕宽度(max-width: 768px表示 “宽度≤768px”,即手机端)。 -
height/max-height/min-height:屏幕高度。 -
orientation:屏幕方向(portrait竖屏,landscape横屏)。 -
resolution:屏幕分辨率(如min-resolution: 2dppx表示高清屏)。
-
-
示例(响应式布局:电脑端 3 列,手机端 1 列):
.card-container { display: grid; grid-template-columns: repeat(3, 1fr); /* 电脑端:3列 */ gap: 20px; } /* 当屏幕宽度 ≤ 768px(手机端)时,改为1列 */ @media screen and (max-width: 768px) { .card-container { grid-template-columns: 1fr; /* 手机端:1列 */ } }
十三、兼容性与浏览器前缀
部分 CSS3 属性在早期浏览器中需添加浏览器前缀才能生效(如 Chrome/Safari 的 -webkit-、Firefox 的 -moz-)。目前主流浏览器(Chrome 60+、Firefox 55+、Edge 16+)已支持大部分属性的标准语法,但如需兼容旧浏览器,可添加前缀。
| 标准属性 | 带前缀的属性(示例) |
|---|---|
transform |
-webkit-transform、-moz-transform
|
transition |
-webkit-transition、-moz-transition
|
animation |
-webkit-animation、-moz-animation
|
border-radius |
-webkit-border-radius、-moz-border-radius
|
box-shadow |
-webkit-box-shadow、-moz-box-shadow
|
-
示例(兼容写法) :
.box { -webkit-border-radius: 10px; /* Safari/Chrome 旧版本 */ -moz-border-radius: 10px; /* Firefox 旧版本 */ border-radius: 10px; /* 标准语法(最后写,优先级高) */ }
十四、总结与学习建议
CSS3 的核心优势在于:
- 布局更灵活:Flexbox 解决一维对齐,Grid 解决二维复杂布局,替代传统浮动。
-
视觉效果更丰富:圆角、阴影、多背景、渐变(
linear-gradient/radial-gradient,未单独列出,常用作背景)等。 - 动画更简单:Transition 实现简单过渡,Animation 实现复杂循环动画,无需 JS。
- 响应式更易实现:媒体查询适配不同设备。
学习建议:
- 不必死记所有属性,重点掌握 Flexbox、Grid、动画、响应式这四大核心模块。
- 结合实际项目练习(如搭建响应式页面、实现动画效果),通过 Can I Use 查看属性兼容性。
- 利用工具(如 VS Code 自动补全、PostCSS 自动添加浏览器前缀)提高开发效率。