CSS – Transition & Animation
前言
之前的笔记 CSS – W3Schools 学习笔记 (3) 就有讲过 CSS Transitions 和 CSS Animations.
这里做一个整理, 补上一些细节.
Transitions
5 个属性可以用
transition-property
transition-property: width;
watch propety width, 改变的时候就会有 animation
要设置多个就加逗号做分隔符:width, color, background-color
transition-delay
trasition-delay: 1s
表示 1 秒后触发,s = second,也支持 ms = millisecond
1s, 500ms, 0.5s 都是可以的。
transition-duration
transition-duration: 1s
整个 animation 过程用时 1 秒
transition-timing-function
过度的体验, 比如 ease-in, ease-out 那些, default 是 ease
参考: Cubic Bezier
transition
shorthand property
transition: width 2s linear 1s;
property, duration, function, delay
其实 property 和 function 顺序不重要, 因为它很聪明会识别出来的. 但是 duration 和 delay 就不可以搞错. 参考: MDN
Apply Multiple
transition: width 1s, height 1s;
transition-property: width, height;
transition-duration: 1s, 1s;
property, shorthand 写法都是加逗号
什么时候放 ?
有个 div width 100px
<div class="target">target</div>
.target {
border: 2px solid red;
width: 100px;
}
hover 的时候 width change to 300px
.target:hover {
width: 300px;
transition-property: width;
transition-duration: 1s;
transition-timing-function: ease-in;
}
当 hover 的时候, 修改 width, 同时给予它 transition 逻辑.
把 transition 逻辑放到 hover 是可以的, 但是注意结尾的时候, 到 mouse leave 的时候 width 恢复到 100px 同时 transition 也移除了, 所以退回的动作没有 animation.
从这个例子可以看出来 Transition 的 work flow, 当 element 有 transition 属性时, 修改 CSS 就会有 animation. 如果没有就不会出现 animation.
所以呢, 比较常见的做法是一开始就给元素 transition 属性. 后续就操作其它 CSS 属性就可以了.
如果是要复杂一些的 animation, 比如有 2 step 的, 动态多一点的, 那么建议之间用 JS 的 animation 更直观.
JS Listen to Transition Event
transitionrun, transitionstart, transitioncancel, transitionend
run 是一开始就跑的, 比 start 还早.
cancel 是当 animation 没有结束, 但是属性又被修改了。
正常情况的顺序:run > start > end
切换 2 次情况下的顺序:run > start > cancel > run > start > cancel > run > start > end,中间 cancel 了 2 次。
参考: HTMLElement: transitionend event
当有 multiple transition 时,transitionend 会触发多次哦
transition-property: opacity, visibility;
transition-duration: 1s;
可以通过 TransitionEvent.propertyName 来判断是哪一个
Animations
@keyframes
animation 过程的 style
@keyframes example {
from {background-color: red;}
to {background-color: yellow;}
}
@keyframes example {
0% {background-color:red; left:0px; top:0px;}
25% {background-color:yellow; left:200px; top:0px;}
50% {background-color:blue; left:200px; top:200px;}
75% {background-color:green; left:0px; top:200px;}
100% {background-color:red; left:0px; top:0px;}
}
可以写任何 style property, % 就是 duration 到那个 % 时要出什么 style
Percentage 例子说明:
CSS
h1::after {
content: '';
width: 0;
height: 100%;
position: absolute;
top: 0;
left: 0;
background-color: rgba(255, 0, 0, 0.7);
animation: overlay 3s ease infinite;
}
它是一个 overlay, 开始时 width 0, left 0
left 0, width 70% 长这样
left 10% width 90%, 长这样
所以动画是
@keyframes overlay {
50% {
width: 100%;
left: 0;
}
100% {
width: 0%;
left: 100%;
}
}
我一开始认为 50% 的时候不需要 left 0, 因为本来就是 0 丫. 结果是这样的
因为它变成了 0-100% duration 时, left 从 0 到 100%. 所以一开始 left 就往 100% 去了. 而正确的效果应该是 50% 的时候, left 依然要在 0.
animation-name, duration, delay, timing-function
div:hover {
animation-name: example;
animation-duration: 4s;
animation-delay: 2s;
animation-timing-function: ease-in-out;
}
name 对应 @keyframes 的名字, duration, delay, timing-function 和 transition 一样.
timing-function の stpes()
除了常用的 easing function 还有一个叫 steps 的 timing function
我用一个例子说明, 假如我们要实现一个时钟, 秒针转动.
HTML


