试着写了一个带气泡背景的登录页面,效果如下:

首先我们先定义 10 个 li 列表标签,我用的是 Vue 框架: HTML 代码
<div>
<ul class="bg-bubbles">
<li v-for="i in 10" :key="i"></li>
</ul>
</div>
<script src="https://unpkg.com/vue@next/dist/vue.js"></script>
对应的 CSS 代码
body {
margin: 0;
padding: 0;
}
#app {
background: linear-gradient(to bottom right, #50A3A2, #53E3A6);
position: absolute;
height: 100%;
width: 100%;
}
.bg-bubbles {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
.bg-bubbles li {
position: absolute;
bottom: -160px;
width: 40px;
height: 40px;
background-color: rgba(255, 255, 255, 0.15);
list-style: none;
animation: square 15s infinite;
transition-timing-function: linear;
border-radius: 10px;
}
.bg-bubbles li:nth-child(1) {
left: 10%;
}
.bg-bubbles li:nth-child(2) {
left: 20%;
width: 90px;
height: 90px;
animation-delay: 2s;
animation-duration: 7s;
}
.bg-bubbles li:nth-child(3) {
left: 25%;
animation-delay: 4s;
}
.bg-bubbles li:nth-child(4) {
left: 40%;
width: 60px;
height: 60px;
animation-duration: 8s;
background-color: rgba(255, 255, 255, 0.3);
}
.bg-bubbles li:nth-child(5) {
left: 70%;
}
.bg-bubbles li:nth-child(6) {
left: 80%;
width: 120px;
height: 120px;
animation-delay: 3s;
background-color: rgba(255, 255, 255, 0.2);
}
.bg-bubbles li:nth-child(7) {
left: 32%;
width: 160px;
height: 160px;
animation-delay: 2s;
}
.bg-bubbles li:nth-child(8) {
left: 55%;
width: 20px;
height: 20px;
animation-delay: 4s;
animation-duration: 15s;
}
.bg-bubbles li:nth-child(9) {
left: 25%;
width: 10px;
height: 10px;
animation-delay: 2s;
animation-duration: 12s;
background-color: rgba(255, 255, 255, 0.3);
}
.bg-bubbles li:nth-child(10) {
left: 85%;
width: 160px;
height: 160px;
animation-delay: 5s;
}
@keyframes square {
0% {
opacity: 0.5;
transform: translateY(0px) rotate(45deg);
}
25% {
opacity: 0.75;
transform: translateY(-400px) rotate(90deg);
}
50% {
opacity: 1;
transform: translateY(-600px) rotate(135deg);
}
100% {
opacity: 0;
transform: translateY(-1000px) rotate(180deg);
}
}
至此,一个气泡背景图就完成了。回过头来看,确实不难,但也愈来愈让人感受到 CSS 动画的魅力和强大。

