CSS 的 background 属性是一个功能强大且灵活的简写属性,用于控制元素的背景样式。结合 web.dev 提供的权威内容,我们将全面深入地理解这个重要的 CSS 属性。
一、背景层的概念
在探讨具体属性前,需先厘清CSS盒模型的基本架构及其背景层的核心概念。
1.1 CSS 盒模型的基本结构
一个 HTML 元素在页面中占据的空间由以下几个部分组成(从内到外):
content-box:内容区域,包含元素的实际内容(文本、图片等)。
padding-box:内边距区域,是 content-box 与 border-box 之间的空间。
border-box:边框区域,包围着 padding-box。
margin-box:外边距区域,是元素与其他元素之间的空白空间。
1.2 CSS 中的背景层概念:
每个元素都有一个专用的背景层,位于内容后面。
背景层默认从 padding-box 区域开始绘制,不会与边框重叠。
可以同时定义多个背景层,形成堆叠效果。
二、背景的默认绘制流程
当我们为元素设置 background-color 或 background-image 时,其默认绘制流程遵循以下规则:
2.1 背景绘制范围
默认绘制区域:背景从 padding-box 区域开始绘制。
覆盖范围:背景会完整覆盖 content-box (内容区域)和 padding-box (内边距区域)。
边界限制:默认情况下,背景 不会延伸到 border-box(边框区域)。
2.2 背景与边框的层叠关系
绘制顺序:背景先绘制,边框随后绘制在背景 之上。
视觉层次:边框作为前景元素覆盖在背景之上,形成明确的层次结构。
边框区域特性:边框自身区域不包含元素的背景色或背景图片(因为background和 border 实际上是两个层,它们间是分层隔离的)。
2.3 特殊边框的视觉效果
当边框设置为半透明或特殊样式(如虚线、点线)时:
透过边框可见内容:我们可以透过边框看到的是 元素下方的内容 (如页面背景)。
不可见内容:无法透过边框看到元素自身的背景色或背景图片。
原理:由于边框区域没有元素的背景,半透明边框会直接显示其下方的内容。
"元素下方的内容":
指的是元素本身之外、在视觉层级上位于该元素下方的其他内容(如页面背景色、父元素背景、或其他被覆盖的元素)。
元素内部层级:
background → border → content 的顺序是 CSS 规范硬性规定的。
元素的视觉层级:
在 CSS 中,元素的视觉层级从下到上依次是:
元素下方的其他内容(页面背景、父元素等)。
元素的背景(background)。
元素的边框(border)。
元素的内容(content)。
2.4 元素内部层级可视化图示

