編碼的世界 / 優質文選 / 生涯

水波加載動畫 html+css


2022年5月02日
-   

先看效果:



原理:


這個效果在網上挺常見的,所以我也寫篇文章記錄記錄。 原理是比較簡單的,大致上就是有一個背景色為藍色的圓形;然後圓形上面有一個或兩個有弧度的白色方形盒子在旋轉,通過白色遮住藍色形成像是波浪的視差。

實現:


1.定義兩盒子,quan就是那個圓形,shui就是圓裏藍色的背景;
 <div class="quan">
<div class="shui"></div>
</div>

2.基本樣式,這樣大致上就是得到一個藍色背景的圓,細節就不說了自己看看就行~
 .quan{
position: relative;
width: 180px;
height: 180px;
border-radius: 50%;
border: 3px solid rgb(246, 247, 248);
box-shadow: 0 0 0 3px rgb(41, 134, 196);

}
.shui{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgb(23, 106, 201);
border-radius: 50%;
overflow: hidden;
}

3.定義偽類,就是要旋轉的有角度的盒子:
 .shui::after{
content: '';
position: absolute;
top: 0;
left: 50%;
width: 150%;
height: 150%;
border-radius: 40%;
background-color: rgb(240, 228, 228);
animation: shi 5s linear infinite;

}

4.實現,把白色盒子偏移到能覆蓋圓上半部分,然後讓它一直轉:
 @keyframes shi{
0%{
transform: translate(-50%,-65%) rotate(0deg);

}
100%{
transform: translate(-50%,-65%) rotate(360deg);

}
}

5.同上,再來一個白色盒子,不過背景色要設置透明度別覆蓋掉了上一個:
 .shui::before{
content: '';
position: absolute;
top: 0;
left: 50%;
width: 150%;
height: 150%;
border-radius: 42%;
background-color: rgb(240, 228, 228,0.2);
animation: xu 7s linear infinite;

}
@keyframes xu{
0%{
transform: translate(-50%,-60%) rotate(0deg);

}
100%{
transform: translate(-50%,-60%) rotate(360deg);

}
}

完整代碼:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
padding: 0;
margin: 0;
box-sizing: border-box;
}
body{
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background-color: rgb(240, 228, 228);
}
.quan{
position: relative;
width: 180px;
height: 180px;
border-radius: 50%;
border: 3px solid rgb(246, 247, 248);
box-shadow: 0 0 0 3px rgb(41, 134, 196);

}
.shui{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgb(23, 106, 201);
border-radius: 50%;
overflow: hidden;
}
.shui::after{
content: '';
position: absolute;
top: 0;
left: 50%;
width: 150%;
height: 150%;
border-radius: 40%;
background-color: rgb(240, 228, 228);
animation: shi 5s linear infinite;

}
@keyframes shi{
0%{
transform: translate(-50%,-65%) rotate(0deg);

}
100%{
transform: translate(-50%,-65%) rotate(360deg);

}
}
.shui::before{
content: '';
position: absolute;
top: 0;
left: 50%;
width: 150%;
height: 150%;
border-radius: 42%;
background-color: rgb(240, 228, 228,0.2);
animation: xu 7s linear infinite;

}
@keyframes xu{
0%{
transform: translate(-50%,-60%) rotate(0deg);

}
100%{
transform: translate(-50%,-60%) rotate(360deg);

}
}
</style>
</head>
<body>
<div class="quan">
<div class="shui"></div>
</div>
</body>
</html>

總結:


生活不止眼前的苟且,還有詩和遠方的田野~加油,萬事可期!

熱門文章