CSS cubic-bezier() 函数

CSS cubic-bezier() 语法

在 CSS 中,cubic-bezier() 函数用于定义三次贝塞尔曲线。它可以精确地控制 “CSS 动画” 或 “CSS 过渡” 的速度变化曲线。

通过设置四个控制点,cubic-bezier() 可以自定义各种速率,比如加速、减速、弹跳、回弹等,比起内置的速率函数(如 ease、linear 等),它提供了更强大的灵活性。

语法:

cubic-bezier(p1x, p1y, p2x, p2y)

说明:

cubic-bezier() 函数只能用于 transition-timing-functionanimation-timing-function 这两个属性。

cubic-bezier() 函数接受 4 个数值作为参数,它们定义了三次贝塞尔曲线的两个控制点 P1 和 P2。曲线的起始点 P0 始终是 (0, 0),终点 P3 始终是 (1, 1)。

  • p1x, p1y: 第一个控制点 P1 的 x 和 y 坐标。
  • p2x, p2y: 第二个控制点 P2 的 x 和 y 坐标。

这些点一起定义了一条从起点到终点的贝塞尔曲线,表示动画从开始到结束所经历的速度变化。

对于 cubic-bezier() 函数,小伙伴们还需要清楚以下两点:

  • p1x 和 p2x(X 值)必须 在 0 到 1 之间,否则该语句无效。
  • p1y 和 p2y(Y 值)可以大于 1 或小于 0,从而实现弹跳、过冲等视觉效果。

提示: 我们可以使用在线工具(例如 cubic-bezier.com)来可视化和生成自定义的 cubic-bezier() 值。

CSS cubic-bezier() 摘要

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

CSS cubic-bezier() 示例

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

示例 1:cubic-bezier() 实现过渡效果

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        div {
            width: 100px;
            height: 100px;
            border-radius: 50px;
            background-color: lightskyblue;
            transition: transform 1s cubic-bezier(0.25, 0.1, 0.25, 1);
        }
        div:hover {
            transform: translateX(300px);
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

页面效果如下图所示。当鼠标移动到小球上时,它会平滑地向右移动 300px。

cubic-bezier() 实现简单过渡效果

分析:

 在这个例子中,我们使用 transition 属性定义了一个过渡效果。其中,cubic-bezier(0.25, 0.1, 0.25, 1) 表示定义一种类似 ease-in-out 的缓动曲线。

示例 2:cubic-bezier() 实现弹跳效果

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        div {
            width: 100px;
            height: 100px;
            border-radius: 50px;
            background-color: hotpink;
            transition: transform 0.8s cubic-bezier(0.68, -0.55, 0.27, 1.55);
        }
        div:hover {
            transform: translateY(150px);
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

页面效果如下图所示。当鼠标移到小球上时,它会突然跳动一下,像是 “弹了一下”。

cubic-bezier() 实现弹跳效果

分析:

需要注意的是,这里 cubic-bezier(0.68, -0.55, 0.27, 1.55) 中的 y 值超出了 0~1 的范围:

  • -0.55:开始时快速超调。
  • 1.55:结束时略微回弹。

通过使用这种参数组合,能模拟真实物体的弹性运动。

示例 3:cubic-bezier() 应用于 CSS 动画

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        div {
            width: 100px;
            height: 100px;
            border-radius: 50px;
            background-color: lightskyblue;
            animation: slide 2s infinite cubic-bezier(0.4, 0, 0.2, 1);
        }
        @keyframes slide {
            0% { transform: translateX(0); }
            50% { transform: translateX(200px); }
            100% { transform: translateX(0); }
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

页面效果如下图所示。页面加载后,小球会不断左右来回滑动。

cubic-bezier() 结合 CSS 动画

分析:

在这个例子中,我们使用了 animation@keyframes 来定义一个动画帧。cubic-bezier(0.4, 0, 0.2, 1) 表示自定义了一种缓动曲线,可以使得整个滑动动画看起来更加自然、流畅。

上一篇: sepia()

下一篇: steps()

给站长反馈

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

邮箱:lvyenet@vip.qq.com

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