前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【动画消消乐|CSS】 单span标签实现自定义简易过渡动画 076

【动画消消乐|CSS】 单span标签实现自定义简易过渡动画 076

作者头像
海轰Pro
发布于 2021-08-06 07:03:16
发布于 2021-08-06 07:03:16
59900
代码可运行
举报
运行总次数:0
代码可运行

效果展示

Demo代码

HTML

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Document</title>
</head>
<body>
    <section><span></span></section>
</body>
</html>

CSS

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
html, body {
  margin: 0;
  height: 100%;
}

body {
  display: flex;
  justify-content: center;
  align-items: center;
  background: #ed556a;
}

section {
  width: 650px;
  height: 300px;
  padding: 10px;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 2px solid white;
}

span {
  width: 5px;
  height: 5px;
  display: inline-block;
  position: relative;
  border-radius: 4px;
  background: white;
  animation: loading 1s 0s linear infinite alternate;
}

span::before, span::after {
  content: '';
  width: 5px;
  height: 5px;
  border-radius: 4px;
  background: white;
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  top: 15px;
  animation: loading 1s 0.6s linear infinite alternate;
}

span::after {
  top: -15px;
  animation-delay: 0.9s;
}

@keyframes loading {
  0% {
    width: 5px;
  }
  100% {
    width: 48px;
  }
}

原理详解

步骤1

使用span标签 设置为

  • 相对定位
  • 宽度、高度均为5px
  • 背景色:白色
  • border-radius: 4px;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 span {
	width: 5px;
	height: 5px;
	position: relative;
	border-radius: 4px;
	background: white;
  }

效果图如下

步骤2

使用span::before、span::after伪元素

同时设置为

  • 绝对定位
  • 宽度、高度均为5px
  • 背景色:白色
  • border-radius: 4px;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  span::before, span::after {
	content: '';
	width: 5px;
	height: 5px;
	border-radius: 4px;
	background: white;
	position: absolute;
	
	/* 重点 */
	left: 50%;
	transform: translateX(-50%);
	top: 15px;
  }

效果图如下

特别注意,这里绝对位置关系为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	left: 50%;
	transform: translateX(-50%);
	top: 15px;

具体这样设置的原因后面说明一下

步骤3

分离before和after

使after位于span之上

与after形成关于span对称

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  span::after {
	top: -15px;
  }

效果图如下

步骤4

为span添加动画

动画很简单

只是span的宽度属性随着时间而变化

  • 初始状态:宽度为5px
  • 末尾状态:宽度为48px
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  @keyframes loading {
	0% {
	  width: 5px;
	}
	100% {
	  width: 48px;
	}
  }  
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  span {
	animation: loading 1s 0s linear infinite alternate;
  }

效果图如下

步骤5

对span::after、span::before使用同样的动画

为了实现不同步的效果

分别设置不同的动画开始延时时间即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 span::before, span::after {
	animation: loading 1s 0.6s linear infinite alternate;
  }
    
  span::after {
	animation-delay: 0.9s;
  }

效果图如下

疑难解释

关键代码为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	left: 50%;
	transform: translateX(-50%);
	top: 15px;

这三句代码的意思是:

  • after、before位于span下方15px
  • 再向左移动 相当于span自身50%宽度的距离
  • 再向右移动 相当于span::after/before自身50%宽度的距离

如果只是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	left: 50%;
	top: 15px;

效果图如下

为什么会出现这种效果呢?

首先span是海轰事先设置一直位于整个容器正中的,如果只有left: 50%;,说明before、after在横轴方向一直是相对于span最左端移动了相对于span自身50%的距离,无论span宽度怎么变化,它的50%一直都是在中间,所以before、after最左端相当于固定了

而使用 就可以实现span和span::after/before的中心处于同一直线上

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	left: 50%;
	transform: translateX(-50%);
	top: 15px;

只需要记住:

  • left: 50%;是向左移动相当于span50%宽度的距离
  • transform: translateX(-50%);是指向右移动相当于自身50%宽度的距离

可以发现

通过使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	left: 50%;
	transform: translateX(-50%);

