我们见过很多利用css3做的loading图,像下面这种应该是很常见的。通常制作这种loading,我们会一个标签对应一个圆,八个圆就要八个标签。但是这种做法很浪费资源。我们可以只用一个标签,然后利用box—shadow来制作一个loading图。

.loading {
font-size: 30px;
width: 1em;
height: 1em;
border-radius: 50%;
margin: 100px auto;
box-shadow: 0 -2em rgba(255, 0, 0, 1), 1.414em -1.414em rgba(255, 0, 0, 0.875), 2em 0 rgba(255, 0, 0, 0.75), 1.414em 1.414em rgba(255, 0, 0, 0.625), 0 2em rgba(255, 0, 0, 0.5), -1.414em 1.414em rgba(255, 0, 0, 0.375), -2em 0 rgba(255, 0, 0, 0.25), -1.414em -1.414em rgba(255, 0, 0, 0.125);
animation: rotate 1s infinite forwards steps(8, end);
}

@keyframes rotate {
100% {
-moz-transform: rotate(360deg);
}
}

首先,需要一个标签:

<div class="loading"></div>

然后是css:

$fontSize: 30px;
$radius: 2em;
.loading {
font-size: $fontSize;
width: 1em;
height: 1em;
border-radius: 50%;
margin: 100px auto;
box-shadow: 0 -2em rgba(255, 0, 0, 1), 1.414em -1.414em rgba(255, 0, 0, 0.875), 2em 0 rgba(255, 0, 0, 0.75), 1.414em 1.414em rgba(255, 0, 0, 0.625), 0 2em rgba(255, 0, 0, 0.5), -1.414em 1.414em rgba(255, 0, 0, 0.375), -2em 0 rgba(255, 0, 0, 0.25), -1.414em -1.414em rgba(255, 0, 0, 0.125);
}

单位用的是em,这样如果要修改圆的大小,就只需要修改font-size就可以了,如果用px的话,一旦需要修改大小,那么涉及单位的就都要修改了。

关键css就是:

box-shadow: 0 -2em rgba(255, 0, 0, 1), 1.414em -1.414em rgba(255, 0, 0, 0.875), 2em 0 rgba(255, 0, 0, 0.75), 1.414em 1.414em rgba(255, 0, 0, 0.625), 0 2em rgba(255, 0, 0, 0.5), -1.414em 1.414em rgba(255, 0, 0, 0.375), -2em 0 rgba(255, 0, 0, 0.25), -1.414em -1.414em rgba(255, 0, 0, 0.125);

需要用到多重阴影,每一个阴影就是一个圆了。设置它们的坐标需要用到三角函数。先要设定一个半径(如2em),然后360度平均分成8份,每份是45度,利用三角函数就可以计算阴影的偏移位置了。还有就是圆的颜色渐变,就是设置它们的不同透明度。

上面做出来的是静态的,还需要让它动起来:

$fontSize: 30px;
$radius: 2em; .loading {
font-size: $fontSize;
width: 1em;
height: 1em;
border-radius: 50%;
margin: 100px auto;
box-shadow: 0 -2em rgba(255, 0, 0, 1), 1.414em -1.414em rgba(255, 0, 0, 0.875), 2em 0 rgba(255, 0, 0, 0.75), 1.414em 1.414em rgba(255, 0, 0, 0.625), 0 2em rgba(255, 0, 0, 0.5), -1.414em 1.414em rgba(255, 0, 0, 0.375), -2em 0 rgba(255, 0, 0, 0.25), -1.414em -1.414em rgba(255, 0, 0, 0.125); animation: rotate 1s infinite forwards steps(8, end);
} @keyframes rotate {
100% {
transform: rotate(360deg);
}
}

steps()这个函数可以让动画分步进行,而不是连贯性的。

好了,上面就是全部的代码了,很少。上面的box-shadow其实我是手算的,本来我想利用sass的for循环计算的,结果没有成功。希望高手能指点一下。

最新文章

  1. linux线程
  2. Java命令行解析:apache commons-cli
  3. Redis系列-冷知识
  4. 洛谷P1209 [USACO1.3]修理牛棚 Barn Repair
  5. iOS开发资源整理【01】
  6. ASP.NET 5 之 错误诊断和它的中间件们
  7. Centos linux php扩展安装步骤
  8. FineUI属性的简单总结
  9. R教程计划
  10. mysql5.6设置主从报错1236,Increase max_allowed_packet on master,原因却是Binlog偏移量不对
  11. Sping Boot入门到实战之入门篇(一):Spring Boot简介
  12. 用burpsuite暴力破解后台
  13. [Swift]LeetCode20. 有效的括号 | Valid Parentheses
  14. linux ubuntu 关于vim得一些基本命令
  15. window10 matlabR2015b 安装minGw
  16. Java泛型知识点全方位总结
  17. Centos 6.4 安装dnsmasq
  18. (cvpr2019 ) Technology details of Deep Learning for Multiple-Image Super-Resolution
  19. Leetcode 714 - Node
  20. string转换成char*

热门文章

  1. ionic3 返回多个页面的写法
  2. C++练习 | 创建并倒序输出不带头结点的链表
  3. 记一次MacBook Pro无法连接wifi网络修复
  4. golang学习总结
  5. Hadoop系列-HDFS基础
  6. Spark Streaming 进阶与案例实战
  7. python 内置调试工具 pdb
  8. scala (7) Set and Tuple
  9. Altera三速以太网IP核使用(下篇)--- 百兆网接口设计与使用
  10. 20155212 实验三 敏捷开发与XP实践