CSS3的loading制作,让页面加载时不再单调

Posted 码匠与HTML5学堂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSS3的loading制作,让页面加载时不再单调相关的知识,希望对你有一定的参考价值。


页面的loading效果一直都是个比较重要的制作,往往一个好的加载效果可以有效的提升用户体验。而实际开发中,loading效果具体该如何制作?前端工程师又会有哪些特殊的技能呢?

本文主要内容

1、效果展示

2、主要涉及到的知识点

3、基本实现思路

4、案例实现

5、总结

1、效果展示

CSS3效果的制作不在于那些语句、命令,而是在于如何把语句组合到一起来实现实际效果。换句话说,CSS3效果只有想不到的,但是没有做不到的。下图就是一个开发中常用到的loading效果展示。

CSS3的loading制作,让页面加载时不再单调

2、主要涉及到的知识点

此效果的实现并不是很难,只需要借助之前CSS3文章系列中讲解过的圆角、变形、动画,在配合上相应的位置定位即可实现,具体我们来分析下需要用到的知识点。

1)CSS3圆角

主要功能是为标签添加圆角样式,有如下的属性:

border-radius : none | percent;

none代表的是不设置圆角,percent表示可以使用百分数实现圆角的设置,如下:

  1. border-radius: 50%;

2)CSS3变形

CSS3的变形主要是transform提供的几种方式,包含旋转、平移、扭曲、缩放等等。在本例中主要使用到的是旋转,用于实现圆环的变化效果。

其主要使用方式如下:

  1. transform: rotate(30deg);

通过指定的角度参数对元素指定一个旋转,其中angle是指旋转角度,如果设置的值为正数表示顺时针旋转,如果设置的值为负数,则表示逆时针旋转。

3)CSS3动画

借助CSS3的animation来实现圆环的转动效果,配合关键帧keyframe,让圆环在不同的旋转时期发生不一样的变化。其主要使用方式如下:

  1. animation: fadeOut 1s linear 0.2s infinite;

上述代码中,属性从左往右依次代表的是:动画的名称(由keyframe定义)、动画的时间、动画的速度曲线、动画的延迟时间、动画的播放次数(infinite表示无限循环)。

3、基本实现思路

利用两个div来实现左右各半的位置大小制作,然后借助圆角边框实现圆环样式的控制,让原来是方形的块变成圆形;之后控制不同方向上的边框颜色,调整最佳的视觉效果;最后利用CSS3的动画,实现圆环的转动,以及颜色的变化效果。

4、案例实现

基本的html结构如下:

  1. <!DOCTYPE html>

  2. <html>

  3. <head>

  4.     <meta charset="UTF-8" />

  5.     <title>H5course</title>

  6.     <link rel="stylesheet" type="text/css" href="css/reset.css" />

  7.     <style type="text/css">


  8.     </style>

  9. </head>

  10. <body>

  11. <div class="progress">

  12.     <div class="wrapper right">

  13.         <div class="circleProgress rightcircle"></div>

  14.     </div>

  15.     <div class="wrapper left">

  16.         <div class="circleProgress leftcircle"></div>

  17.     </div>

  18.     <div class="loading">

  19.         loading

  20.         <em>.</em>

  21.         <em>.</em>

  22.         <em>.</em>

  23.     </div>

  24. </div>

  25. </body>

  26. </html>

