CSS steps() 函数

CSS steps() 语法

在 CSS 中,steps() 函数用于定义 “CSS 动画” 或 “CSS 过渡” 的步进效果。它不像 cubic-bezier() 那样创建平滑的变化曲线,而是将动画分成离散的步骤,每一步都 “跳跃式” 地进行。

steps() 函数特别适用于需要逐帧控制的动画效果,例如:打字机效果、翻页动画、精灵图帧切换等。

语法:

steps(number-of-steps, direction)

说明:

property 是一个支持时序函数的 CSS 属性,一般是 animation-timing-functiontransition-timing-function

steps() 函数接收以下 2 个参数。

  • number-of-steps(必选):是一个正整数,表示将动画划分成多少步。步数越多,越接近连续动画;步数越少,跳跃感越明显。
  • direction(可选):步进方式,决定动画何时 “跳” 到下一帧,支持以下几种取值:
    • jump-start(或 start):动画从第一步立即开始,跳过初始状态。
    • jump-end(或 end,默认值):动画在最后一步结束,跳过结束状态。
    • jump-none:动画在起点和终点都不跳跃,保持完整步骤。
    • jump-both:动画在起点和终点都跳跃,增加一步。

其中,步进数(number-of-steps)要与动画帧数保持一致,例如精灵图有 10 帧,那就使用 steps(10)。

CSS steps() 摘要

属于 CSS 函数
使用频率
兼容性 查看
官方文档 查看
MDN 查看

CSS steps() 示例

接下来,我们通过几个简单的例子来讲解一下 CSS steps() 函数是如何使用的。

示例 1:steps() 实现步进过渡效果

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: lightskyblue;
            animation: move 2s steps(4) infinite;
        }
        @keyframes move {
            0% { transform: translateX(0); }
            100% { transform: translateX(400px); }
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

页面效果如下图所示。

steps() 实现步进过渡效果

分析:

在这个例子中,steps(4) 表示将动画分成 4 步。其中,div 元素会在 2 秒内从 0 移动到 400px。需要注意的是,它不是平滑移动,而是以 100px 为单位跳跃 4 次(每次 100px),从而产生明显的步进效果。

示例 2:steps() 实现打字机效果

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        p {
            font-family: monospace;
            font-size: 24px;
            width: 0;          /* 初始宽度设为 0,动画从这里开始 */
            overflow: hidden;
            white-space: nowrap;
            animation: type 2s steps(8, end) infinite;
        }

        @keyframes type {
            from { width: 0; }
            to { width: 8ch; }
        }
    </style>
</head>
<body>
    <p>lvyenet</p>
</body>
</html>

页面效果如下图所示。

steps() 实现打字机效果

分析:

在这个例子中,我们使用 @keyframes 规则定义了一个 CSS 动画帧。steps(8, end) 表示将文本宽度分成 8 步,从而模拟打字机效果。然后,p 元素会逐步显示 “lvyenet” 文本,每次跳跃一个字符,并且循环播放。

需要注意的是,steps(8, end) 不能写成 steps(7, end),否则可能效果会有问题。小伙伴们可以自行试一下。

上一篇: cubic-bezier()

下一篇: var()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号