🦕

01过渡transition

交互元素创建动画使用过渡

一、API概览

transition包括四个子属性,每个子属性包括以下参数。
  • transition-property:属性
    • all:全部属性过渡(默认)
    • none:无属性过渡
    • String:某个属性过渡
transition-duration:持续时间
  • Time:秒或毫秒(默认0)
transition-timing-function:缓动函数
  • ease:逐渐变慢,等同于cubic-bezier(.25,.1,.25,1)(默认)
  • linear:匀速,等同于cubic-bezier(0,0,1,1)
  • ease-in:加速,等同于cubic-bezier(.42,0,1,1)
  • ease-out:减速,等同于cubic-bezier(0,0,.58,1)
  • ease-in-out:先加速后减速,等同于cubic-bezier(.42,0,.58,1)
  • cubic-bezier:贝塞尔曲线,(x1,y1,x2,y2)四个值指定曲线中的点P1P2,所有值需在[0,1]区域内
transition-delay:等待时间
  • Time:秒或毫秒(默认0)
 

二、使用&注意

1.时间

  • durationdelay作用于所有节点,包括自身的::before::after
  • transition中出现两个时间值时,第一个解析为duration,第二个解析为delay
  • transition中出现一个时间值时,解析为duration

2.多属性

如果计划对多个属性进行动画处理,可以将它们用逗号分隔的方式传递。例如上面的示例,我们对按钮的 translate 和 background-color 两个属性进行了过渡监听。尽量不要使用all
.btn { transition: translate 250ms linear, background-color 250ms linear; }

3.如何调整过渡的速度

时间函数会告诉浏览器,当一个元素从一个状态过渡到另一个状态时,每个“中间状态”应该是什么样子。
CSS 中有多个关键字可用作时间函数的预设值,它们可以用作 transition-timing-function 属性的值。比如 linear 、ease 、ease-in 、ease-out 和 ease-in-out 。
  • linear (线性) :它导致元素在整个过渡期间以恒定的速度移动。它不模仿自然运动,通常在动画需要一致速度的情况下使用。
  • ease (默认值) : 它开始时较慢,然后逐渐加速,最后再次减速。这种时间函数常用于模拟物体自然运动,通常是默认的选择。
  • ease-in (加速) : 它以较慢的速度开始,然后逐渐加速。它通常用于元素进入屏幕视图并且在屏幕上有停止点的情况,例如弹出框。
  • ease-out (减速) : 与ease-in 相反,ease-out 时间函数以较快的速度开始,然后逐渐减速。它通常用于元素退出屏幕视图的情况,例如元素消失。
  • ease-in-out (先加速后减速) : 它在整个过渡中提供相等的加速和减速。它通常用于需要反复运动的动画,如元素循环淡入淡出。

4.自定义贝塞尔曲线

notion image

5.时间函数演示网站

notion image

6.弹簧动画&linear() generator

notion image

7.哪些属性可以过渡,哪些不能过渡

只能过渡在其起始状态和最终状态之间具有“中间状态”的属性。例如,不可能为 font-family 添加过渡动画效果,因为浏览器不清楚 serif 和 monospace 之间的“中间状态”应该是什么样的。另一方面,你可以为 font-size 添加过渡效果,因为它的单位是可插值的长度。

8.过渡动画的触发器

  • 悬停触发:鼠标悬停在元素上时触发过渡,这通常使用 :hover 伪类选择器来实现
  • 焦点触发:在元素获得或失去焦点时触发过渡,通常使用 :focus 、:focus-within 和 :focus-visible 等伪类选择器来实现
  • 锚点链接触发:页面内部的锚链接被点击时触发过渡,通常使用 :target 伪类选择器来实现。使用 :target 伪类可以为单页应用或滚动到页面内特定部分的情况添加平滑的过渡效果
  • 激活状态触发:用户点击并按住元素(例如链接或按钮)时触发过渡,通常使用 :active 伪类选择器来激活元素状态
  • 表单状态触发:表单状态伪类选择器用于选择表单元素(如输入字段、复选框、单选按钮等)的不同状态,如 :checked:valid:invalid 、:required 等状态。你可以使用这些状态伪类选择器来触发过渡动画,以改善用户体验
  • 与 JavaScript 不同的 class 变化:当元素的 class 通过 JavaScript 发生更改时,CSS 会过渡已更改的符合条件的属性。

9.离散属性的过渡

离散属性是指属性值之间的过渡是不连续的,中间没有中间状态或过渡过程。这意味着属性的值只有一组有限的离散选项,而不是连续的范围。在 CSS 中,display 属性就是一个经典的离散属性,因为它的值通常是离散的,如 block 、inline 、none 、grid 和 flex ,而没有中间的过渡状态。
最近的 CSS 规范引入了 transition-behavior 属性的 allow-discrete 值,允许对离散属性进行一些平滑的过渡。这使得在离散属性上应用过渡变得更加灵活。这意味着,使用 allow-discrete 模式,你可以实现对离散属性的平滑过渡,而不是突然切换。这对于一些需要在离散属性上应用过渡的情况非常有用,使得在这些属性上创建更加流畅的动画效果成为可能。
@layer transition { .card { transition: opacity 0.25s, display 0.25s; transition-behavior: allow-discrete; } .fade-out { opacity: 0; display: none; } } // 多属性处理 transition: opacity 0.5s, display 0.5s allow-discrete, overlay 0.5s allow-discrete;

三、原理

用户与 Web 元素进行交互时,你会看到许多动画不是 CSS 动画类型,它们没有预定义的关键帧。相反,它们是对用户所做的事情的即时反应。通常情况下,CSS 会即时切换这些状态的样式。中间的插值是浏览器自己计算帮我们插入到动画中的,我们只需要确认开始&结束状态
notion image

四、实战