热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CSS3实现Loading动画

最近本人正在极客学院学习HTML5系列课程,这么课程涵盖的内容也是非常的多,虽然内容十分简单容易理解,但是非常难以记忆,比如CSS3的一些属性。
最近本人正在极客学院学习 HTML5 系列课程,这么课程涵盖的内容也是非常的多,虽然内容十分简单容易理解,但是非常难以记忆,比如 CSS3 的一些属性。今天所要介绍的 CSS3 Loading 动画也是极客学院里所介绍的内容,感兴趣的同学也可以前去观看视屏。

Loading one

这里写图片描述

第一种加载动画的效果,就是这么一个图在不停的转啊转,动态图就不在这里展示了,太过于麻烦了,想看效果的同学学习之后可以自己写了查看。好了,下面我们就来看看代码。

首先,我们先定义一下 HTML 代码,为了方便这里我只粘贴核心代码

 





div 下面我们使用了 i 标签,不要问为什么,你也可以换成 p 标签或其他任何标签。

下面就用 CSS 对我们的Html 进行修饰

.box {
width: 100%;
padding: 3%;
}


.loading {
width: 30%;
height: 250px;
border: 1px solid chocolate;
box-sizing: border-box;
margin: 10px auto;
display: flex;
align-items: center;
justify-content: center;
}

这里解释一下,margin: 10px auto; 这一行,将上下外边距设置为 10px, 左右设置为 auto,这样可以达到将我们的元素水平居中的目的。

还有这里的 box-sizing: border-box 是什么意思呢?我们将宽度设置为了父元素的 30%,而我们又设置了边框,那这个边框占据的大小算不算在当前元素的宽度中呢?这里我们设置的值就是说明,加上边框占据的大小,当前元素占父元素的 30%。

