04背景与边框
背景是墙面的「装修」,边框是盒子的「相框」。这一章把 background 一族(颜色、图片、平铺、位置、尺寸、简写)和 border / border-radius / outline 一网打尽。
一、background-color:背景色与透明度
background-color 属性用于设置元素的背景颜色。这是 CSS 中最基础的背景属性之一,
可以接受任何有效的 CSS 颜色值,包括颜色关键字、十六进制值、RGB、HSL 等格式。
background-color 会填充元素的整个内容区域和内边距区域,
但不包括边框和外边距。如果元素有圆角,背景色也会跟随圆角形状。| 值 | 效果 | 使用场景 |
|---|---|---|
| #C08A3E | 十六进制色,不透明纯色背景,最常用 | 卡片、按钮、页面的基础底色 |
| rgb(192, 138, 62) | 与十六进制等价的十进制写法 | 需要按通道读数值、做 JS 计算时 |
| rgba(150, 101, 44, 0.35) | 第 4 位控制透明度,只透明背景、不影响文字 | 图片上的彩色蒙层、半透明底色 |
| hsl(30, 60%, 50%) | 按色相 / 饱和度 / 亮度取色,同色系调色方便 | 做一套深浅主题色板 |
| coral 等关键字 | 浏览器内置的 140+ 个命名颜色 | 快速打草稿、教学演示 |
| transparent(默认值) | 完全透明,露出下层内容 | 需要「看穿」元素时显式声明 |
0.8,看半透明变浓1. 纯色背景:为卡片、按钮、输入框等元素设置基础背景色
2. 半透明蒙层:在图片上叠加彩色蒙层,增强文字可读性
3. 状态指示:通过背景色变化表示元素的不同状态(悬停、激活、禁用等)
4. 分层设计:使用不同透明度的背景色创建视觉层次
1.
background-color 不会被子元素继承,但会透过子元素的透明区域显示2. 使用
rgba() 或 hsla() 设置透明度时,只影响背景色,不影响内容文字3. 透明度值范围:0(完全透明)到 1(完全不透明)
4. 在响应式设计中,背景色通常与文字颜色形成足够对比度以满足无障碍标准
二、background-image:背景图与默认平铺
background-image 属性用于为元素设置背景图像。这是创建视觉层次、
添加纹理和实现复杂背景效果的核心属性。
background-image 可以接受多种类型的图像值——
url() 引用图像文件、三种渐变函数现场「画图」、none 表示不设置。详见下表。| 值 | 效果 | 使用场景 |
|---|---|---|
| url("images/hero.jpg") | 引用外部 / 内联图像文件,路径相对于 CSS 文件 | 照片、纹理、图标背景 |
| linear-gradient() | 线性渐变,浏览器现场画出来的图 | 渐变 banner、条纹图案 |
| radial-gradient() | 径向渐变,从圆心向外扩散 | 光晕、圆点纹理 |
| conic-gradient() | 锥形渐变,绕圆心转一圈(CSS3 新增) | 饼图、色轮 |
| none(默认值) | 不设置背景图像 | 覆盖掉别人写过的背景图 |
重要特性:背景图默认会像铺瓷砖一样重复铺满整个元素。 为了离线可演示,下面用渐变生成一块 28px 的「瓷砖」代替图片,平铺现象一目了然:
background-size 改成 56px 56px,看每块瓷砖变大1. 全屏头图:使用
background-size: cover 实现响应式全屏背景2. 纹理图案:使用小尺寸图片平铺创建重复图案
3. 渐变背景:使用渐变函数创建平滑的颜色过渡效果
4. 图标背景:为按钮、链接等元素添加图标背景
5. 多层背景:叠加多个背景图像创建复杂视觉效果
1.
background-image 不会被子元素继承2. 背景图像会覆盖在
background-color 之上3. 如果图像加载失败,会显示
background-color 作为后备4. 渐变也是
background-image 的一种值——它让「一张图」不依赖任何图片文件5. 在移动端要注意背景图像的加载性能,特别是大尺寸图像
三、repeat / position / size / attachment:精细控制
这四个属性共同控制背景图像的显示方式。它们可以单独使用,也可以组合使用, 为开发者提供了精细控制背景图像的能力。
background-repeat 控制平铺方向,
background-position 控制位置,background-size 控制尺寸,
background-attachment 控制滚动行为。这四个属性通常与 background-image 配合使用。3.1 background-repeat:平铺方式
| 值 | 效果 | 使用场景 |
|---|---|---|
| repeat(默认值) | 水平和垂直方向都平铺,边缘处裁切 | 纹理壁纸、铺底图案 |
| repeat-x | 只在水平方向平铺 | 顶部装饰条、横向分隔带 |
| repeat-y | 只在垂直方向平铺 | 左右侧栏的阴影条 |
| no-repeat | 不平铺,只显示一张 | 图标、logo,常配合 position 定位 |
| space | 平铺并均匀分布空隙,两端的图不被裁剪 | 要求每块图案完整出现的图案墙 |
| round | 平铺并自动缩放图像,凑整数铺满不留缝 | 对图案比例不敏感的铺底 |
repeat-x 改成 repeat-y,看铺法转向3.2 background-position:定位方式
两个值先横后纵。关键是百分比的语义:
50% 并不是「图的左缘放在容器 50% 处」,而是图的 50% 处对齐容器的 50% 处——
所以 center(即 50% 50%)恰好居中,100% 100% 等价于 right bottom。
像素值则是从左上角起算的精确偏移。
| 值 | 效果 | 使用场景 |
|---|---|---|
| center | 水平、垂直都居中(等价 50% 50%) | 头图、头像裁切的安全位 |
| right bottom | 关键字九方位任选,顺序可交换 | 贴在角落的装饰图 |
| 15% 20% | 「对齐点」语义:图的 15% 处对齐容器 15% 处 | 跟随容器缩放的响应式定位 |
| 20px 30px | 从左上角落点精确偏移 | 雪碧图(精灵图)取单个图标 |
| center 20px | 水平居中,垂直距顶 20px,混合写法 | 居中但需微调的装饰图 |
| right 20px bottom 10px | 四值语法:先指定边,再写相对该边的偏移 | 「距右 20、距底 10」的固定角标 |
15% 20% 改成 50% 50%,看它跳到正中央3.3 background-size:尺寸控制
| 值 | 效果 | 使用场景 |
|---|---|---|
| auto(默认值) | 保持图像原始尺寸 | 小图标、纹理瓷砖 |
| cover | 等比缩放到铺满容器,超出部分裁掉 | 全屏头图、封面图 |
| contain | 等比缩放到完整装进容器,可能留白 | 必须看全图的展示位 |
| 90px 60px | 强制拉成指定宽高,比例可能变形 | 严格控制占位的缩略图 |
| 50% 80% | 相对容器的宽和高分别缩放 | 跟随容器伸缩的背景 |
| 100%(单值) | 宽撑满、高度 auto 等比 | 通栏横幅背景 |
cover 改成 contain,看裁切变留白3.4 background-attachment:滚动行为
| 值 | 效果 | 使用场景 |
|---|---|---|
| scroll(默认值) | 背景钉在元素上,元素滚动它跟着走 | 绝大多数普通背景 |
| fixed | 背景钉在视口上,滚动时内容从图上「滑过」 | 视差滚动头图(移动端慎用) |
| local | 背景钉在元素内容上,内部滚动时图随内容走 | 可滚动面板里的背景 |
1.
background-attachment: fixed 在移动端 Safari 中支持较差,慎用2.
fixed 会让背景固定在视口中,创建视差滚动效果3.
local 值在移动端支持较好,但兼容性不如 scroll4. 在性能敏感的页面中,避免同时使用多个
fixed 背景| 属性 | 常用值 | 说明 |
|---|---|---|
background-repeat | repeat / no-repeat / repeat-x / repeat-y / space / round | 平铺方向,默认 repeat |
background-position | center / right bottom / 15% 20% / 12px 12px | 图片位置,先横后纵 |
background-size | cover / contain / 100px / 100% / auto | cover 铺满裁边,contain 完整留白 |
background-attachment | scroll(默认)/ fixed / local | fixed 让背景固定不动,滚动时内容「从图上滑过」,常做视差头图;移动端 Safari 支持差,慎用 |
background-size: cover; background-position: center; background-repeat: no-repeat;——任何尺寸的屏幕都能得到一张居中、铺满、不重复的头图。
四、background 简写:顺序与陷阱
background 是背景属性的简写形式,可以一次性设置所有背景相关属性。
这是 CSS 中最常用的简写属性之一,但使用时需要注意顺序和陷阱。
background: [颜色] [图片] [平铺] [位置] / [尺寸] [滚动] [原点] [裁剪];注意:斜杠
/ 用于分隔 background-position 和 background-size。| 顺位 | 子属性 | 省略时默认值 | 备注 |
|---|---|---|---|
| 1 | background-color | transparent | 一层背景只能有一个颜色,建议放最前 |
| 2 | background-image | none | url() 或渐变函数 |
| 3 | background-repeat | repeat | — |
| 4 | background-position | 0% 0% | 和尺寸之间必须用 / 分隔 |
| 5 | background-size | auto | 只能紧跟在 position 的斜杠后面 |
| 6 | background-attachment | scroll | — |
| 7 | background-origin | padding-box | 背景从哪一层开始铺 |
| 8 | background-clip | border-box | 背景画到哪一层为止 |
80px 改成 40px,看圆点变小1. 斜杠分隔符:位置和尺寸之间必须写
/,写成空格整条声明作废2. 属性重置:简写会重置所有没写的子属性——先写
background: url(a.png)
再补 background-color: #fff 没问题,但反过来简写会把颜色冲掉3. 顺序重要:虽然大多数浏览器能容忍顺序变化,但遵循推荐顺序可以确保兼容性
4. 省略规则:可以省略任何值,省略的值使用默认值,但斜杠不能省略
5. 建议:要么全用简写,要么全用分写,别混着来
1. 简单背景:使用简写,代码更简洁
2. 复杂背景:使用分写,更易维护和调试
3. 多背景:必须使用简写,用逗号分隔多个背景
4. 渐变背景:通常使用简写,将渐变函数作为背景图像
5. 响应式设计:建议使用分写,便于媒体查询中单独修改某个属性
五、border:三件套、简写与八种样式
border 属性用于设置元素的边框。边框由三个核心属性组成:
border-width(粗细)、border-style(线型)、
border-color(颜色)。这三个属性可以单独设置,也可以通过简写属性一次性设置。
border 是简写属性,语法为
border: [粗细] [线型] [颜色];。
其中 border-style 是必须的,如果省略,边框将不会显示。
其他属性可以省略,省略时使用默认值:border-width: medium、
border-color: 元素的 color 值。double 那行的粗细改成 2px,看「双线」挤成一条5.1 border-style 属性详解
| 值 | 效果 | 使用场景 |
|---|---|---|
| none(默认值) | 无边框——忘了写 style 时边框完全不显示 | 主动去除边框 |
| hidden | 同 none,但在表格边框冲突时优先级更高 | 处理表格边框冲突 |
| solid | 实线 | 最常用:卡片、按钮、输入框 |
| dashed | 虚线 | 占位区、待上传的虚线框 |
| dotted | 点线 | 柔和的提示框、装饰线 |
| double | 双线,宽度至少 3px 才能看出效果 | 复古证书、票据风 |
| groove | 3D 凹槽,阴影色由 border-color 决定 | 拟物风界面 |
| ridge | 3D 凸脊,阴影色由 border-color 决定 | 拟物风界面 |
| inset | 3D 内嵌,元素像「陷进去」 | 拟物风界面 |
| outset | 3D 外凸,元素像「浮出来」 | 拟物风界面 |
复合值同样按顺时针展开:border-style: solid dashed dotted double; = 上实线、右虚线、下点线、左双线。
5.2 border-width 属性详解
| 值 | 效果 | 使用场景 |
|---|---|---|
| thin | 细边框(通常 1px,具体由浏览器决定) | 发丝级分隔线 |
| medium(默认值) | 中等边框(通常 3px) | 一般不明写,知道默认是它即可 |
| thick | 粗边框(通常 5px) | 需要强调的框 |
| 2px / 0.5em 等长度 | 精确控制,日常工作主力 | 一切日常边框 |
| 2px 4px 6px 8px | 1~4 个值,上右下左顺时针,缺省找对面补齐 | 四边粗细不同时 |
5.3 border-color 属性详解
| 值 | 效果 | 使用场景 |
|---|---|---|
| #C08A3E 等颜色值 | 任意合法 CSS 颜色 | 日常边框配色 |
| rgba(150, 101, 44, 0.5) | 半透明边框,会透出下层背景 | 叠加层次的轻边框 |
| currentColor(默认值) | 跟随元素的 color 值,文字变色边框跟着变 | 边框想与文字同色时(省略不写即可) |
| transparent | 透明边框:看不见但占位置 | hover 才显示边框,提前占位防抖动 |
| 金 棕 绿 红(1~4 值) | 四边异色,顺时针:上 右 下 左 | 彩色拼接装饰 |
border-width 和 border-color
却忘了 border-style——边框完全不见,因为 style 默认是 none。
「没边框」先查 style。1. 卡片边框:使用
border: 1px solid #e0e0e0 创建卡片容器2. 输入框边框:使用不同边框状态表示输入框的聚焦、错误等状态
3. 分隔线:使用
border-bottom 创建列表项之间的分隔线4. 装饰边框:使用不同线型和颜色创建装饰性边框效果
5. 响应式边框:在媒体查询中调整边框粗细或样式
六、单边边框与实战:选项卡指示线
CSS 允许为元素的四条边分别设置边框。这提供了极大的灵活性, 可以创建各种复杂的边框效果,如单边强调线、选项卡指示器等。
border-top / border-right /
border-bottom / border-left。
每个都是简写属性,一条里同时设置宽度、样式和颜色;也可以再拆成
border-top-width 等九个分写属性。border-top 改成 border-left,看强调条换边6.1 实战:选项卡(Tab)选中指示
实战名场面——选项卡(tab)的选中指示:
选中的标签用 border-bottom: none 摘掉底边,
再用 margin-bottom: -2px 往下压 2 像素,盖住内容区的上边框,
视觉上「标签与面板连成一体」:
-2px 改成 0,看标签与面板之间「裂开」一条线如果项目里标签用 flex 布局,同样的思路换一副骨架——透明边框占位、选中时换成白色底边盖住分隔线:
1. 消息提示条:左边 4px 强调线,表示不同类型的信息(成功、警告、错误)
2. 表格分隔线:使用
border-bottom 创建表格行之间的分隔线3. 导航吸底阴影:在导航栏底部添加边框或阴影
4. 列表项分隔:在列表项之间添加底部分隔线
5. 表单字段分组:使用左边框为相关字段添加视觉分组
6. 卡片装饰:在卡片顶部添加彩色边框作为装饰
1. 单边边框会增加元素的尺寸,可能影响布局
2. 使用
box-sizing: border-box 可以避免边框撑大元素3. 在响应式设计中,可能需要在不同屏幕尺寸下调整边框
4. 过多的边框可能会让界面显得杂乱,应适度使用
七、border-radius:圆角、圆与胶囊
border-radius 属性用于设置元素的圆角。这是 CSS3 中最常用的属性之一,
可以创建从轻微圆角到完全圆形的各种效果。
border-radius 是一个简写属性,可以设置一到四个值,
按左上 → 右上 → 右下 → 左下顺时针展开,缺的值「对角补齐」。
值可以是长度单位(px、em、rem)或百分比。| 写法 | 效果 | 使用场景 |
|---|---|---|
| border-radius: 10px | 一个值:四个角相同 | 卡片、输入框的常规圆角 |
| border-radius: 10px 20px | 两个值:左上右下一组,右上左下一组 | 对角呼应的错落设计 |
| border-radius: 10px 20px 30px | 三个值:左上 | 右上左下 | 右下 | 较少用,知道规则即可 |
| border-radius: 10px 20px 30px 40px | 四个值:顺时针各角独立 | 四角各不同的异形卡 |
| border-top-left-radius: 40px | 单角属性,只圆一个角 | 选项卡、聊天气泡 |
| 50%(正方形元素) | 完美的圆 | 头像、圆形徽章 |
| 50%(长方形元素) | 椭圆 | 椭圆形装饰 |
| 999px | 半径超过半高即胶囊,一劳永逸不用算 | 按钮、标签的胶囊形 |
| 70px 30px / 35px 60px | 斜杠分隔水平 / 垂直半径,角变成椭圆弧 | 不规则有机形状 |
50% 改成 30%,看正圆变圆角方1. 「正方形配 50% 是圆」:宽度和高度相等时,50% 的圆角会创建完美的圆形
2. 「胶囊要半径盖过半高」:圆角值大于或等于高度的一半时,会创建胶囊形状
3. 「长方形配 50% 是椭圆」:宽度和高度不等时,50% 的圆角会创建椭圆形
4. 「999px 一劳永逸」:实际写胶囊不必算数,直接使用很大的值(如 999px)
1. 卡片圆角:为卡片容器添加轻微圆角(如 8px、12px)
2. 按钮圆角:为按钮添加圆角,通常使用胶囊形状
3. 头像圆形:使用 50% 圆角创建用户头像的圆形效果
4. 徽章胶囊:使用胶囊形状创建标签、徽章等元素
5. 图片圆角:为图片添加圆角,使其更融入设计
6. 输入框圆角:为输入框添加轻微圆角,提升用户体验
1. 水平/垂直半径:可以使用斜杠
/ 分隔水平和垂直半径,创建更复杂的圆角形状2. 动画圆角:可以使用 CSS 过渡或动画来平滑地改变圆角值
3. 响应式圆角:使用相对单位(如 em、rem)或百分比来创建响应式圆角
4. 边框圆角:圆角会同时影响边框和背景,保持视觉一致性
八、outline:不占布局的轮廓线
outline 属性用于设置元素的轮廓。轮廓与边框类似,但有一些关键区别:
轮廓不占用空间,不会影响元素的尺寸和布局,通常用于表示元素的聚焦状态。
• 位置:outline 画在边框外侧,border 是元素的一部分
• 空间:outline 不占空间,border 会占用空间
• 圆角:outline 跟随 border-radius,但可能不完全贴合
• 单边:border 可以设置单边,outline 只能四边统一
• 用途:outline 通常用于 :focus 状态,border 用于装饰和布局
| 属性 / 值 | 效果 | 使用场景 |
|---|---|---|
| outline: 3px solid #C08A3E | 简写:粗细 线型 颜色,style 同样是灵魂 | 焦点圈一把梭 |
| outline-width | 同 border-width:thin / medium / thick / 长度 | 需要更粗的焦点指示 |
| outline-style | 与 border-style 同一套值,默认 none | 虚线焦点圈等个性样式 |
| outline-color | 任意颜色,默认 currentColor | 与背景形成高对比的焦点色 |
| outline-offset: 3px | 轮廓与元素边缘之间的空隙,可正可负 | 让焦点圈「悬空」不贴边,更精致 |
outline-offset 的空隙8.1 outline 与 border 的对比
再用两个同尺寸盒子直观对比「占不占布局」(特意用 content-box,下一章会讲为什么):
| 对比项 | border | outline |
|---|---|---|
| 是否占布局 | 占:撑大盒子、推开邻居 | 不占:悬浮在外侧 |
| 能否只设单边 | 能(border-top 等) | 不能,四边一体 |
| 跟随圆角 | 天然跟随 border-radius | 现代浏览器也跟随圆角 |
| 典型用途 | 卡片描边、分隔线、装饰 | :focus 聚焦框、调试看边界 |
| 性能影响 | 重绘和回流 | 通常只触发重绘 |
outline: none——
键盘用户会瞬间失去「我在哪」的指示。要美化聚焦态,正确做法是像上面那样
自定义 :focus 的 outline 样式,而不是删掉它。1. 聚焦状态:为可交互元素(按钮、链接、输入框)添加聚焦轮廓
2. 调试布局:临时添加 outline 来查看元素的实际边界
3. 无障碍设计:确保键盘导航时有清晰的焦点指示
4. 高亮显示:在特定状态下(如选中、激活)显示轮廓
5. 表单验证:在输入框验证失败时显示红色轮廓
1. 始终提供焦点指示:对于可交互元素,必须提供可见的焦点状态
2. 自定义样式:使用
:focus-visible 伪类,在键盘导航时显示焦点3. 对比度:确保焦点轮廓与背景有足够的对比度
4. 一致性:在整个网站中保持焦点样式的统一
5. 偏移量:使用
outline-offset 避免轮廓紧贴元素边缘九、本章小结
- 背景五虎将:
background-color / image / repeat / position / size,简写顺序「颜色 图片 平铺 位置 / 尺寸」 - 背景图默认平铺;全屏头图三件套:
cover + center + no-repeat rgba第 4 位做半透明背景;渐变也是一种 background-image- 边框三件套缺一不可,不写 border-style 就没有边框
- 单边边框做指示线;选项卡选中态 = 去底边 + 负 margin 下压
- 圆角口诀:正方形 50% 成圆,半径过半高成胶囊
- outline 不占布局,专职
:focus聚焦框;删 outline 前请三思 - 背景附件:
background-attachment: fixed创建视差滚动效果 - 简写陷阱:位置和尺寸之间必须写
/,简写会重置未写的子属性
linear-gradient 画 120px 高的封面区(两种你喜欢的颜色);
右上角一个 50% 圆形的「Hi-Res」小徽章;歌名加粗,歌手用半透明色;
底部一条胶囊形「播放」按钮。每个属性都在编辑器里改值验证过再往下走。十、章节练习
使用本章学到的背景和边框知识,创建一个个人资料卡片。要求如下:
练习:创建个人资料卡片
基本要求:
- 卡片容器:白色背景,圆角 12px,2px 实线边框(颜色自选)
- 头像区域:100px × 100px 的圆形头像,使用 50% 圆角
- 用户名:加粗,使用半透明背景色(rgba)
- 简介文字:使用较小的字号,颜色稍浅
- 关注按钮:胶囊形状,使用渐变背景
进阶要求:
- 为卡片添加轻微的阴影效果(box-shadow,下一章会详细讲)
- 为按钮添加聚焦状态的 outline 样式
- 使用背景图或渐变为卡片顶部添加装饰条
- 为卡片添加悬停效果(如轻微放大或边框颜色变化)
提示:
- 使用
border-radius: 50%创建圆形头像 - 使用
background: linear-gradient(...)创建渐变按钮 - 使用
background-color: rgba(...)创建半透明背景 - 使用
outline为按钮添加聚焦样式 - 使用
background-image和background-size创建装饰条
参考实现(可以直接改着玩):
::before 装饰条的渐变换成你喜欢的三种颜色前端学徒 · 咖啡与代码双料爱好者,正在把盒模型刻进 DNA。
挑战任务:
- 使用
background-attachment: fixed为卡片添加视差滚动效果 - 使用
background-size: cover为卡片添加全屏背景图 - 使用
border-image为卡片添加图片边框 - 使用
background-blend-mode创建混合模式效果