<div class="clock">
<div class="second"></div>
</div>
CSS Style


.clock {
width: 300px;
height: 300px;
border: 1px solid black;
border-radius: 50% 50%; display: flex;
justify-content: center; .second {
width: 2px;
height: 150px;
background-color: black; transform-origin: bottom;
animation: run 60s; @keyframes run {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
}
}
效果
它的秒针是一直在移动的, 这个我们常看到的时钟不太一样. 一般上是每一秒跳动一次, 而不是一直移动.
要做到这点就需要用到 steps function. 它的功能是切分多个 steps. 每一次跳动一个 step
在 animation 加上 steps
animation: run 60s steps(60, end);
切成 60 个 steps
效果
第一个是 end, 第二个是 start, 区别是在 step start 的时候给 style 还是 step end 的时候给 style. 因为第二个是 start, 所以它会先 apply style, 看起来就比第一个先启动.
animation-iteration-count
animation 跑完, 就会回到原本的 style. 要跑多几次就用 iteration
animation-iteration-count: 2;
animation-iteration-count: infinite; 无限次
animation-direction
normal, reverse, alternate, alternate-reverse
reverse 是从最后一个 @keyframes style 跑到第一个, 反过来执行.
alternate 是在最少跑 2 次才有用的, 第 1 次正常跑, 第 2 次 reverse 跑, 以此类推
alternate-reverse 是第一次跑 reverse, 第 2 次正常跑
animation-fill-mode
animation 跑完, 就会回到原本的 style.
by default, animation 的 style, 只会在 animation 过程中有效, 之前, 之后都不会有, 但 fill-mode 可以调.
animation-fill-mode: none,
forwards,
backwards,
both
forwards
是跑完 animation 后把最后一个 keyframs's style apply 去 element. (注: apply 了后, 涉及到 animation 的属性就被 lock 着了, 无法 set style 去修改了)
backwards 是当 delay 期间, 它会提前去拿 first keyframe's style 去 apply.
both 是 2 forwards + backwards
animation
shorthand property
animation: 3s ease-in 1s 2 reverse both paused slidein;
duration | easing-function | delay | iteration-count | direction | fill-mode | play-state | name (timeline 没有)
JS Listen to Animation
animationstart
animationend
animationcancel
animationiteration
Animation 和 Transition 的区别
transition 和 animation 的使用动机差挺多的.
如果是 style change 不想太突兀, 做点过渡, 这个叫 transition.
如果是, 想让一个东西"动"起来, 这叫 animation.
具体在使用上的区别:
transition 是先定义好过渡效果 duration ease, 然后修改 element 的 style 属性值.
animation 是先用 @keyframes 定义好动画过程中的 style, 然后 apply animation 并附上 duration ease.
transition 是后来加 style, 这个 style 就是 element 普通的 style, transition 结束它也不会消失.
animation 是先定义动画过程中的 style, 然后 apply 动画进去, 动画结束并不会影响 element 的 style (除非 fill-mode)
综上还是差挺远的.
冷知识 – Transition 对 height: auto / fit-content 无效
Inspec Animation
参考:
Youtube – How to show the Animations tab in the dev tools
stackoverflow – Is it possible to inspect CSS3 animation keyframes with a browser inspector?
Chrome 的 DevTools 可以很容易的 debug animation
开启
开启后, F5 refresh page.
这时, 就可以看到 animation records 了.
选择其中一个来 inspect
还可以手动控制速度哦
Edit @keyframes
CSS – Transition & Animation的更多相关文章
- Atitti css transition Animation differ区别
Atitti css transition Animation differ区别 1.1. transition的优点在于简单易用,但是它有几个很大的局限. 1 1.2. Transition ...
- Atitti css transition Animation differ区别
Atitti css transition Animation differ区别 1.1. transition的优点在于简单易用,但是它有几个很大的局限. 1 1.2. js 动态改变 st ...
- css transition & animation
transition 支持:IE10+ img{ transition: 1s 1s height ease; } transition-property: 属性transition-duration ...
- CSS Transform / Transition / Animation 属性的区别
back21 Jun 2011 Category: tech Tags: css 最近想UI的动画转到css3能吃进3d加速的属性上面来以加强动画的连贯性.只是对于css几个新加的属性不太熟悉,常常容 ...
- CSS动画-transition/animation
HTML系列: 人人都懂的HTML基础知识-HTML教程(1) HTML元素大全(1) HTML元素大全(2)-表单 CSS系列: CSS基础知识筑基 常用CSS样式属性 CSS选择器大全48式 CS ...
- css3 transition animation nick
时光转眼即逝,又到周六了,今天写点某部分人看不起的css玩玩! 转换 转换属性transform: 浏览器前缀: -webkit-transform;-o-transform;-moz-transfo ...
- css3动画transition animation
CSS动画简介 transition animation transition过渡:css3通过transitions属性引入时间概念,通过开始.结束状态自动计算中间状态,实现状态改变的过渡效果 ...
- CSS3 & transition & animation
CSS3 & transition & animation https://developer.mozilla.org/en-US/docs/Web/CSS/transition-ti ...
- A transition animation compatible Library.
Android5.0之后为我们提供了许多炫酷的界面过渡效果,其中共享元素过渡也是很有亮点的一个效果,但这个效果只能在Android5.0之后使用,那今天我们就来将共享元素过渡效果兼容到Android4 ...
- No.3 - CSS transition 和 CSS transform 配合制作动画
课程概述 作业提交截止时间:09-01 任务目的 深度理解掌握 transition-timing-function 以及它的意义 学会配合使用 CSS transform 和CSS transiti ...
随机推荐
- 网易数帆实时数据湖 Arctic 的探索和实践
作者 | 蔡芳芳 采访嘉宾 | 马进 网易数帆平台开发专家 数据中台也要从离线为主走向实时化,湖仓一体是第一步. 数据从离线到实时是当前一个很大的趋势,但要建设实时数据.应用实时数据还面临两个难题.首 ...
- 基于微信小程序+Springboot校园二手商城系统设计和实现
\n文末获取源码联系 感兴趣的可以先收藏起来,大家在毕设选题,项目以及论文编写等相关问题都可以给我加好友咨询 一. 前言介绍: 在当今社会的高速发展过程中,产生的劳动力越来越大,提高人们的生活水平和质 ...
- FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg
<FFmpeg开发实战:从零基础到短视频上线>一书的"第11章 FFmpeg的桌面开发"介绍了如何在Windows环境对Qt结合FFmpeg实现桌面程序,那么Win ...
- C# 算术表达式求值(后缀法),看这一篇就够了
一.种类介绍 算术表达式有三种:前缀表达式.中缀表达式和后缀表达式.一般用的是中缀,比如1+1,前后缀就是把操作符移到前面和后面,下面简单介绍一下这三种表达式. 1.前缀表示法 前缀表示法又叫波兰表示 ...
- C# EF Core 后端代码已定义的用户实体,如何扩展字段?
注:"2020中国.NET开发者大会"上学习到的开发技巧, 记录下来 1.问题 后端代码已定义的用户实体,如下: public class UserEntity { public ...
- JMeter Sampler-http请求之KeepAlive使用总结
Sampler-http请求之KeepAlive使用总结 测试环境 apache-jmeter-2.13 KeepAlive使用介绍 说明: 1.Use KeepAlive 勾上,则表示为求连接设置请 ...
- windows生成苹果私钥证书p12证书和profile文件的方法
hbuilderx出现已经有差不多10年时间了,现在越来越多的企业,开始使用跨平台性更优秀的uniapp来开发ios app. 开发ios app的时候,打包需要苹果的私钥证书和证书profile文件 ...
- ssh 转发 和 切换图形化
适用环境 宿主机连接到一台服务器是,服务器系统里面的浏览器点击http网页卡顿,那么这时可以通过ssh将端口转发到宿主机 使用宿主机的浏览器点击,则不会很卡顿. [root@foundation1 ~ ...
- 【JavaScript】精度损失问题
参卡博客: https://blog.csdn.net/azl397985856/article/details/99148969/
- 个人自家使用的路由器:水星D121G —— 1200M 11AC双频千兆无线路由器 D121G
地址: https://www.mercurycom.com.cn/product-465-0.html