必须配background-size是因为渐变本质是静态背景图,只有当background-size大于容器时,background-position才有移动空间;若为auto或100% 100%,则严丝合缝无位移余量。
渐变背景动画不是靠切换 background-color 实现的,而是用 linear-gradient() 配合 background-position 位移来“动”起来;直接 animating background 或只写 background 不设 background-size,动画基本无效。
渐变本质是一张“图片”,background-position 只有在背景图比容器大时才有可移动空间。如果 background-size 是默认的 auto 或 100% 100%,那它就严丝合缝贴在元素上,background-position: 100% 50% 也移不出任何效果。
background-size: 200% 200% 是常用起点:提供横向和纵向各一倍的冗余空间400% 400%,避免颜色带在循环点断裂background-size: cover 或 contain —— 它们会重置为自适应尺寸,动画立刻失效background-size 值敏感,避免用小数如 199.9%,统一用整数常见错误是 0% 和 100% 写成同一值但中间突变,或用了 to top 这类关键词——它们不参与插值计算,浏览器会退化为离散跳变。
0% { background-position: 0% 50%; }、50% { background-position: 100% 50%; }
50% 垂直居中),否则动画末尾会“弹回”to right 或 from/to 颜色停靠点——这些是声明语法,不是动画属性值ease-in-out,linear 在长周期动画里容易晕眩因为 body 默认不是定位上下文,background-attachment 的行为在滚动中不稳定,尤其 Chrome 下会触发重绘撕裂。
立即学习“前端免费学习笔记(深入)”;
<div id="bg"></div>,设 position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1;
body 或 html 设 overflow: hidden 来“修复抖动”——这会锁死滚动,破坏可访问性height: 100vh 而非 100%,避免嵌套高度塌陷径向渐变的 at 位置参数本身不能被动画,强行 animating 会触发回退或渲染异常;真正能动的只有 background-position,但它对 radial-gradient 的影响远不如线性明显。
radial-gradient(circle at 20% 30%, ...) —— 无效linear-gradient(45deg, transparent, rgba(255,255,255,0.1), transparent) + background-position 模拟高光移动background-origin: border-box 时,加上它可统一参考系radial-gradient 动画支持弱,建议降级为 linear-gradient 方案保底最易被忽略的是:所有渐变动画都依赖硬件加速,但 background-position 默认不触发 GPU;加一句 transform: translateZ(0) 或 will-change: background-position(仅限关键元素)才能真正稳帧——不过后者滥用会反向拖慢性能。