03背景与渐变
CSS3 把背景从「一张平铺图」升级成一套图层系统: 多层叠加、任意缩放、分区裁剪;而渐变函数让 CSS 不发一个请求就能「画图」—— 按钮、横幅、条纹、光斑全是代码画出来的。
一、CSS3 背景增强总览
先把新武器摆上桌。下面这批属性里,background-image 支持的
渐变函数和「逗号分隔的多层写法」,是 CSS3 背景的灵魂:
| 属性 / 函数 | 作用 | 常用值 |
|---|---|---|
| background-image | 背景图层,可逗号分隔叠多层 | url() / 渐变函数 |
| background-size | 每层的尺寸 | cover / contain / px / % |
| background-origin | 定位的参考区域 | border-box / padding-box / content-box |
| background-clip | 绘制的裁剪区域 | 同上,另有 text(渐变文字) |
| background-position | 每层的位置(可分层) | center / left top / x y |
| background-repeat | 平铺方式(可分层) | repeat / no-repeat / repeat-x |
| background-attachment | 随内容滚动还是钉在视口 | scroll / fixed(视差效果) |
| linear-gradient() | 线性渐变(直线过渡) | 方向 + 色标 |
| radial-gradient() | 径向渐变(中心扩散) | 形状 + 位置 + 色标 |
| conic-gradient() | 锥形渐变(绕圆心转) | 起始角 + 色标 |
| repeating-*-gradient() | 重复渐变(条纹) | 同上三兄弟 |
background-image(以及 border-image)的取值,
不是独立属性——所以它不能当 background-color 用,但可以和其他背景层层叠加。二、多重背景:像图层一样叠加
background-image 用逗号分隔可以写多层,
先写的在最上面——和 PS 的图层面板一个逻辑:
光斑、纹理放上层的半透明渐变,底色放最下面。
transparent 26px 改成 transparent 10px,光斑变小三、background-size:cover 与 contain 之争
背景图默认按「原始尺寸」显示,塞不满容器就会平铺或留白。
background-size 负责缩放,两个明星值必须分清:
cover「铺满裁边」、contain「完整留白」。
.a 的 cover 改成 contain 看留白| 场景 | 用哪个 | 理由 |
|---|---|---|
| 全屏首屏横幅 | cover | 必须铺满,裁掉就裁掉 |
| 商品图 / 头像框 | cover | 比例统一不变形(配合裁切) |
| logo / 图标 | contain | 完整显示最重要 |
四、background-origin 与 background-clip:三个盒子区域
一个元素从外到内有三层区域:border-box(含边框)→ padding-box(含内边距)→ content-box(只有内容)。 这对属性就是问背景两个问题:
background-origin:定位从哪个区域算起(背景图的原点)background-clip:背景绘制到哪个区域为止(超出就裁掉)
.a 铺到边框底下,.c 只铺内容区;把 .c 的 origin 改成 border-box 试试五、linear-gradient:线性渐变
沿着一条直线从一个颜色过渡到另一个颜色。语法三要素: 方向 + 至少两个颜色(色标)。 色标后面可以跟位置,位置可以只写一部分——两个色标挤在同一个位置,就是「硬边」。
方向、多色、色标、硬边四种玩法——改改角度和百分比:
.d 的双位置 50% 改成 70%,硬边位置右移;.b 的角度改成 45deg0deg 向上、90deg 向右、180deg 向下、270deg 向左。
「to right」和「90deg」是同一个意思。六、radial-gradient:径向渐变
从一个圆心向四周扩散,适合光晕、聚光灯、立体球。
语法:radial-gradient(形状 at 位置, 色标…),
形状 circle(正圆)/ ellipse(椭圆,默认)。
.b 的高光从 30% 30% 挪到 70% 30%,立体球的光源方向翻转七、conic-gradient 与 repeating:条纹与色环
conic-gradient 锥形渐变绕着圆心转圈配色——
色环、进度环的官方解法;repeating-linear-gradient 重复线性渐变则是
条纹纹理生成器(警戒条、斑马纹、进度条格纹)。
65% 改成 25% 或 90%、把条纹的 24px 改成 8px、角度 45deg 改 90deg——改一个数字换一种纹理conic-gradient(颜色 0 百分比, 底色 百分比 100%)
+ 中心盖圆。百分比由 JS 更新时,改一下 style 就能动态转起来。八、实战:渐变按钮与渐变文字
两个高频实战:渐变按钮(渐变 + 阴影 + hover),
和渐变文字——把渐变裁进文字笔画里,
核心是 background-clip: text + 把文字填色变透明。
渐变文字:把彩虹装进笔画
background-clip: text 至今习惯带上 -webkit- 双写;
而 -webkit-text-fill-color 一旦生效会盖过 color——
所以兜底纯色要写在前面(又见第 1 课的「先保底,再加糖」)。九、本章小结
- 背景是图层系统:
background-image逗号分隔多层,先写的在上 background-size:cover铺满裁边、contain完整留白,还能指定 px / %background-origin管「从哪算起」,background-clip管「画到哪为止」,都有 border / padding / content 三区,clip 还有text- 渐变四兄弟:
linear直线、radial扩散、conic转圈、repeating出条纹 - 色标可带位置,两个色标挤同一位置 = 硬边——分栏、进度环、双色按钮的基础
- 立体球公式:高光
at 30% 30%+ 圆形容器;进度环公式:conic硬切 + 中心盖圆 - 渐变文字:
background-clip: text+-webkit-text-fill-color: transparent,先写color兜底
65% 改成 25% 和 90%;
再把警戒条纹的角度 45deg 改成 90deg、把 24px 改成 8px。
体会「改一个数字,换一种纹理」——渐变是最好的免费画图工具。