CSS:Wave background animation effects

2022/7/4

Rene Wu 2020/08/18 14:57:11
 

透過CSS製作波浪的動態背景,

準備一張白色無縫波浪形狀透明度10%的無縫圖片,

設定背景顏色 #f2709c、#ff9472 由左到右的漸層以及2層的白色波浪圖片,

HTML:

<div class="wrap">
  <div class="bg-wave waveOne"></di>
  <div class="bg-wave waveTwo"></div>
</div>

CSS:

body {
  background-image: -webkit-linear-gradient(left, #f2709c 0%,#ff9472 100%);
  background-image: linear-gradient(to right, #f2709c 0%,#ff9472 100%);
  witdh: 100%;
}
.wrap {
  overflow: hidden;
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
  height: 120px;
}
.bgWave {
  position: absolute;
  left: 0;
  width: 200%;
  height: 100%;
  background-repeat: repeat;
  background-position: left bottom;
  transform-origin: left bottom;
}

圖片範圍寬度設定為200%,讓動畫能無接縫循環播放,對齊位置及變形起始點為 left & bottom,接著各別定義樣式細節。

CSS:

.waveOne {
  background-size: 50% 120px;
  background-image: url(https://upload.cc/i1/2020/05/14/A2kBfn.png);
  animation: wave 12s linear infinite;
}
.waveTwo {
  background-size: 50% 120px;
  background-image: url(https://upload.cc/i1/2020/05/14/A2kBfn.png);
  animation: wave-reverse 6s linear infinite;
  right: 0;
  left: auto;
}

因圖片範圍寬度為200%,在這裡 background-size 寬度設定50%即為螢幕的100%,

在animation設置依序為:

1、動畫定義影格 @keyframe的名字

2、完成動畫一次週期的時間分別為12秒及6秒

3、動畫轉變時間的加速曲線 linear

4、動畫重複播放

@keyframes wave {
    0% {
        transform: translateX(0)
    }
    50% {
        transform: translateX(-25%)
    }
    100% {
        transform: translateX(-50%)
    }
}

第一層圖片動畫轉變方式設定為X軸水平向左移動50%

@keyframes wave-reverse {
    0% {
        transform: translateX(0) scaleY(1)
    }
    50% {
        transform: translateX(25%) scaleY(0.55)
    }
    100% {
        transform: translateX(50%) scaleY(1)
    }
}

第二層圖片動畫轉變方式設定為X軸水平向右移動50%,另外加上Y軸尺寸的縮放。

以上設定即完成波浪無接縫動畫的呈現。