大多数web开发人员在设计中都使用了内置的ease、ease-in、ease-out或ease-in-out函数来处理转换时间函数的大多数用例。虽然这些在日常使用中都很好,但还有一个更强大但令人生畏的选项,即bezier-curve()函数。
使用bezier-curve(),我们可以轻松地定义自定义缓动变量,帮助我们的设计弹出。事实上,上面提到的内置函数也可以使用bezier-curve()函数来编写。为了方便使用,这里有一些有用的缓动函数存储在CSS变量中:

  1. :root {
  2. /* ease-in corresponds to cubic-bezier(0.42, 0, 1.0, 1.0) */
  3. --ease-in-quad: cubic-bezier(0.55, 0.085, 0.68, 0.53);
  4. --ease-in-cubic: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  5. --ease-in-quart: cubic-bezier(0.895, 0.03, 0.685, 0.22);
  6. --ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06);
  7. --ease-in-expo: cubic-bezier(0.95, 0.05, 0.795, 0.035);
  8. --ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.335);
  9. /* ease-out corresponds to cubic-bezier(0, 0, 0.58, 1.0) */
  10. --ease-out-quad: cubic-bezier(0.25, 0.46, 0.45, 0.94);
  11. --ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1);
  12. --ease-out-quart: cubic-bezier(0.165, 0.84, 0.44, 1);
  13. --ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1);
  14. --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);
  15. --ease-out-circ: cubic-bezier(0.075, 0.82, 0.165, 1);
  16. /* ease-in-out corresponds to cubic-bezier(0.42, 0, 0.58, 1.0) */
  17. --ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);
  18. --ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1);
  19. --ease-in-out-quart: cubic-bezier(0.77, 0, 0.175, 1);
  20. --ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1);
  21. --ease-in-out-expo: cubic-bezier(1, 0, 0, 1);
  22. --ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.15, 0.86);
  23. }

cubic-bezier() 函数

cubic-bezier() 函数定义了一个贝塞尔曲线(Cubic Bezier)。

贝塞尔曲线曲线由四个点 P0,P1,P2 和 P3 定义。P0 和 P3 是曲线的起点和终点。P0是(0,0)并且表示初始时间和初始状态,P3是(1,1)并且表示最终时间和最终状态。

cubic-bezier 贝塞尔曲线 - 图1

从上图我们需要知道的是 cubic-bezier 的取值范围:

P0:默认值 (0, 0)
P1:动态取值 (x1, y1)
P2:动态取值 (x2, y2)
P3:默认值 (1, 1)

我们需要关注的是 P1 和 P2 两点的取值,而其中 X 轴的取值范围是 0 到 1,当取值超出范围时 cubic-bezier 将失效;Y 轴的取值没有规定,当然也毋须过大。

最直接的理解是,将以一条直线放在范围只有 1 的坐标轴中,并从中间拿出两个点来拉扯(X 轴的取值区间是 [0, 1],Y 轴任意),最后形成的曲线就是动画的速度曲线

cubic-bezier() 可用于 animation-timing-functiontransition-timing-function 属性。

css3中常用的几个动画效果:

  1. ease: cubic-bezier(0.25, 0.1, 0.25, 1.0) // 开始和结束慢,中间快
  2. linear: cubic-bezier(0.0, 0.0, 1.0, 1.0) // 匀速
  3. ease-in: cubic-bezier(0.42, 0, 1.0, 1.0) // 开始慢
  4. ease-out: cubic-bezier(0, 0, 0.58, 1.0) // 结速慢
  5. ease-in-out: cubic-bezier(0.42, 0, 0.58, 1.0) // 与ease类似,但比ease幅度大

实例演示

  1. <div class="normal"></div>
  2. <div class="custom"></div>
  1. .normal {
  2. width: 50px;
  3. height: 50px;
  4. margin-bottom: 10px;
  5. background-color: #1890ff;
  6. border-radius: 50%;
  7. transition: all 2s;
  8. }
  9. .normal:hover {
  10. transform: translateX(150px);
  11. }
  12. .custom {
  13. width: 50px;
  14. height: 50px;
  15. background-color: @primary-color;
  16. border-radius: 50%;
  17. transition: all 2s cubic-bezier(0.94, -0.25, 0.32, 1.31);
  18. }
  19. .custom:hover {
  20. transform: translateX(300px);
  21. }

在线工具

https://cubic-bezier.com/

image.png