前端面试-css中transition和animate有何区别?
题目及简易解析
css中transition和animate有何区别?animate如何停留在最后一帧?
Transition是css中检测指定属性变化进行自动补间动画的属性。
Animate是先指定好动画过程中的关键帧属性,进行动画的属性。
在animate动画中
animation-fill-mode:forwards 是动画完成后,保持自最后一个属性。
下面我们详细解读下这些属性的应用。
Transition 过渡
Transition的翻译是 过渡 ,从字面理解其实也是动画的一种,只是它关注的点相对比较简单。对于指定的属性在发生变化的时候,浏览器自动按照指定的时间进行自然的过渡。先来个案例
{ width:100px; height:100px; background:red; transition:width 2s; //在这里 } div:hover { width:300px; } CSS复制代码
上面的案例中,其实定义了两个关键帧,一个是默认的宽度是100px,鼠标经过的时候,宽度会变成300px。在传统的情况下,其实是个很直白的变化。鼠标经过直接变更。 而增加transiton属性之后,等于会检测width的变化,并且变化执行过渡的时间是 2秒。这使得width的变化变得很丝滑。
transition的属性有以下4个
- transition-property 需要过渡的属性,不是每个属性都能过渡的
- transition-duration 指定从一个属性到另一个属性过渡所要花费的时间。默认值为0,为0时,表示变化是瞬时的,看不到过渡效果。
- transiton-timing-function 就是过渡的动画类型。可用的类型有liner(匀速)、ease-in(减速)、ease-out(加速)ease-in-out(先加速再减速)、cubic-bezier:三次贝塞尔曲线,可以定制
- transition-delay 指定检测到过渡行为之后延迟一定时间后才开始进行执行。
写法分开合起来写都可以
transition: height 1s; //通常用法,属性和时间 //过渡时间、延迟时间、属性、类型 transition: 1s 1s height ease; //或者分开写 transition-property: height; transition-duration: 1s; transition-delay: 1s; transition-timing-function: ease;/*属性分开写*/ CSS复制代码
transition所有的运行都需要条件进行触发。比如:hover、:focus、:checked或者js操作css样式的变更等等。
以上造成的transiton的优点就是简单易用,方便就有局限性
- transition需要事件触发,所以没法在网页加载时自动发生。
- transition是一次性的,不能重复发生,除非一再触发。
- transition只能定义开始状态和结束状态,不能定义中间状态,也就是说只有两个状态。
- 一条transition规则,只能定义一个属性的变化,不能涉及多个属性。
针对上述问题,就有了复杂的animation了。

Animation 动画
CSS3的animation属性可以像Flash制作动画一样,通过控制关键帧来控制动画的每一步,实现更为复杂的动画效果。要实现animation动画,就需要定义动画类型,并且在样式中调用。先上案例
@keyframes mymove //动画关键帧定义 { from {left:0px;} to {left:200px;} } div { width:100px; height:100px; background:red; position:relative; animation:mymove 5s infinite; //元素中调用 }
CSS复制代码
实际运行起来的之后,默认就开始了运行。不需要其他的出发条件。
先说第一部分,声明动画类型,@keyframes。参照上面案例,@keyframes后面跟上定义动画的名称,里面是每个节点上的属性变化。主要是用百分比,比如0%、20%、50%、100%等。其中0%和100%可以用from和to代替,并且不能缺少。
div:hover { animation: 1s changeColor; } @-webkit-keyframes changeColor { 0% { background: #c00; } 50% { background: orange; } 100% { background: yellowgreen; } }
CSS复制代码
animation在调用的时候,也有很多属性。
- animation-name 动画类型,也就是@keyframes定义的动画
- animation-duration 指定一个周期需要的时间。
- animation-timing-function 速度曲线,和transition-timing-function一样,可用的类型有liner(匀速)、ease-in(减速)、ease-out(加速)ease-in-out(先加速再减速)、cubic-bezier:三次贝塞尔曲线,可以定制
- animation-delay 延迟时间
- animation-iteration-count 播放的次数、默认1
- animation-direction 默认为nomal,每次循环都是向前播放,(0-100),另一个值为alternate,动画播放为偶数次则向前播放,如果为基数词就反方向播放
- animation-state:默认为running,播放,paused,暂停
- animation-fill-mode:定义动画开始之前和结束之后发生的操作,默认值为none,动画结束时回到动画没开始时的状态;forwards,动画结束后继续应用最后关键帧的位置,即保存在结束状态;backwards,让动画回到第一帧的状态;both:轮流应用forwards和backwards规则。

文末
animation属性类似于transition,他们都是随着时间改变元素的属性值,其主要区别在于:transition需要触发一个事件才会随着时间改变其CSS属性;animation在不需要触发任何事件的情况下,也可以显式的随时间变化来改变元素CSS属性,达到一种动画的效果。
相关推荐
-
第18问:MySQL CPU 高了,怎么办?2025-02-24 10:27:18
-
mysql索引类型 normal, unique, full text
mysql索引类型 normal, unique, full text2025-02-24 10:05:05 -
uwsgi+django+nginx 搭建部分总结2025-02-24 10:03:33
-
使用Docker配置Nginx环境部署Nextcloud2025-02-24 10:02:03
-
Nginx安装和怎么使用2025-02-24 10:00:45