实现CSS加载动画
本教程学习如何通过CSS实现加载动画的效果。
如何实现加载动画
最终效果如下:
<style> .loader { border: 16px solid #f3f3f3; -webkit-animation: spin 2s linear infinite; animation: spin 2s linear infinite; border-top: 16px solid #5cb85c; border-radius: 50%; width: 120px; height: 120px; } @keyframes spin { 0% { -webkit-transform: rotate(0deg); -ms-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); -ms-transform: rotate(360deg); transform: rotate(360deg); } } </style> <div class="loader"></div>
<style> .loader-small { border: 5px solid #f3f3f3; -webkit-animation: spin 1s linear infinite; animation: spin 1s linear infinite; border-top: 5px solid #555; border-radius: 50%; width: 50px; height: 50px; } @keyframes spin { 0% { -webkit-transform: rotate(0deg); -ms-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); -ms-transform: rotate(360deg); transform: rotate(360deg); } } </style> <div class="loader-small"></div>
步骤1,增加loader的HTML
<div class="loader"></div>
步骤2,增加CSS,包括样式和动画
.loader { border: 16px solid #f3f3f3; /* 淡灰色 */ -webkit-animation: spin 2s linear infinite; animation: spin 2s linear infinite; border-top: 16px solid #5cb85c; /* 绿色 */ border-radius: 50%; width: 120px; height: 120px; } @keyframes spin { 0% { -webkit-transform: rotate(0deg); -ms-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); -ms-transform: rotate(360deg); transform: rotate(360deg); } }
最终加载动画的代码如下
<style> .loader { border: 16px solid #f3f3f3; -webkit-animation: spin 2s linear infinite; animation: spin 2s linear infinite; border-top: 16px solid #5cb85c; border-radius: 50%; width: 120px; height: 120px; } @keyframes spin { 0% { -webkit-transform: rotate(0deg); -ms-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); -ms-transform: rotate(360deg); transform: rotate(360deg); } } </style> <div class="loader"></div>
案例解析
在上面的CSS中,
border
属性指定了加载动画的边框颜色和边框大小。通过border-radius
属性将div变成一个圆环。绿色的部分是通过
border-top
属性去控制的。你也可以通过border-bottom
,border-left
,还有border-right
来设置其他边框的颜色(如下面的例子)。加载动画的大小是通过
width
和height
属性控制的。最后我们通过
animation
属性来控制绿色部分每两秒旋转一圈。
实现不同的加载样式
两个边框的效果
<style> .loader-2 { border: 16px solid #f3f3f3; border-radius: 50%; border-top: 16px solid #3498db; border-bottom: 16px solid #3498db; width: 120px; height: 120px; -webkit-animation: spin 2s linear infinite; animation: spin 2s linear infinite; } @-webkit-keyframes spin { 0% { -webkit-transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); } } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } </style> <div class="loader-2"></div>
三个边框的效果
<style> .loader-3 { border: 16px solid #f3f3f3; border-radius: 50%; border-top: 16px solid blue; border-right: 16px solid green; border-bottom: 16px solid red; width: 120px; height: 120px; -webkit-animation: spin 2s linear infinite; animation: spin 2s linear infinite; } @-webkit-keyframes spin { 0% { -webkit-transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); } } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } </style> <div class="loader-3"></div>
四个边框的效果
<style> .loader-4 { border: 16px solid #f3f3f3; border-radius: 50%; border-top: 16px solid blue; border-right: 16px solid green; border-bottom: 16px solid red; border-left: 16px solid pink; width: 120px; height: 120px; -webkit-animation: spin 2s linear infinite; animation: spin 2s linear infinite; } @-webkit-keyframes spin { 0% { -webkit-transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); } } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } </style> <div class="loader-4"></div>
实现展示加载动画后展示内容
下面的例子实现如何将加载动画放置在页面中间,当加载完毕时,展示页面内容。
<html> <head> <style> /* 使加载动画在页面居中 */ .loader { position: absolute; left: 50%; top: 50%; z-index: 1; width: 150px; height: 150px; margin: -75px 0 0 -75px; border: 16px solid #f3f3f3; border-radius: 50%; border-top: 16px solid #5cb85c; width: 120px; height: 120px; -webkit-animation: spin 2s linear infinite; animation: spin 2s linear infinite; } @-webkit-keyframes spin { 0% { -webkit-transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); } } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .page-content { display: none; text-align: center; } /* 为"页面内容"增加动画 */ .animate-bottom { position: relative; -webkit-animation-name: animate-bottom; -webkit-animation-duration: 1s; animation-name: animate-bottom; animation-duration: 1s } @-webkit-keyframes animate-bottom { from { bottom: -100px; opacity: 0 } to { bottom: 0px; opacity: 1 } } @keyframes animate-bottom { from { bottom: -100px; opacity: 0 } to { bottom: 0; opacity: 1 } } </style> <script src="https://cdn.staticfile.org/jquery/2.2.4/jquery.min.js"></script> </head> <body> <div class="js-loader loader"></div> <div class="js-page-content page-content animate-bottom"> <h2>加载完成!</h2> <p>页面上增加了一些新的内容...</p> <a href="/examples/how-to-css-loader5/result.html">重新加载</a> </div> <script> $(function() { setTimeout(showPage, 3000); function showPage() { $('.js-loader').hide(); $('.js-page-content').show(); } }); </script> </body> </html>