• 首页
  • 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 粉丝
这个人很懒,什么都没有留下~
Go语言开发者的Apache Arrow使用指南:高级数据结构
上一篇 2023年7月14日 上午12:00
告别零散低效整体自动化兴起,自动化架构助力企业数字化转型升级
下一篇 2023年7月15日 上午8:00
磁力链接 广告招租 广告招租 广告招租 广告招租 广告招租

相关推荐

  • 如何友好地将安全性集成到 CI/CD 中? 2023年7月15日
  • 电脑系统是如何识别出代理IP的呢? 2023年5月4日
  • loongarch架构介绍—(五)TLB维护 2023年3月6日
  • 怎么选择国内独享ip代理? 2023年5月4日
  • 得物自建DTS平台的技术演进 2023年7月14日
  • 轻松保障万级实例,vivo服务端监控体系建设实践 2023年3月6日
2275
2275的头像
2275注册用户

这个人很懒,什么都没有留下~

34 文章
1 评论
0 粉丝

最近文章

  • Fedora 和 openSUSE 正在放弃对流行的视频编解码器的支持
  • 影音播放器 PotPlayer64 241216(1.7.22398) 中文绿色版

    影音播放器 PotPlayer64 241216(1.7.22398) 中文绿色版

    2024年12月17日

  • 迅雷 11.1.12.1692 去广告VIP绿色精简版

    迅雷 11.1.12.1692 去广告VIP绿色精简版

    2024年12月17日

  • Sysinternals 套件 2024.12.16

    Sysinternals 套件 2024.12.16

    2024年12月17日

  • 员工网络监控专业版 6.3.12

    员工网络监控专业版 6.3.12

    2024年12月17日

  • 替你去试驾 – 因碰撞测试成为焦点的帕萨特 – 还值不值得买

    替你去试驾 – 因碰撞测试成为焦点的帕萨特 – 还值不值得买

    2024年12月17日

  • 2.0T – 自动 – 舒适型 – 旅行版 – 2011款 – 7万公里保养项目费用 – 大众帕萨特

    2.0T – 自动 – 舒适型 – 旅行版 – 2011款 – 7万公里保养项目费用 – 大众帕萨特

    2024年12月17日

  • 大众全新帕萨特升级是怎么一回事

    大众全新帕萨特升级是怎么一回事

    2024年12月17日

  • 到哪家买比较便宜 – 中国故事 – 每本标价都是10元 – 24本 – 我们班级要买 – 两个书店的 – 请你算一算 – 中国故事

    到哪家买比较便宜 – 中国故事 – 每本标价都是10元 – 24本 – 我们班级要买 – 两个书店的 – 请你算一算 – 中国故事

    2024年12月17日

  • 世说新语 – 言语 – 钟氏之子翻译

    世说新语 – 言语 – 钟氏之子翻译

    2024年12月17日

  • 18款汉兰达用车的真实感受 – 车主点评

    18款汉兰达用车的真实感受 – 车主点评

    2024年12月17日

标签

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

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

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