A Beginner’s Introduction to CSS Animation中文版
现在越来越多的网站正在使用动画,无论是以GIF,SVG,WebGL,背景视频等形式。 当正确使用时,网络上的动画带来生机和交互性,为用户增添了额外的反馈和体验。
在本教程中,我将向您介绍CSS动画; 高性能的做事方式越来越受到browser support
的欢迎。 下面的示例涵盖了基础知识:一个方形元素变化为圆形。
实现效果为https://codepen.io/mengmengpr...
高级选项
Envato市场上的设计师们一直在忙于创作一系列的CSS动画,从阴影到色带,滑块等。你可以将它们插入到你的网站中。
您还可以聘请Envato Studio的CSS专家,以帮助您为您的项目提供更丰富的定制。
@keyframes 和 Animation
CSS动画的主要组件是@keyframes
,即创建动画的CSS规则。将@keyframes
视为时间轴上的阶段。 在@keyframes
中,您可以定义这些阶段,每个阶段都有不同的样式声明。
接下来,要使CSS动画工作,您需要将@keyframes
绑定到一个选择器。这将逐步解析@keyframes
声明中的所有代码,并根据阶段将初始样式更改为新样式。
@keyframes
接下来我们将设置动画阶段。@keyframes
的属性有:
我们选择的名称(这里为tutsFade)。
阶段:0%-100%或者from(0%)-to(100%)。
css样式:我们即将应用到每个阶段的样式。
示例:
@keyframes tutsFade {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
/*---- 或者 ----*/
@keyframes tutsFade {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
/*---- 简写 ----*/
@keyframes tutsFade {
to {
opacity: 0;
}
}
上面的代码将实现一个元素不透明度的过度,从opacity: 1
到opacity: 0
。上述每个方法都将获得相同的结果。
@Animation
动画属性用于在CSS选择器中调用@keyframes。
Animation可以有很多属性:
animation-name
:@keyframes
的名字(这里是tutsFade)。animation-duration
:动画持续时长。animation-timing-function
:设置动画的速度(linear/ease/ease-in/ease-out/ease-in-out/cubic-bezier)。animation-delay
:动画开始前的延迟。animation-iteration-count
:动画循环的次数。animation-direction
:定义是否应该轮流反向播放动画。如果animation-direction
值是"alternate",则动画会在奇数次数正常播放,而在偶数次数反向播放。animation-fill-mode
:指定当我们的动画完成时将哪些样式应用于元素。
示例:
.element {
animation-name: tutsFade;
animation-duration: 4s;
animation-delay: 1s;
animation-iteration-count: infinite;
animation-timing-function: linear;
animation-direction: alternate;
}
/*---- 简写 ----*/
.element {
animation: tutsFade 4s 1s infinite linear alternate;
}
添加不同浏览器支持的前缀
我们需要使用浏览器特定的前缀来确保最佳的浏览器支持。 标准的前缀都有:
Chrome & Safari:
-webkit-
Firefox:
-moz-
Opera:
-o-
IE:
-ms-
上面的例子将变为:
.element {
-webkit-animation: tutsFade 4s 1s infinite linear alternate;
-moz-animation: tutsFade 4s 1s infinite linear alternate;
-ms-animation: tutsFade 4s 1s infinite linear alternate;
-o-animation: tutsFade 4s 1s infinite linear alternate;
animation: tutsFade 4s 1s infinite linear alternate;
}
@-webkit-keyframes tutsFade { /* your style */ }
@-moz-keyframes tutsFade { /* your style */ }
@-ms-keyframes tutsFade { /* your style */ }
@-o-keyframes tutsFade { /* your style */ }
@keyframes tutsFade { /* your style */ }
为了本教程的可读性,接下来将不使用前缀,但最终版本会包含它们,我也鼓励您能在您的CSS代码中使用前缀。
要了解更多有关浏览器前缀的信息,可以查看http://css3please.com/。
多个动画
您可以使用逗号分隔符添加多个动画。假设我们要添加一个旋转到元素,需要声明额外的@keyframes
,然后绑定到我们的元素:
.element {
animation: tutsFade 4s 1s infinite linear alternate,
tutsRotate 4s 1s infinite linear alternate;
}
@keyframes tutsFade {
to {
opacity: 0;
}
}
@keyframes tutsRotate {
to {
transform: rotate(180deg);
}
}
正方形到圆形的变换
接下来将创建一个简单的形状转换;使用上述原则来将一个正方形逐步变换为圆形。我们共有五个阶段,在每个阶段,都会定义元素的边框半径,旋转和不同的背景颜色。
基本元素
首先,我们创建一个html元素来进行动画。
<div></div>
接着,给div
添加默认的样式:
div {
width: 200px;
height: 200px;
margin: 50px;
background-color: coral;
}
定义Keyframes
现在,我们来创建一个有五个阶段的@keyframes
:
@keyframes square-to-circle {
0%{
border-radius: 0 0 0 0;
background: coral;
transform: rotate(0deg);
}
25%{
border-radius: 50% 0 0 0;
background: darksalmon;
transform: rotate(45deg);
}
50%{
border-radius: 50% 50% 0 0;
background: indianred;
transform: rotate(90deg);
}
75%{
border-radius: 50% 50% 50% 0;
background: lightcoral;
transform: rotate(135deg);
}
100%{
border-radius: 50%;
background: darksalmon;
transform: rotate(180deg);
}
}
应用动画
定义完我们的square-to-circle动画,我们还需要将动画应用到div上:
div {
width: 200px;
height: 200px;
background-color: coral;
animation: square-to-circle 2s 1s infinite alternate;
}
现在动画的状态是:
动画名称为
square-to-circle
。动画时长为2s。
动画延迟为1s。
动画循环次数为
infinite
,因此会无限循环。动画循环方向为
alternate
,它将从开始到结束,然后反向执行,然后再从开始到结束,一直循环。
使用animation-timing-function
我们可以添加到动画属性的最后一个值是动画定时功能。这将定义我们运动的速度,加速度和减速度。这个属性可以是一个非常详细的值(需要笨拙的手动计算),但是有很多免费的网站提供资源和动态定时功能的实时定制。
一个相关的工具是CSS Easing Animation Tool,可以用来计算animation-timing-funtion
。
通过在工具里的计算,使用animation-cubic-bezier
,给我们的动画添加一个弹性特效。最终代码如下:
div {
width: 200px;
height: 200px;
margin: 50px;
background-color: coral;
animation: square-to-circle 2s 1s infinite cubic-bezier(1, .015, .295, 1.225) alternate;
}
最后一步
在现代浏览器中,我们的动画都能完美运行,但是Firefox在动画渲染方面较差,旋转过程中边缘会出现锯齿。我们可以通过添加outline
样式完善:
outline: 1px solid transparent;
最近发现很多国外的优质文章,翻译是自己学习的过程也是分享的过程。喜欢的话,点个赞吧。
A Beginner’s Introduction to CSS Animation中文版的更多相关文章
- A beginner’s introduction to Deep Learning
A beginner’s introduction to Deep Learning I am Samvita from the Business Team of HyperVerge. I join ...
- CSS魔法堂:更丰富的前端动效by CSS Animation
前言 在<CSS魔法堂:Transition就这么好玩>中我们了解到对于简单的补间动画,我们可以通过transition实现.那到底多简单的动画适合用transtion来实现呢?答案就是 ...
- CSS Animation triggers text rendering change in Safari
薄荷新首页上周五内测,花哥反馈在 MacBook Safari 浏览器下 鼠标移动到第一个商品的时候后面几个商品的文字会加粗.这是什么鬼??? 待我回到家打开笔记本,鼠标蹭蹭蹭的发现问题远不止如此: ...
- No.6 - 利用 CSS animation 制作一个炫酷的 Slider
*{ margin:; padding:; } div{ margin: auto; width: 800px; height: 681px; position: relative; overflow ...
- [CSS3] Make a One-time CSS Animation that Does Not Revert to its Original Style
We'll add animation to patio11bot using CSS keyframes. When defining a CSS animation, you can add it ...
- 利用 CSS animation 和 CSS sprite 制作动画
CSS3 大大强化了制作动画的能力,但是如果要做出图案比较复杂的动画,选择 GIF 依然是一个不错的选择.今天给大家介绍一个使用 CSS animation 配合雪碧图(CSS sprite)来制作动 ...
- 百度前端技术学院2018笔记 之 利用 CSS animation 制作一个炫酷的 Slider
前言 题目地址 利用 CSS animation 制作一个炫酷的 Slider 思路整理 首先页面包含三种东西 一个是type为radio的input其实就是单选框 二是每个单选框对应的label 三 ...
- css animation @keyframes 动画
需求:语音播放动态效果 方案:使用如下图片,利用 css animation @keyframes 做动画 html <span class="horn" :class=& ...
- Apple CSS Animation All In One
Apple CSS Animation All In One Apple Watch CSS Animation https://codepen.io/xgqfrms/pen/LYZaNMb See ...
随机推荐
- CPU长指令(VLIW)失败的主要原因是什么,VLIW真的无药可救吗?
software和hardware之间总是存在tradeoff:要么是hardware结构复杂,software灵活.要么是hardware结构保持简洁清晰,software干一些脏活累活.VLIW就 ...
- LeetCode-079-单词搜索
单词搜索 题目描述:给定一个 m x n 二维字符网格 board 和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则,返回 false . 单词必须按照字母顺序,通过 ...
- laravel7 图片上传及视图显示
1:修改框架config下的文件filesystems.php中的配置: 原文件 <?php return [ /* |------------------------------------- ...
- 2021-08-02(console、comfrim)
1.console对象 1.输出信息: console.info()别名 console.log(); 2.复合类型表格展示 console.table(obj) || console.table(A ...
- 2022年官网下安装Logstash最全版与官网查阅方法(8.1.0最新安装)
一.环境整合 构建工具(参考工具部署方式) 软件名称 版本 相关文章推荐 NodeJS 16.0.0 https://www.cnblogs.com/liuyangfirst/p/15998172.h ...
- tensorflow源码解析之framework-device
目录 什么是设备 设备属性描述 device_base 关系图 涉及的文件 迭代记录 1. 什么是设备 "设备"是一个很容易引起混淆的概念,在TF中,设备device专指能够执行实 ...
- 12、mysql的事务日志
mysql的事务日志 事务有4种特性:原子性.一致性.隔离性和持久性.那么事务的四种特性到底是基于什么机制实现呢? 事务的隔离性由锁机制实现. 事务的原子性.一致性和持久性由事务的redo日志和und ...
- NET经典书籍必读
C#与.NET框架,入门 + 进阶 + 精通,外加并发编程实例,10本C#图书,一本都不能少. 1.<Learning hard C#学习笔记> 作者:李志 书号:978-7-115-3 ...
- 聊聊磁盘 IO
常见的磁盘类型 按存储原理的不同,可以把磁盘分为这么几种 HDD 盘:没啥说的,就是平时最常见的机械盘. SSD 盘:用电信号来记录存储数据,而不是磁片.显然进行 I/O 时,这要比机械盘的物理寻址方 ...
- 4月9日 python学习总结 模块
1.XML模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融 ...