display,align-items,justify-content 这三个属性是为了将 i 标签中的内容放置在 div 的中部。首先利用 display 属性将div 设置成弹性盒子元素,然后利用 align-items 设置元素在纵轴上居中,justify-content 设置元素在横轴上居中。注意居中效果必须在这三种元素同时存在时才有效,因为后两个属性是依赖于第一个属性的。

 .loading i {
width: 35px;
height: 35px;
position: relative;
display: block;
border-radius: 50%;
background: linear-gradient(transparent 0%, transparent 70%, #333333 70%, #333333 100%);
-webkit-animation: loading 1s linear 0s infinite;
}

看看 background 属性,其中设置了线性渐变效果,其中的参数也是我刚接触不能够理解的,不明白为什么要这么写,其实可以这么理解,从0%70% 设置成透明,从 70%100% 设置成 #333333,这样我们就看到了上述图片中图像。

-webkit-animation 属性就是为当前元素指定了一个动画,第一个参数是动画的名称,也即 loading ,该动画是需要我们自己去定义的,具体定义下面再介绍。第二个参数是动画持续的时长,第三个参数是动画的速度曲线,第四个参数是动画延迟时间,第五个参数是动画播放的次数。

下面看看我们自己定义的动画

  @-webkit-keyframes loading {
0% {
transform: rotate(0deg);
}

50% {
transform: rotate(180deg);
}

100% {
transform: rotate(360deg);
}
}

十分容易理解,就是在动画的不同阶段进行元素的旋转。值得注意的是,这种定义方式只能在 ChromeSafari 浏览器中能看到动画效果,那么如果我们想在火狐浏览器中也显示动画效果,那么我们需要这么定义。

 @-moz-keyframes  loading-moz{
0% {
transform: rotate(0deg);
}

50% {
transform: rotate(180deg);
}

100% {
transform: rotate(360deg);
}
}

引用的时候 -moz-animation: loading-moz 1s linear 0s infinite;

几乎是相同的,只不过换个头部而已(至于在其他浏览器中怎么定义,自己去试试吧)。

Loading two

这里写图片描述

这个动画的效果就是五个条纹像波浪一样摆动。下面就来书写这么一个效果。

首先是Html,毫无悬念,十分简单的布局










其实这个效果几乎所有的CSS 代码都是和上面一致的,来看看

 .box {
width: 100%;
padding: 3%;
}

.loader {
width: 30%;
height: 250px;
border: 1px solid chocolate;
box-sizing: border-box;
margin: 50px auto;
display: flex;
align-items: center;
justify-content: center;
}

.loader i{
width: 6px;
height: 32px;
margin-right: 6px;
border-radius: 4px;
background-color: #333333;
}

这里唯一多出来的一行代码就是 .loader i 中的 margin-right属性,为什么会多这么一行呢?因为我们有 5 个 i 标签,如果没有这行属性设定,那么所有的标签就回重叠在一起了。

接下来就是动画效果的设定了

@-webkit-keyframes  loading{
0%{
transform: scaleY(1);
}
50%{
transform: scaleY(0.5);
}
100%{
transform: scaleY(1);
}
}

.loader i:nth-child(1){
-webkit-animation: loading 1s ease-in 0.1s infinite;
}
.loader i:nth-child(2){
-webkit-animation: loading 1s ease-in 0.2s infinite;
}
.loader i:nth-child(3){
-webkit-animation: loading 1s ease-in 0.3s infinite;
}
.loader i:nth-child(4){
-webkit-animation: loading 1s ease-in 0.4s infinite;
}
.loader i:nth-child(5){
-webkit-animation: loading 1s ease-in 0.5s infinite;
}

可见我们设置的动画效果就是在 50% 的时候,将元素沿着 Y 轴进行缩放。然后我们对每一个i 标签进行了动画设定,不同的是每一个标签中的动画延迟执行时间不同,这样就可以达到波浪的效果,还有一点值得注意的是,我们发现我们指定的 动画速度曲线不同了,其实这个地方我们有必要了解一下所有可能的取值,如下

linear  动画从头到尾的速度是相同的。
ease 默认。动画以低速开始,然后加快,在结束前变慢。
ease-in 动画以低速开始。
ease-out 动画以低速结束。
ease-in-out 动画以低速开始和结束。

Loading Three

这里写图片描述

这次要做的效果是动态转圈加载的效果,下面来看看如何实现

这里的 HTML 代码和以上两个可能有点差别,这里多了一个 div 标签,目的是让画出的图形能够居中。















看看 CSS 代码

  .box {
width: 100%;
padding: 3%;
}

.loader {
width: 30%;
height: 250px;
margin: 10px auto;
border: 1px solid chocolate;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: center;
}

.loading {
position: relative;
}

.loading i {
display: block;
width: 15px;
height: 15px;
background-color: #333333;
border-radius: 50%;
position: absolute;
}

要理解为什么这些代码会画出如图所示的图形,那么我们必须要对 position 属性有一个透彻的了解,首先我们来看看我们用到的两个属性值是什么意思

absolute    
生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。
元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。

relative
生成相对定位的元素,相对于其正常位置进行定位。
因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。

知道了意思,再来分析以上的代码,我们在loading 元素中定义了一个 position:relative 由于没有相应的内容将其撑起,所以这个时候loading 实际上为中心的一个点,然后我们将 i 标签设置为绝对定位,也就是围绕着这个点进行画圆即可。下面来看看画圆的代码

    .loading i:nth-child(1) {
top: 25px;
left: 0px;
}

.loading i:nth-child(2) {
top: 17px;
left: 17px;
}

.loading i:nth-child(3) {
top: 0px;
left: 25px;
}

.loading i:nth-child(4) {
top: -17px;
left: 17px;
}

.loading i:nth-child(5) {
top: -25px;
left: 0px;
}

.loading i:nth-child(6) {
top: -17px;
left: -17px;
}

.loading i:nth-child(7) {
top: 0px;
left: -25px;
}

.loading i:nth-child(8) {
top: 17px;
left: -17px;
}

看到这些代码,如果你不知道为什么这样能够画出一个圆,那么拿出草稿纸,画一个坐标轴,将上述代码中的 top 值作为 y 轴的值,将 left 的值作为 x 轴的值,就可以看到为什么这么书写代码了。好了,静态图像已经书写完毕,那么接下来就是定义动画的时间了

 @-webkit-keyframes loading {
50%{
transform: scale(0.4);
opacity: 0.3;
}
100%{
transform: scale(1);
opacity: 1;
}
}

opacity 属性用于设置元素的透明度。所以说我们的动画效果就是将元素缩小为 0.4 倍并且将透明度设置成 0.3。然后为每个 i 标签指定动画效果,从上到下依次为

 -webkit-animation: loading 1s ease 0s infinite;
-webkit-animation: loading 1s ease 0.12s infinite;
-webkit-animation: loading 1s ease 0.24s infinite;
-webkit-animation: loading 1s ease 0.36s infinite;
-webkit-animation: loading 1s ease 0.48s infinite;
-webkit-animation: loading 1s ease 0.60s infinite;
-webkit-animation: loading 1s ease 0.72s infinite;
-webkit-animation: loading 1s ease 0.84s infinite;

这个时候如果运行,你会发现好像是逆时针旋转的,如果想改成顺时针旋转,可以将延迟时间前面都加上负号。

好了,今天先介绍这三种加载效果,如果书写有错误,欢迎反馈交流。


推荐阅读
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 如何压缩网站页面以减少页面加载时间
    本文介绍了影响网站打开时间的两个因素,即网页加载速度和网站页面大小。重点讲解了如何通过压缩网站页面来减少页面加载时间。具体包括图片压缩、Javascript压缩、CSS压缩和HTML压缩等方法,并推荐了相应的压缩工具。此外,还提到了一款Google Chrome插件——网页加载速度分析工具Speed Tracer。 ... [详细]
  • css元素可拖动,如何使用CSS禁止元素拖拽?
    一、用户行为三剑客以下3个CSS属性:user-select属性可以设置是否允许用户选择页面中的图文内容;user-modify属性可以设置是否允许输入 ... [详细]
  • 最近在学Python,看了不少资料、视频,对爬虫比较感兴趣,爬过了网页文字、图片、视频。文字就不说了直接从网页上去根据标签分离出来就好了。图片和视频则需要在获取到相应的链接之后取做下载。以下是图片和视 ... [详细]
  • Scrapy 爬取图片
    1.创建Scrapy项目scrapystartprojectCrawlMeiziTuscrapygenspiderMeiziTuSpiderhttps:movie.douban.c ... [详细]
  • 目录爬虫06scrapy框架1.scrapy概述安装2.基本使用3.全栈数据的爬取4.五大核心组件对象5.适当提升scrapy爬取数据的效率6.请求传参爬虫06scrapy框架1. ... [详细]
  • 博主使用代理IP来自于网上免费提供高匿IP的这个网站用到的库frombs4importBeautifulSoupimportrandomimporturllib.re ... [详细]
  • 之前我曾经写过一篇关于CSS的border-image属性的文章。现在几乎所有的现代浏览器都支持这个属性——除了IE10及以下IE版本。看起来这是一个非常 ... [详细]
  • Material Design Lite ,简洁惊艳的前端工具箱。
    2019独角兽企业重金招聘Python工程师标准MaterialDesignLite简介本文主要介绍MaterialDesign设计语言的HTMLCSSJS部分实现。对应每一 ... [详细]
  • nginx 解决跨域问题 No: 'AccessControlAllowOrigin' header is present on the requested resource
    错误信息:1, ... [详细]
  • 发现一个好看的手机壁纸网站,撸代码的手已经饥渴难耐了
    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。最近有同学的爬虫代码出了bug,给问我怎么改于 ... [详细]
author-avatar
韦凯孟强志宪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有