首页 > 其他分享 >聊聊CSS 缓动函数的新成员linear()

聊聊CSS 缓动函数的新成员linear()

时间:2023-05-31 18:03:07浏览次数:50  
标签:function 动画 linear 缓动 CSS 函数

CSS 缓动函数是一种用于控制 CSS 动画过渡效果的函数,可以让动画变得更加自然。这篇文章将介绍一种新的 CSS easing function,即 linear(),它可以模拟出更复杂的缓动效果,文中demo请在chrome 113+中观看。

什么是 easing function?

在动画中,有一种叫做“缓动效果”的技术,它可以让动画变得更加自然。在实现缓动效果时,通常会使用 easing function。easing function 是一种函数,它可以将动画的进度(通常是一个 0 到 1 之间的数字)映射为动画的值。

在 CSS 中,可以使用 easing function 控制 CSS 动画的过渡效果。在 CSS 中,可以使用 transition-timing-function 属性来指定 easing function。例如:

.element {
  transition-property: width;
  transition-duration: 1s;
  transition-timing-function: linear;
}

在这个示例中,transition-timing-function 属性的值为 linear,这意味着动画的过渡效果将呈现线性的变化。在动画中,同样有一个animation-timing-function属性来控制动画的缓动效果。除了 linear 这个关键字之外,还有linear, ease, ease-in, ease-out, ease-in-out等关键字,以及cubic-bezier(p1, p2, p3, p4), steps(n, )等函数。今天我们要说的是一种新的缓动函数 linear(),注意和前面的关键字 linear 区分

linear缓动函数的语法


假设我们有一个动画,要在3s内对一个div放大到原来的10倍:

linear(0, 1) //等同于关键字linear
linear(0, 0.9, 1)  // 0-1.5s 放到到9倍,1.5s-3s放大到10倍
linear(0, 0.5 20%, 0.8 60%, 1)  // 0-20%的时间 放到到5倍,20%-60%的时间放大到8倍,最后放大到10倍

画出图来分别是这样的:

linear
linear(0, 1)
linear(0, 0.9, 1)
linear(0, 0.5 20%, 0.8 60%, 1)
<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="300" loading="lazy" scrolling="no" src="https://codepen.io/imgss/embed/dygBGxy?default-tab=html%2Cresult" style="width: 100%" title="linear()"> See the Pen linear() by imgss (@imgss) on CodePen. </iframe>

linear()模拟跳动效果

虽然我们在上面最多只有4个关键点,但是linear函数可以接收更多的关键点参数来实现更复杂的动画,比如跳动效果。如果你使用过animate.css 的 bounceInDown效果,会发现直接使用之前的CSS的缓动函数是比较难以实现的。在animate.css的实现里面, 是使用一系列关键帧再加上cubic-bezier缓动函数来实现的:

@keyframes bounceInDown {
  from,
  60%,
  75%,
  90%,
  to {
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  0% {
    opacity: 0;
    transform: translate3d(0, -3000px, 0) scaleY(3);
  }

  60% {
    opacity: 1;
    transform: translate3d(0, 25px, 0) scaleY(0.9);
  }

  75% {
    transform: translate3d(0, -10px, 0) scaleY(0.95);
  }

  90% {
    transform: translate3d(0, 5px, 0) scaleY(0.985);
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

.bounceInDown {
  animation-name: bounceInDown;
}

现在有了linear()缓动函数,我们可以在一个关键帧的情况下再结合linear缓动函数来实现:

linear(
    0, 0.063, 0.25 18.2%, 1 36.4%, 0.813, 0.75, 0.813, 1, 0.938, 1, 1
  );
<iframe allowfullscreen="true" allowtransparency="true" frameborder="no" height="336.7744140625" loading="lazy" scrolling="no" src="https://codepen.io/imgss/embed/NWOZNzz?default-tab=html%2Cresult" style="width: 100%" title="linear()"> See the Pen linear() by imgss (@imgss) on CodePen. </iframe> 上面的缓动函数对应的图像如下:


很明显,如果让我们手写这样一个linear函数还是比较复杂的,好在有大佬帮我们做了一个生成工具:https://linear-easing-generator.netlify.app/

兼容性

最后来看看兼容性,目前在chrome 113+可用,暂时还不能用于生产,但两年应该就可以愉快地使用了,本文完

参考文档

标签:function,动画,linear,缓动,CSS,函数
From: https://www.cnblogs.com/imgss/p/17446755.html

相关文章

  • css实现video视频背景色变透明
    利用css样式 mix-blend-mode混合模式,有一个属性screen,就是黑色和其它元素进行混合的时候表现为透明。于是我们要实现一个视频背景色透明的效果就很简单,只要把我们的视频背景色设置为黑色,同时设置如下CSS即可:video{mix-blend-mode:screen;}参考原文:如何让MP4vide......
  • CSS九种选择器你知道吗?
    表格table-相关标签:table表格,tr表示行,td表示列,th表头,caption表格标题-相关属性:border设置边框,rowspan跨行colspan跨列 表单form-作用:获取用户输入的内容,并提交给服务器-相关文本框:inputtype=text、password,radio,checkbox,date,file,select[......
  • CSS 删除线:在 CSS 中使用文本装饰和划线
    CSS删除线是一个CSS属性,它使文本看起来像是被删除线一样,就像这样。在网络开发和写作中,这经常用于表示文本已被删除或不再相关。但它也可以用于不同的事情。删除线可以应用于span元素、段落、div、显示内联块或任何其他需要文本修饰的元素。除了下划线、斜体和粗体,CSS删除线也......
  • Tailwind CSS与写全局样式的优势
    TailwindCSS是一个基于原子类的CSS框架,它提供了一系列的CSS类,可以用来快速构建网页界面。与传统的CSS框架不同,TailwindCSS不是提供一些预定义的样式,而是提供了一系列的原子类,诸如 flex, pt-4, text-center 和 rotate-90 这样的的类,这些原子类可以组合使用,从而构建......
  • css 动画3d旋转案例
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>body{perspective:500px;}.box{posit......
  • css 动画 keyframes
    动画是CSS3中最具有颠覆性的特征之一,可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果.相比较过渡效果,动画可以实现更多变化,更多控制,连续播放等效果.动画的基本使用:步骤分为两步:1.定义动画2.调用动画一.定义动画(类似定义类选择器)@keyframesmov......
  • css rotate翻转图像案例
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>.box{position:relative;width:300px;heig......
  • 前端开发如何更好的避免样式冲突?级联层(CSS@layer)
    作者:vivo互联网前端团队-ZhangJiqi本文主要讲述了CSS中的级联层(CSS@layer),讨论了级联以及级联层的创建、嵌套、排序和浏览器支持情况。级联层可以用于避免样式冲突,提高代码可读性和可维护性。一、什么是级联层(CascadeLayers)?1.1级联层的官方定义我们参看Cascadingand......
  • tailwindcss在使用cdn引入静态html的时候,使用vscode代码提示
    原文:Hey!TheIntellisenseextensiondoesneedaconfigfiletoworktoday.Iwouldsuggestcreatingoneinyourprojectroottoenabletheextension.Anemptyfilewillworkjustfineforthiscaseifthedefaultssuityourneeds.Ifyouwanttocustomiz......
  • css实现文本超出固定行数显示...和展开收起
    文本超出固定行数显示...和展开收起项目中有时需要实现文字超出末尾显示…和展开收起按钮的需求,在我用js限制字符数实现之后,又去找了大佬用css实现的方法,发现这样更满足我的需求且更简单。思路:float可以实现文字环绕效果判断展开收起的状态,可以使用复选框和伪元素结合实现复选......