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;
}
十四、性能优化建议
  1. 选择合适的图片格式:优先使用 WebP 等现代格式,减小文件大小。

  2. 优化图片尺寸:使用与实际显示尺寸匹配的图片,避免不必要的缩放。

  3. 合理使用渐变:对于简单的背景效果,CSS 渐变比图片更高效。

  4. 限制背景层数量:过多的背景层会增加渲染复杂度。

  5. 谨慎使用 background-attachment: fixed:在移动设备上可能影响性能。

  6. 利用 CSS 变量:对于重复使用的背景值,使用 CSS 变量提高可维护性。

十五、浏览器兼容性

  • 现代浏览器支持所有 background 属性。

  • 对于旧浏览器,可能需要添加前缀(如 -webkit-、-moz-)。

  • background-clip: text 和某些高级渐变效果在 IE 中不支持。

总结

CSS 的 background 属性是一个功能丰富的属性集,允许开发者创建从简单纯色到复杂多图层渐变的各种背景效果。通过掌握其各个子属性和简写语法,你可以灵活地控制元素的视觉表现,提升网页的设计质量和用户体验。

彩蛋

本文在Cnb平台上全面展示了CSS 背景 的示例代码,欢迎访问《CSS背景完整演示》以获取更多详细内容。