[CSS]做一个加载动画效果的页面

html代码:

先创建一个div,class为loading。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>loading动画</title>
</head>
<body>
    <div class="loading"></div>
</body>
</html>

给loading添加样式:

.loading {
  width: 200px;
  height: 200px;
  border:1px solid red; /* border方便我们观察调整代码 */
}

效果:
[CSS]做一个加载动画效果的页面
我们使用伪元素做出一个圆形,并给它添加样式。

.loading {
  width: 200px;
  height: 200px;
  border:1px solid red;
  position: relative;
}
​
.loading::before { /* 伪元素 */
  content:'';
  width: 10px;
  height: 10px;
  border-radius:50%;
  background-color: black;
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  margin: auto; /* 绝对定位,上下左右都设置为0,margin为auto就可以居中 */
}

效果:
[CSS]做一个加载动画效果的页面
现在我们先给这个圆形做一个简单的动画:

.loading {
  width: 200px;
  height: 200px;
  border: 1px solid red;
  position: relative;
}
​
.loading::before {
  content: '';
  width: 0px; /* 可以改为0 */
  height: 0px; /* 可以改为0 */
  border-radius: 50%;
  background-color: black;
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  margin: auto;
  animation: linearSize 1.5s linear infinite; /* 动画名字,时间和效果 */
}
​
@keyframes linearSize { /* 动画的样式过渡,0%到100%,宽高和透明度的变化 */
  0% {
    width: 0;
    height: 0;
    opacity: 1;
  }
  100% {
    width: 100px;
    height: 100px;
    opacity: 0;
  }
}

效果:
[CSS]做一个加载动画效果的页面
这里的重要点就是animation动画的运用。同样我们可以再使用伪元素after做出相同的圆形。

设置另一个圆形的延迟动画效果,让两个圆形的动画时间有时差,这样就能表现出页面载入的效果。

.loading {
  width: 200px;
  height: 200px;
  border: 1px solid red;
  position: relative;
}
​
.loading::before, .loading::after {
  content: '';
  width: 0px;
  height: 0px;
  border-radius: 50%;
  background-color: black;
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  margin: auto;
  animation: linearSize 1.5s linear infinite;
}
​
.loading::after {
  animation-delay: 0.75s; /* 表示动画效果在0.75s后开始 */
}
​
@keyframes linearSize {
  0% {
    width: 0;
    height: 0;
    opacity: 1;
  }
  100% {
    width: 100px;
    height: 100px;
    opacity: 0;
  }
}

然后我们在class为loading的div外再套一层div,让class为loading的div居中。


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>loading动画</title>
</head>
<body>
    <div class="container">
        <div class="loading"></div>
    </div>
</body>
</html>
.loading {
  width: 200px;
  height: 200px;
  border: 1px solid red;
  position: relative;
}
​
.loading::before, .loading::after {
  content: '';
  width: 0px;
  height: 0px;
  border-radius: 50%;
  background-color: black;
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  margin: auto;
  animation: linearSize 1.5s linear infinite;
}
​
.loading::after {
  animation-delay: 0.75s; /* 表示动画效果在0.75s后开始 */
}
​
@keyframes linearSize {
  0% {
    width: 0;
    height: 0;
    opacity: 1;
  }
  100% {
    width: 100px;
    height: 100px;
    opacity: 0;
  }
}
​
.container {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: #888;
  display: -webkit-flex; /* 添加后缀名,适应不同浏览器显示 */
  display: -moz-flex;
  display: -ms-flex;
  display: -o-flex;
  display: flex; /* flex布局 */
  justify-content: center;
  align-items: center;
}

最终效果:
[CSS]做一个加载动画效果的页面

上一篇:Oracle——图形工具PLSqlDeveloper安装


下一篇:Web(html+css)学习②