话不多说,先上效果图

受制于网站的容量,最多只能上传4MB的动图,所以我调快了动画的速度,缩短了动图的工夫,实际上动画是很弛缓的。

说到动画,家喻户晓,突变是不可能应用通过keyframes实现动画过渡成果的,只会忽然的扭转色彩。

例如,如果关键帧代码如下

@keyframes test {  0%{    background: linear-gradient(60deg, rgba(84,58,183,1) 0%, rgba(0,172,193,1) 100%);  }  100%{    background: linear-gradient(60deg, rgb(173, 162, 218) 0%, rgb(201, 14, 189) 100%);  }}

能够看到背景色并不会平滑的过渡,只会十分生硬忽然的色彩变动,显然不是咱们想要的成果。

换个想法,没必要局限于在keyframes中应用linear-gradient来实现突变动画成果,linear-gradient不可能平滑过渡,然而position能够呀,所以咱们先实现这样的成果

html代码如下

<div class="header">  <div class="inner-header flex">    <svg version="1.1" class="logo" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg"      xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 500 500" xml:space="preserve">      <path fill="#FFFFFF" stroke="#000000" stroke-width="10" stroke-miterlimit="10" d="M57,283" />      <g>        <path fill="#fff"          d="M250.4,0.8C112.7,0.8,1,112.4,1,250.2c0,137.7,111.7,249.4,249.4,249.4c137.7,0,249.4-111.7,249.4-249.4  C499.8,112.4,388.1,0.8,250.4,0.8z M383.8,326.3c-62,0-101.4-14.1-117.6-46.3c-17.1-34.1-2.3-75.4,13.2-104.1  c-22.4,3-38.4,9.2-47.8,18.3c-11.2,10.9-13.6,26.7-16.3,45c-3.1,20.8-6.6,44.4-25.3,62.4c-19.8,19.1-51.6,26.9-100.2,24.6l1.8-39.7        c35.9,1.6,59.7-2.9,70.8-13.6c8.9-8.6,11.1-22.9,13.5-39.6c6.3-42,14.8-99.4,141.4-99.4h41L333,166c-12.6,16-45.4,68.2-31.2,96.2    c9.2,18.3,41.5,25.6,91.2,24.2l1.1,39.8C390.5,326.2,387.1,326.3,383.8,326.3z" />      </g>    </svg>  </div>  <div>    <svg class="waves" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"      viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto">      <defs>        <path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z" />      </defs>      <g class="parallax">        <use xlink:href="#gentle-wave" x="48" y="0" fill="rgba(255,255,255,0.7" />        <use xlink:href="#gentle-wave" x="48" y="3" fill="rgba(255,255,255,0.5)" />        <use xlink:href="#gentle-wave" x="48" y="5" fill="rgba(255,255,255,0.3)" />        <use xlink:href="#gentle-wave" x="48" y="7" fill="#fff" />      </g>    </svg>  </div></div>

css代码如下

body {  margin:0;}h1 {  font-family: 'Lato', sans-serif;  font-weight:300;  letter-spacing: 2px;  font-size:48px;  user-select: none;}p {  font-family: 'Lato', sans-serif;  letter-spacing: 1px;  font-size:14px;  color: #333333;}.header {position: relative;    text-align: center;    background: linear-gradient(45deg, rgb(84 58 181), rgb(84 58 181 / 70%), rgb(0 172 193 / 70%), rgb(87 228 246),rgb(255 255 255));    color: white;    box-shadow: 1px 1px 6px #00000087;}.logo {  width:50px;  fill:white;  padding-right:15px;  display:inline-block;  vertical-align: middle;}.inner-header {  height:65vh;  width:100%;  margin: 0;  padding: 0;}.flex { /*Flexbox for containers*/  display: flex;  justify-content: center;  align-items: center;  text-align: center;}.waves {  position:relative;  width: 100%;  height:15vh;  margin-bottom:-7px; /*Fix for safari gap*/  min-height:100px;  max-height:150px;}.content {  position:relative;  height:20vh;  text-align:center;  background-color: white;}/* Animation */.parallax > use {  animation: move-forever 25s cubic-bezier(.55,.5,.45,.5)     infinite;}.parallax > use:nth-child(1) {  animation-delay: -2s;  animation-duration: 7s;}.parallax > use:nth-child(2) {  animation-delay: -3s;  animation-duration: 10s;}.parallax > use:nth-child(3) {  animation-delay: -4s;  animation-duration: 13s;}.parallax > use:nth-child(4) {  animation-delay: -5s;  animation-duration: 20s;}@keyframes move-forever {  0% {   transform: translate3d(-90px,0,0);  }  100% {     transform: translate3d(85px,0,0);  }}/*Shrinking for mobile*/@media (max-width: 768px) {  .waves {    height:40px;    min-height:40px;  }  .content {    height:30vh;  }  h1 {    font-size:24px;  }}

再而后,咱们把背景放大,也就是在.header中加上这一行代码background-size: 400%
而后写一个背景挪动的关键帧动画

@keyframes gradient {    0% {        background-position: 0% 50%;    }    50% {        background-position: 100% 50%;    }    100% {        background-position: 0% 50%;    }}

利用到.head

.header {position: relative;    text-align: center;    background: linear-gradient(45deg, rgb(84 58 181), rgb(84 58 181 / 70%), rgb(0 172 193 / 70%), rgb(87 228 246),rgb(255 255 255));    background-size: 400%;    color: white;    box-shadow: 1px 1px 6px #00000087;    animation: gradient 5s linear infinite;}

调整动画速度只有批改animation中的5s就行了,轻易改成什么数字就行。

底部的突变波纹动画来自于该网站
https://codepen.io/goodkatz/p...