以下线性渐变用作主要背景图像:
html, body, svg {margin: 0; padding: 0; width: 100%; height: 100vh;}
<svg id="svg">
<defs>
<linearGradient id="gradient">
<stop offset="0" stop-color="brown"/>
<stop offset="2" stop-color="chocolate"/>
</linearGradient>
</defs>
<rect x="0" y="0" width="100%" height="100vh" fill="url(#gradient)"/>
众所周知,渐变是从一种颜色到另一种颜色的平滑过渡。它们之间可以有多种颜色和过渡。在此示例中,仅使用了两种颜色 - 棕色和巧克力色。
我需要实现这个渐变的动画。您需要开始一个分离的垂直白色条带,该条带将从左向右移动,然后向相反方向移动。因此,从一个边缘移开,该条带将与它一起拉动渐变,从而以从一种颜色到白色的平滑过渡填充主背景。然后在相反的方向,用从另一种颜色到白色的平滑过渡填充主背景。
动画脚本:
- 垂直的白色条纹从左向右移动,以从棕色到白色的平滑过渡填充主背景;
- 一条垂直的白色条纹从右向左移动,以从巧克力色到白色的平滑过渡填充主背景;
- 动画正在循环播放。
这是此类动画最简单的场景。但是,如果可能的话,那么我想使这种情况复杂一点:
- 垂直的白色条纹从左向右移动,以从棕色到白色的平滑过渡填充主背景。在此动画期间,主背景图像被转换为顺时针方向的 360度旋转;
- 垂直的白色条纹从右向左移动,以从巧克力色到白色的平滑过渡填充主背景。在此动画期间,主背景图像转换为 360o逆时针旋转;
- 动画正在循环播放。
建议通过问题标签中指示的任何方式来实现这样的动画,即两者CSS,SMIL SVG和使用JavaScript(这可以是 Canvas - 使用编程语言 - JavaScript 的 HTML 元素)。

在下面的所有示例中,
gradientUnits="objectBoundingBox"这是默认值,因此,如果没有明确指定,gradientUnits="userSpaceOnUse"属性值将分别以百分比或分别为от 0 до 1,这意味着渐变会影响整个图形。我们将对渐变属性
x1,x2,y1,的值进行动画处理y2#一。移动白色条纹,颜色从左到右扫过
#2。白条旋转
#3。白色条纹与星内其他颜色的旋转
#四。底部路径上的双星渐变旋转
#5。双星不同,在不同轮廓上旋转渐变
在运行条后面进行颜色扫描的其他示例
#一。水平从左到右和后退
#2。垂直颜色扫描
#3。在一个角度
#4. 悬停时将一对颜色更改为另一对 (对我来说看起来很漂亮)
[奖金]
使用渐变动画旋转三个环
有这样的扭曲,但到目前为止还没有解决:
我建议根据第一个(简化的)场景使用
SMIL SVG.为了实现这样的动画,我们需要为渐变添加一种颜色——白色:
添加动画,并为其指定必要的属性和值:
attributeName=offset——该参数负责渐变区域的边界;dur=5s— 动画持续时间;values=0;1;0- 将确定动画顺序的值列表;repeatCount=indefinite- 动画执行的次数。该值indefinite表示动画将无限重复。所有这些都包含在一个标签中
<animate>:让我们将渐变线的斜率旋转 90 o
解决方案
白条及其动画出现在悬停时
linear-gradientbackground-position水平动画
垂直动画
我建议根据使用技术的第一个(简化)场景来考虑动画选项
CSS在这个版本中,我们可以使用伪元素
::before和::after元素来实现这样的动画<body>,以及@keyframes通过设置常用关键帧的规则,包括其中的宽度属性width(用于第一个选项)或高度height(用于第二个选项)。让我们将渐变线的斜率旋转 90 o