• 首页
  • windows软件
    • 办公软件
    • 媒体图像
    • 汉化补丁
    • 系统工具
    • 恢复备份
    • 绿色破解
    • 上传下载
    • 即时通讯
    • 行业软件
    • Mac应用
    • 小工具
  • Android
  • 固件
    • 手机固件
    • 路由器固件
  • 模板源码
    • 模板
    • 源码
    • 插件
登录 注册
  1. 首页
  2. 百科
  3. 前端后端

如何理解 CSS step 函数中的 jump-* 关键词?

2275 • 2023年7月15日 上午12:00 • 前端后端

之前在这篇文章中:CSS 实现 Ant Design官网Logo彩蛋效果[1]实现了一个鼠标 hover 效果,如下

如何理解 CSS step 函数中的 jump-* 关键词?

Kapture 2022-01-25 at 10.33.11

原理其实很简单,就是一个 CSS 动画,使用的是steps阶梯函数,不断改变background-position

.logo{
  animation: random 1s steps(10) infinite;
}
@keyframes random {
  to {
    background-position: 100%;
  }
}

里面用到的小图标是这样一张图片(11个小图标)

如何理解 CSS step 函数中的 jump-* 关键词?

乍一看,动画好像非常完美,其实还是有一个小小的缺陷,仔细观察,最后一个图标(点赞图标)一直没有出现过,直接被跳过了,文章评论中也有人提到并给出解决方案

如何理解 CSS step 函数中的 jump-* 关键词?

但是这种方式不太稳定,background-potion需要考虑实际的帧数,也就是需要根据steps的步数改变。

除了这种方式,其实还有更好的解决方案,今天就一起来探讨这个问题

一、问题重现

为了方便观察和演示,这里用1、2、3来做一张序列帧图片,如下

如何理解 CSS step 函数中的 jump-* 关键词?

然后通过 steps阶梯函数实现序列帧动画,关键实现如下

div{
  animation: random 1s steps(2) infinite;
}
@keyframes random {
  to {
    background-position: 100%;
  }
}

效果是这样的(丢失了最后一帧)

Kapture 2023-06-11 at 16.23.09

为啥这里明明有 3 帧,却要设置steps的次数为 2 ?我们不妨设置为 3 试试

animation: random 1s steps(3) infinite;

效果如下

如何理解 CSS step 函数中的 jump-* 关键词?

情况就更加糟糕了,而且并不是按照1、2、3的边界变化的,还出现了中间过渡状态,显然不是我们想要的效果。

要搞清楚这个问题,需要理解steps函数中的第 2 个参数,继续往下看。

二、 steps 中的首尾帧忽略规则

steps其实有两个参数,官方语法如下

steps( <integer> [, <step-position> ]? )

现在再来看前面的写法

steps(2)

这其实是一个简写,等同于

steps(2, end)

这是什么意思呢,end表示结束,也就是忽略最后一帧,所以上面的例子中,虽然有 3 帧,但忽略最后一帧后就只有 2 帧了,如下

如何理解 CSS step 函数中的 jump-* 关键词?

在动画中就是这样,1→2→1→2…

如何理解 CSS step 函数中的 jump-* 关键词?

所以,steps(2)表示将原图片分成 3 帧,但是只运行前面 2 帧,最后一帧跳过。

那么,上面的steps(3)也很好理解了吧,将原图片平均分成了 4 份,所以就出现了中间过渡状态

如何理解 CSS step 函数中的 jump-* 关键词?

除了end以外,还有一个start

steps(2, start)

start表示开始,也就是忽略最前面的一帧

如何理解 CSS step 函数中的 jump-* 关键词?

在动画中就是这样,2→3→2→3…

Kapture 2023-06-11 at 16.44.54

所以,steps(2,start)表示将原图片分成 3 帧,但是只运行后面 2 帧,跳过了第一帧。

那么,有没有办法分成多少帧就运行多少帧呢?当然也是有的,就是后来更新的jump-*关键词

三、steps 中jumb-*关键词

从 Chrome 77+开始,steps支持了几个以jumb-开头的关键词,分别是

  • jump-start,等同于之前的start,表示跳过第一帧
  • jump-end,等同于之前的end,表示跳过最后一帧
  • jump-both,表示跳过第一帧和最后一帧
  • jump-none,表示都不跳过