三、背景颜色(background-color)
background-color 属性设置元素的基础背景颜色。
基本用法:
/* 基本用法 */
.element {
background-color: #f06; /* 十六进制 */
background-color: rgb(255, 0, 102); /* RGB */
background-color: rgba(255, 0, 102, 0.5); /* 带透明度的RGB */
background-color: hsl(340, 100%, 50%); /* HSL */
background-color: hsla(340, 100%, 50%, 0.5); /* 带透明度的HSL */
}关键特性:
颜色值会填充元素的整个背景区域(受 background-clip 影响)。
当使用多个背景时,background-color 会作为最底层的背景。
默认值为 transparent (透明)。
四、背景图片(background-image)
background-image 属性允许使用图片或 CSS 渐变作为背景:
值类型 | 语法示例 | 描述 |
|---|---|---|
基础值 | none | 默认值,无背景图像 |
图像源 | url('路径') | 使用图片文件作为背景 |
渐变效果 | linear-gradient(方向, 颜色1, 颜色2, ...) | 创建线性渐变背景 |
radial-gradient(形状 大小 at 位置, 颜色1, 颜色2, ...) | 创建径向渐变背景 | |
conic-gradient(起始角度 at 位置, 颜色1, 颜色2, ...) | 创建锥形渐变背景 | |
重复渐变 | repeating-linear-gradient(...) | 创建重复的线性渐变 |
repeating-radial-gradient(...) | 创建重复的径向渐变 | |
repeating-conic-gradient(...) | 创建重复的锥形渐变 | |
多重背景 | url('image1.jpg'), linear-gradient(to right, red, blue) | 同时设置多个背景图像,用逗号分隔 |
其他(实验性) | image-set('路径' 1x, '路径' 2x, ...) | 根据设备分辨率选择合适的图像 |
element(#id) | 使用页面中指定ID的元素作为背景 | |
cross-fade(url('image1'), url('image2'), 50%) | 混合两个图像 |
4.1 图片背景
使用 url() 函数引用图片
/* 使用 url() 函数引用图片 */
.element {
background-image: url("pattern.png");
background-image: url("data:image/svg+xml;base64,..."); /* 内联 SVG */
}4.2 CSS 渐变背景
渐变是 CSS 生成的图像,无需外部资源:
线性渐变
/* 线性渐变 */
.element {
background-image: linear-gradient(to right, red, blue); /* 从左到右 */
background-image: linear-gradient(45deg, red, blue); /* 45度角 */
background-image: linear-gradient(to bottom right, red, yellow, blue); /* 多色 */
}径向渐变
/* 径向渐变 */
.element {
background-image: radial-gradient(circle, red, blue); /* 圆形 */
background-image: radial-gradient(ellipse at center, red, blue); /* 椭圆形 */
background-image: radial-gradient(closest-side at 20% 50%, red, blue); /* 复杂参数 */
}重复渐变
.element {
background-image: repeating-linear-gradient(45deg, red, red 10px, blue 10px, blue 20px);
background-image: repeating-radial-gradient(circle, red, blue 10px, red 20px);
}五、背景重复(background-repeat)
控制背景图片的重复方式:
属性值 | 描述 |
|---|---|
repeat | 默认,水平和垂直都重复 |
repeat-x | 仅水平重复 |
repeat-y | 仅垂直重复 |
no-repeat | 不重复 |
space | 均匀分布,不裁剪 |
round | 缩放以适应容器 |
示例:
.element {
background-repeat: repeat; /* 默认,水平和垂直都重复 */
background-repeat: repeat-x; /* 仅水平重复 */
background-repeat: repeat-y; /* 仅垂直重复 */
background-repeat: no-repeat; /* 不重复 */
background-repeat: space; /* 均匀分布,不裁剪 */
background-repeat: round; /* 缩放以适应容器 */
}六、背景位置(background-position)
定义背景图片在元素内的起始位置:
值类型和语法示例 | 描述 |
|---|---|
关键字值 | |
top | 顶部对齐,第二个值默认为 center(等同于 top center) |
bottom | 底部对齐,第二个值默认为 center(等同于 bottom center) |
left | 左侧对齐,第二个值默认为 center (等同于 left center) |
right | 右侧对齐,第二个值默认为 center (等同于 right center) |
center | 居中对齐,第二个值默认为 center (等同于 center center) |
关键字组合 | |
top left | 左上角对齐(等同于 left top) |
top right | 右上角对齐(等同于 right top) |
bottom left | 左下角对齐(等同于 left bottom) |
bottom right | 右下角对齐(等同于 right bottom) |
百分比值 | |
0% 0% | 左上角对齐(默认值) |
50% 50% | 居中对齐(等同于 center center) |
100% 100% | 右下角对齐(等同于 bottom right) |
25% 75% | 水平25%,垂直75%的位置 |
长度值 | |
0 0 | 左上角对齐(默认值,单位可省略为0) |
10px 20px | 距离左侧10px,距离顶部20px的位置 |
2em 50px | 距离左侧2em,距离顶部50px的位置 |
混合值 | |
10px center | 距离左侧10px,垂直居中对齐 |
right 20px | 距离右侧20px,水平右对齐 |
center 30% | 水平居中,垂直30%的位置 |
多背景位置 | |
url('img1.jpg') top left, url('img2.jpg') bottom right | 为多个背景图像分别设置位置,用逗号分隔 |
说明:
当仅提供一个值时,第二个值默认为 center (如 top 等同于 top center)。
关键字组合的顺序不影响结果(如 top left 与 left top 效果相同)。
百分比值的参考点是:图像的 X% 位置与容器的 X% 位置对齐。
长度值的参考点是:图像左上角距离容器左上角的偏移量。
支持负值,用于将图像定位到容器外。
现代浏览器支持多背景图像,每个背景图像的位置用逗号分隔。

示例:
.element {
/* 关键字 */
background-position: top left;
background-position: center center;
/* 像素或其他长度单位 */
background-position: 10px 20px; /* X轴 10px,Y轴 20px */
/* 百分比 */
background-position: 25% 75%; /* X轴 25%,Y轴 75% */
/* 混合使用 */
background-position: right 10px bottom 20px; /* 右边缘10px,下边缘20px */
}七、背景大小(background-size)
控制背景图片的尺寸:
属性值 | 描述 |
|---|---|
关键字值 | |
auto | 默认值,保持图像原始尺寸和比例,若只设置一个值,第二个值默认为 auto |
cover | 缩放图像完全覆盖容器,可能会裁剪图像边缘,保持图像比例 |
contain | 缩放图像完全适应容器,图像完整显示,保持图像比例,可能会留空白 |
长度值 | |
100px 50px | 设置图像宽100px,高50px,可能会扭曲图像比例 |
5em auto | 设置图像宽5em,高度自适应保持比例 |
百分比值 | |
100% 100% | 图像宽高均为容器宽高的100%,可能会扭曲图像比例 |
50% auto | 图像宽度为容器宽度的50%,高度自适应保持比例 |
单值语法 | |
200px | 仅设置宽度,高度默认为 auto (保持原始比例) |
80% | 仅设置宽度为容器的80%,高度默认为 auto (保持原始比例) |
多背景尺寸 | |
cover, 50% auto | 为多个背景图像分别设置尺寸,用逗号分隔,与 background-image 顺序对应 |
说明:
当仅提供一个值时,第二个值默认为 auto (保持图像原始比例)。
cover 和 contain 都会保持图像原始比例,区别在于:
cover 保证容器被完全覆盖,图像可能被裁剪。
contain 保证图像完整显示,容器可能有空白区域。
长度值和百分比值可以单独控制宽高,可能导致图像比例失真。
支持多背景图像,每个背景的尺寸用逗号分隔,与 background-image 顺序一一对应。
现代浏览器支持所有这些值,无需额外前缀。
示例:
.element {
background-size: auto; /* 默认,保持原始尺寸 */
background-size: 100px 50px; /* 固定尺寸 */
background-size: 50% 75%; /* 相对于容器的百分比 */
background-size: cover; /* 覆盖整个容器,保持比例,可能裁剪 */
background-size: contain; /* 完整显示,保持比例,可能留空白 */
}注意:在简写属性中 background-size 必须紧跟在 background-position 之后,用斜杠
/分隔:
.element {
background: url("image.jpg") no-repeat center center / cover;
}八、背景附件(background-attachment)
控制背景图片的滚动行为:
值类型和语法示例 | 描述 |
|---|---|
关键字值 | |
scroll | 默认值,背景图像相对于元素本身固定,不随元素内容滚动而移动 |
fixed | 背景图像相对于浏览器视口固定,即使页面滚动,图像位置始终保持不变 |
local | 背景图像相对于元素的内容区域固定,当元素内容滚动时,背景图像会跟随内容一起滚动 |
全局值 | |
inherit | 继承父元素的 background-attachment 属性值 |
initial | 设置为该属性的默认值(即scroll) |
unset | 重置为自然值,若父元素有继承值则继承,否则使用初始值 |
说明:
scroll 是默认行为,背景图像相对于元素框固定,内容滚动时背景不移动。
fixed 会使背景图像固定在视口,常用于创建视差滚动效果。
local 是相对较新的属性值,背景图像会随元素内容滚动而移动,适用于可滚动的容器元素。
全局值(inherit、initial、unset)是CSS通用的属性值,适用于大多数CSS属性。
示例:
.element {
background-attachment: scroll; /* 默认,随元素滚动 */
background-attachment: fixed; /* 固定在视口,不随页面滚动 */
background-attachment: local; /* 随元素内容滚动 */
}九、背景原点(background-origin)
指定背景图片的定位原点(参考系):
值类型和语法示例 | 描述 |
|---|---|
关键字值 | |
padding-box | 默认值,背景图像从内边距区域(padding)开始显示,背景定位相对于内边距框的左上角 |
多背景语法 | |
padding-box, content-box | 为多个背景图像分别设置起始区域,用逗号分隔,与 background-image 顺序对应 |
全局值 | |
inherit | 继承父元素的 background-origin 属性值 |
initial | 设置为该属性的默认值(即 padding-box) |
unset | 重置为自然值,若父元素有继承值则继承,否则使用初始值 |
说明:
background-origin 用于指定背景图像的定位基准(即 background-position 的计算起点)。
该属性只影响背景图像的显示位置,不影响背景颜色的绘制区域。
当 background-attachment 为 fixed 时,background-origin 失效,因为固定背景是相对于视口定位的。
现代浏览器支持所有这些值,无需额外前缀。

示例:
.element {
background-origin: padding-box; /* 默认,相对于内边距盒 */
background-origin: border-box; /* 相对于边框盒 */
background-origin: content-box; /* 相对于内容盒 */
}十、背景裁剪(background-clip)
指定背景的绘制区域:
值类型和语法示例 | 描述 |
|---|---|
关键字值 | |
border-box | 默认值,背景绘制到边框的外边缘,包括边框本身的区域 |
padding-box | 背景绘制到内边距的外边缘,不包含边框区域 |
content-box | 背景仅绘制到内容区域的边缘,不包含内边距和边框区域 |
text | 背景被裁剪为文字的形状,文字显示为透明,需要配合 -webkit-text-fill-color: transparent 使用以显示效果 |
多背景语法 | |
padding-box, content-box | 为多个背景分别设置裁剪区域,用逗号分隔,与 background-image 顺序一一对应 |
全局值 | |
inherit | 继承父元素的 background-clip 属性值 |
initial | 设置为该属性的默认值(即 border-box) |
unset | 重置为自然值,若父元素有继承值则继承,否则使用初始值 |
说明:
background-clip 控制背景(包括背景颜色和背景图像)的绘制区域,决定背景从哪个区域开始显示和裁剪。
text 值是CSS3新增的,需要配合 -webkit-text-fill-color: transparent 才能实现文字渐变效果,目前主流浏览器 都已支持。
对于多背景,每个背景可以有独立的 background-clip 值,用逗号分隔对应每个背景层。
该属性与 background-origin 相关但作用不同:origin 控制背景定位的起点,clip 控制背景绘制的范围。

示例:
.element {
background-clip: border-box; /* 默认,绘制到边框盒 */
background-clip: padding-box; /* 绘制到内边距盒 */
background-clip: content-box; /* 绘制到内容盒 */
background-clip: text; /* 裁剪为文字形状(需要配合透明文字) */
}示例:文字渐变效果(结合 background-clip: text):
.gradient-text {
background: linear-gradient(to right, red, blue);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
color: transparent; /* 确保兼容性 */
}十一、多个背景层
CSS 允许为一个元素设置多个背景层,用逗号分隔:
示例:
.element {
background:
url("icon.png") no-repeat center top, /* 上层背景 */
linear-gradient(to bottom, #f00, #00f) no-repeat, /* 中层背景 */
#fff; /* 底层背景色 */
}注意事项:
背景层按声明顺序堆叠,第一个背景层在最上面。
只有最后一个背景层可以设置 background-color。
每个背景层可以有自己的 background-repeat、background-position 等属性。
十二、背景简写语法
background 简写属性可以同时设置多个背景相关属性:
/* 完整语法 */
background: [background-color] [background-image] [background-repeat] [background-attachment] [background-position] / [background-size] [background-origin] [background-clip];
/* 示例 */
.element {
background: #fff url("image.jpg") no-repeat fixed center center / cover;
}简写规则:
各值之间用空格分隔。
background-size 必须在 background-position 之后,用斜杠
/分隔。可以省略任何不使用的属性。
对于多个背景层,用逗号分隔每组值。
十三、实际应用案例
13.1 全屏响应式背景图片
body {
background: url("bg.jpg") no-repeat center center fixed;
background-size: cover;
}13.2 视差滚动效果
.parallax-section {
background: url("parallax.jpg") no-repeat center;
background-size: cover;
background-attachment: fixed;
height: 500px;
}13.3 带图案的渐变背景
.card {
background:
url("pattern.png") repeat,
linear-gradient(to bottom, #f5f5f5, #e0e0e0);
padding: 20px;
border-radius: 8px;
}13.4 进度条效果
.progress-bar {
background-color: #e0e0e0;
height: 20px;
border-radius: 10px;
overflow: hidden;
}
.progress-bar::after {
content: "";
display: block;
background: linear-gradient(to right, #4CAF50, #45a049);
height: 100%;
width: 75%; /* 进度百分比 */
background-attachment: local;
}十四、性能优化建议
选择合适的图片格式:优先使用 WebP 等现代格式,减小文件大小。
优化图片尺寸:使用与实际显示尺寸匹配的图片,避免不必要的缩放。
合理使用渐变:对于简单的背景效果,CSS 渐变比图片更高效。
限制背景层数量:过多的背景层会增加渲染复杂度。
谨慎使用 background-attachment: fixed:在移动设备上可能影响性能。
利用 CSS 变量:对于重复使用的背景值,使用 CSS 变量提高可维护性。
十五、浏览器兼容性
现代浏览器支持所有 background 属性。
对于旧浏览器,可能需要添加前缀(如 -webkit-、-moz-)。
background-clip: text 和某些高级渐变效果在 IE 中不支持。
总结
CSS 的 background 属性是一个功能丰富的属性集,允许开发者创建从简单纯色到复杂多图层渐变的各种背景效果。通过掌握其各个子属性和简写语法,你可以灵活地控制元素的视觉表现,提升网页的设计质量和用户体验。
彩蛋
本文在Cnb平台上全面展示了CSS 背景 的示例代码,欢迎访问《CSS背景完整演示》以获取更多详细内容。