可以使得span和span::after/before中心处于同一条直线上(始终处于 动画运行时也始终保持 因为设置的是百分比)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
纯css实现117个Loading效果(下)
这是我这几十年间从世界各地寻觅到的 Loading特效,合计117个(本文贴出第79-117个),而且是 纯CSS 制作的。
德育处主任
2022/04/17
1.1K0
纯css实现117个Loading效果(下)
【动画消消乐|CSS】078.单span标签实现自定义简易过渡动画
前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ 自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,有幸拿过国奖、省奖等,已保研。目前正在学习C++/Linux(真的真的太难了~) 学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语! 【动画消消乐】 平时学习生活比较枯燥,无意之间对一些网页、应用程序的过渡/加载动画产生了浓厚的兴趣,想知道具体是如何实现的?
海轰Pro
2021/08/10
4070
纯css实现117个Loading效果(中)
这是我这几十年间从世界各地寻觅到的 Loading特效,合计117个(本文贴出第40-78个),而且是 纯CSS 制作的。
德育处主任
2022/04/17
1.4K0
纯css实现117个Loading效果(中)
【动画消消乐|CSS】081.单span标签实现自定义简易过渡动画
前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ 自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,有幸拿过国奖、省奖等,已保研。目前正在学习C++/Linux(真的真的太难了~) 学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语! 【动画消消乐】 平时学习生活比较枯燥,无意之间对一些网页、应用程序的过渡/加载动画产生了浓厚的兴趣,想知道具体是如何实现的?
海轰Pro
2021/08/18
4970
【动画消消乐|CSS】081.单span标签实现自定义简易过渡动画
【动画消消乐】HTML+CSS 自定义加载动画:怦然心跳 066
效果同span的动画一样,只是动画开始延迟0.3s,与span动画形成前后关系即可
海轰Pro
2021/07/27
3510
【动画消消乐|CSS】084.单span标签实现自定义简易过渡动画
前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ 自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,有幸拿过国奖、省奖等,已保研。目前正在学习C++/Linux(真的真的太难了~) 学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语! 【动画消消乐】 平时学习生活比较枯燥,无意之间对一些网页、应用程序的过渡/加载动画产生了浓厚的兴趣,想知道具体是如何实现的?
海轰Pro
2021/08/18
5300
【动画消消乐|CSS】084.单span标签实现自定义简易过渡动画
【动画消消乐|CSS】080.单span标签实现自定义简易过渡动画
在最右端时 left: 100%; transform: translateX(-100%)
海轰Pro
2021/08/10
5230
【动画消消乐|CSS】085.HTML+CSS实现自定义简易过渡动画
前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ 自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,有幸拿过国奖、省奖等,已保研。目前正在学习C++/Linux(真的真的太难了~) 学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语! 【动画消消乐】 平时学习生活比较枯燥,无意之间对一些网页、应用程序的过渡/加载动画产生了浓厚的兴趣,想知道具体是如何实现的?
海轰Pro
2021/08/20
4640
【动画消消乐】HTML+CSS 自定义加载动画 070
为span::before、span::after添加同span一样的动画,只是动画开始延迟时间设置为0.6s
海轰Pro
2021/08/05
3970
【动画消消乐|CSS】082.单span标签实现自定义简易过渡动画
注:span::after宽度为0 其实是看不到这个白色部分的。这里海轰只是为了显示出after的位置将其宽度设置为10px 便于确定其位置
海轰Pro
2021/08/18
3560
【动画消消乐|CSS】082.单span标签实现自定义简易过渡动画
【动画消消乐】HTML+CSS 自定义加载动画:电池充电动画 058
【动画消消乐】 平时学习生活比较枯燥,无意之间对一些网页、应用程序的过渡/加载动画产生了浓厚的兴趣,想知道具体是如何实现的? 便在空闲的时候学习下如何使用css实现一些简单的动画效果,文章仅供作为自己
海轰Pro
2021/07/20
3960
【动画消消乐】HTML+CSS 自定义加载动画:电池充电动画 058
纯css实现117个Loading效果(上)
这是我这几十年间从世界各地寻觅到的 Loading特效,合计117个(本文贴出第1-39个),而且是 纯CSS 制作的。
德育处主任
2022/04/15
2.8K0
纯css实现117个Loading效果(上)
【动画消消乐|CSS】086.炫酷水波浪Loading过渡动画
这里使用两个div,一个为circle类,一个为wave类,分别代表容器和wave
海轰Pro
2021/08/20
9410
「HTML+CSS」--自定义加载动画【042】
步骤4中的 transform: scale(0.5) translate( -96px, -96px);为什么实际只移动了48px?
海轰Pro
2021/06/10
4900
「HTML+CSS」--自定义加载动画【033】
注:这里没有设置width、height,仅使用了border就生成了一个正方形
海轰Pro
2021/06/10
3460
「HTML+CSS」--自定义加载动画【033】
「HTML+CSS」--自定义加载动画【011】
效果展示 思路 这里用span元素代表外层白色圆圈 两个红色小球分别用span的两个伪类::before和::after代表 根据效果图,可以大概得出思路 先利用span生成一个正方形,设置好边框 两
海轰Pro
2021/04/12
3580
「HTML+CSS」--自定义加载动画【011】
【动画消消乐】HTML+CSS 自定义加载动画 064(currentColor的妙用!)
在这里设置了span的color属性为白色,所以背景色也就是color属性的值:白色
海轰Pro
2021/07/27
3690
Butterfly主题美化
在butterfly/source/css/创建一个universe.css文件。
ymktchic
2022/01/18
1.6K0
Butterfly主题美化
「HTML+CSS」--自定义加载动画【041】
文章仅作为学习笔记,记录从0到1的一个过程。希望对您有所帮助,如有错误欢迎小伙伴指正~
海轰Pro
2021/06/10
3500
CSS 的快乐:画一个可爱的三只小鸟 Button
今天我们就一起来画下这个可爱的 Button 吧!纯 CSS,没用到图片和 JS 呦~
神说要有光zxg
2023/02/01
5700
推荐阅读
相关推荐
纯css实现117个Loading效果(下)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验