下面是官方的一个函数图像(每个实心点表示一帧)

如何理解 CSS step 函数中的 jump-* 关键词?

其实我还是比较习惯于用跳过来理解,前面两个就不说了,先看jumb-both

steps(1, jump-both)

去除首尾两帧后,就只剩下中间一帧了,示意如下

如何理解 CSS step 函数中的 jump-* 关键词?

image-20230611170734032

最后的动画效果也只有中间一帧了,2→2→2→2…

如何理解 CSS step 函数中的 jump-* 关键词?

然后是jump-none

steps(3, jump-none)

表示不跳过,有多少帧就运行多少帧

如何理解 CSS step 函数中的 jump-* 关键词?

动画效果就是正常的1、2、3依次变化,1→2→3→1→2→3…

Kapture 2023-06-11 at 17.11.28

根据这个原理,文章开头的小缺陷就非常好解决了,将steps(10)改为steps(11, jump-none)即可

.logo{
  animation: random 1s steps(11, jump-none) infinite;
}
@keyframes random {
  to {
    background-position: 100%;
  }
}

这样就可以正常的看到最后一个图标了

如何理解 CSS step 函数中的 jump-* 关键词?

你也可以访问以下任意链接:

  • CSS ant design logo fix (codepen.io)[2]
  • CSS ant design logo fix  (juejin.cn)[3]
  • CSS ant design logo fix (runjs.work)[4]

之前的效果(注意对比观察最后一个点赞图标)

  • Ant Design Logo (codepen.io)[5]

四、最后总结一下

其实这个特性也已经出来好几年了,但是好像很少有人知道,主要原因是这个特性使用场景不太丰富,并且有替代方案,再者,这个特性是旧属性的补充,导致在文档上不易轻易被发现(我也是无意发现的)。兼容性方面,Safari还是有些拉胯,需要14+才行,完整兼容性如下:

如何理解 CSS step 函数中的 jump-* 关键词?

文章版权声明

 1 原创文章作者:2275,如若转载,请注明出处: https://www.52hwl.com/30809.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 4 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

cssLOGO
赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
0 0
生成海报

关于作者

2275的头像

2275注册用户

34 文章
1 评论
0 粉丝
这个人很懒,什么都没有留下~
Vercel 推出 AI SDK、AI 应用模板,快速构建 AI 应用! Vercel 推出 AI SDK、AI 应用模板,快速构建 AI 应用!
上一篇 2023年7月15日 上午12:00
值得与Python结合使用的五个新颖的数据科学工具 值得与Python结合使用的五个新颖的数据科学工具
下一篇 2023年7月15日 上午12:00
磁力链接 广告招租 广告招租 广告招租 广告招租 广告招租 广告招租 广告招租

相关推荐

  • CSS 奇思妙想之酷炫倒影 前端后端

    CSS 奇思妙想之酷炫倒影

    000
    cmcc的头像 cmcc
    2023年3月6日
  • Input 实现回车失焦,考虑输入法的情况 前端后端

    Input 实现回车失焦,考虑输入法的情况

    000
    cmcc的头像 cmcc
    2023年3月6日
  • iOS开发OC基础:OC数组对象NSArray的常用方法 前端后端

    iOS开发OC基础:OC数组对象NSArray的常用方法

    000
    sam的头像 sam
    2023年7月15日
  • 聊聊并发编程两原则,你明白了吗? 前端后端

    聊聊并发编程两原则,你明白了吗?

    000
    cmcc的头像 cmcc
    2023年7月14日
  • js使用hasOwnProperty判断属性 前端后端

    js使用hasOwnProperty判断属性

    000
    cmcc的头像 cmcc
    2023年5月4日
  • JavaScript数组常用方法解析和深层次js数组扁平化 前端后端

    JavaScript数组常用方法解析和深层次js数组扁平化

    000
    liangwen的头像 liangwen
    2023年7月15日

标签

ai chatgpt css gpt ip JAVA javascript js Linux mysql openai python win windows 人工智能 代码 学习 安装 开源 微软 数据 文件 机器人 模型 浏览器 点击 生成式 系统 谷歌 软件
  • 关于本站
  • 友情链接
  • 标签
  • 网站地图

Copyright © 2021汇维网 蜀ICP备20004578号-2号 Theme byjustnews

Admin by汇维资源网 云存储提供阿里云 服务器提供腾讯轻量云