相应的样式书写如下:

  1. .progress {

  2.     position: relative;

  3.     width: 200px;

  4.     height: 200px;

  5.     margin: 150px auto;

  6.     line-height: 200px;

  7.     text-align: center;

  8.     font-size: 25px;

  9. }

  10. .wrapper {

  11.     position: absolute;

  12.     top: 0;

  13.     overflow: hidden;

  14.     width: 100px;

  15.     height: 200px;

  16. }

  17. .right {

  18.     right: 0;

  19. }

  20. .left {

  21.     left: 0;

  22. }

  23. .circleProgress {

  24.     position: absolute;

  25.     top: 0;

  26.     width: 160px;

  27.     height: 160px;

  28.     border: 20px solid rgb(232, 232, 12);

  29.     border-radius: 50%;

  30.     transform: rotate(45deg);

  31. }

  32. .rightcircle {

  33.     right: 0;

  34.     border-top: 20px solid green;

  35.     border-right: 20px solid green;

  36.     animation: right 5s linear infinite;

  37. }

  38. .leftcircle {

  39.     left: 0;

  40.     border-bottom: 20px solid green;

  41.     border-left: 20px solid green;

  42.     animation: left 5s linear infinite;

  43. }

  44. @keyframes right {   

  45.     0% {

  46.         border-top: 20px solid #ed1a1a;

  47.         border-right: 20px solid #ed1a1a;

  48.         -webkit-transform: rotate(45deg);

  49.     }

  50.     50% {

  51.         border-top: 20px solid rgb(232, 232, 12);

  52.         border-right: 20px solid rgb(232, 232, 12);

  53.         border-left: 20px solid rgb(81, 197, 81);

  54.         border-bottom: 20px solid rgb(81, 197, 81);

  55.         transform: rotate(225deg);

  56.     }

  57.     100% {

  58.         border-left: 20px solid green;

  59.         transform: rotate(225deg);

  60.     }

  61. }

  62. @keyframes left {

  63.     0% {

  64.         border-bottom: 20px solid #ed1a1a;

  65.         border-left: 20px solid #ed1a1a;

  66.         transform: rotate(45deg);

  67.     }

  68.     50% {

  69.         border-top: 20px solid rgb(81, 197, 81);

  70.         border-right: 20px solid rgb(81, 197, 81);

  71.         border-bottom: 20px solid rgb(232, 232, 12);

  72.         border-left: 20px solid rgb(232, 232, 12);

  73.         transform: rotate(45deg);

  74.     }

  75.     100% {   

  76.         border-top: 20px solid green;

  77.         border-right: 20px solid green;

  78.         border-bottom: 20px solid green;

  79.         border-left: 20px solid green;

  80.         transform: rotate(225deg);

  81.     }

  82. }

  83. .loading em:nth-child(1) { 

  84.     animation: fadeOut 1s linear 0.2s infinite; 

  85. }

  86. .loading em:nth-child(2) {

  87.     animation: fadeOut 1s linear 0.6s infinite; 

  88. }

  89. .loading em:nth-child(3) {

  90.     animation: fadeOut 1s linear 1s infinite;

  91. }

  92. @keyframes fadeOut {

  93.     0% {opacity: 1;}

  94.     100% {opacity: 0;}

  95. }

如上,CSS3效果就已经搞定了~很简单的解决了loading的效果,同时适合在移动端中应用。

显示的效果:

5、总结

此效果采用的是两个div各占父级一半大小的布局方式,然后借助定位实现两个半圆的完美拼接,最后针对边框的不同方向,给予不同的颜色变化,配合上动画的效果,实现最终的圆环转动与相应的颜色变换。

相关文章推荐:

本文系HTML5学堂独家内容,转载请在文章开头显眼处注明作者和出处“HTML5学堂(http://www.h5course.com/)”


HTML5学堂

HTML5技术原创分享平台

加入HTML5学堂

原来技术可以通俗易懂

每一天 都在为未来积蓄力量

微信:HTML5_Course 微博:@前端技术分享网


点击下方“阅读原文”查看效果案例
↓↓↓ 

以上是关于CSS3的loading制作,让页面加载时不再单调的主要内容,如果未能解决你的问题,请参考以下文章

css3 圆圈怎么加载数据从1%-100%

纯css3 加载loading动画特效

HTML5+CSS3 loading 效果收集

jQuery-onload让第一次页面加载时,图片是淡入方式。

纯CSS3实现漩涡样式的Loading加载动画

纯CSS3方块翻转效果的Loading加载动画