如何用CSS绘制平滑的贝塞尔曲线?

来源:Android社区作者:河北彩花头衔:网络博主
导读:本期聚焦于小伙伴创作的《如何用CSS绘制平滑的贝塞尔曲线?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用CSS绘制平滑的贝塞尔曲线?》有用,将其分享出去将是对创作者最好的鼓励。

贝塞尔曲线是计算机图形学中常用的参数曲线,在CSS里主要用于控制动画的过渡速率,让元素的属性变化不再生硬,呈现出更自然的动态效果。CSS原生支持的贝塞尔曲线基于三次贝塞尔曲线模型,通过四个控制点来定义曲线的形状,其中起点和终点是固定的,开发者只需要调整中间两个控制点的坐标就能得到不同的曲线效果。

CSS贝塞尔曲线的基础语法

CSS中通过cubic-bezier()函数来定义贝塞尔曲线,该函数的语法格式如下:

/* 四个参数分别对应两个控制点的x和y坐标,取值范围可以是任意数值 */
/* 起点固定为(0,0),终点固定为(1,1) */
cubic-bezier(x1, y1, x2, y2)

其中x1和x2的取值范围建议在0到1之间,这样能保证曲线的时间进度是正向的,不会出现动画倒放的情况。y1和y2的取值范围没有限制,超过1或者小于0的时候会产生回弹、超出目标值等特殊动画效果。

常见的预设贝塞尔曲线

CSS已经内置了几个常用的贝塞尔曲线预设,开发者可以直接使用,不需要手动计算参数:

  • ease:默认值,慢-快-慢的过渡效果,对应cubic-bezier(0.25, 0.1, 0.25, 1)
  • linear:匀速过渡,对应cubic-bezier(0, 0, 1, 1)
  • ease-in:慢入快出,对应cubic-bezier(0.42, 0, 1, 1)
  • ease-out:快入慢出,对应cubic-bezier(0, 0, 0.58, 1)
  • ease-in-out:慢入慢出,对应cubic-bezier(0.42, 0, 0.58, 1)

自定义平滑贝塞尔曲线的方法

要得到更贴合需求的平滑贝塞尔曲线,需要手动调整cubic-bezier()的参数。通常可以通过在线贝塞尔曲线调试工具来可视化调整参数,观察曲线的变化趋势,再代入到CSS代码中使用。

比如我们需要一个先快速变化,再缓慢接近终点的平滑曲线,可以设置两个控制点的x坐标偏小,y坐标偏大,示例参数如下:

/* 自定义平滑贝塞尔曲线参数 */
.custom-bezier {
    transition-timing-function: cubic-bezier(0.18, 0.89, 0.32, 1.28);
}

实际动画案例演示

下面通过一个元素位移的动画案例,展示如何使用自定义的贝塞尔曲线实现平滑的动画效果:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS贝塞尔曲线动画示例</title>
    <style>
        .box {
            width: 100px;
            height: 100px;
            background-color: #4a90e2;
            border-radius: 8px;
            /* 初始位置 */
            transform: translateX(0);
            /* 设置过渡属性和贝塞尔曲线 */
            transition: transform 2s cubic-bezier(0.18, 0.89, 0.32, 1.28);
        }
        .box:hover {
            /* 鼠标悬停时移动到右侧300px位置 */
            transform: translateX(300px);
        }
    </style>
</head>
<body>
    <div class="box"></div>
    <p>鼠标悬停在蓝色方块上,查看平滑的过渡动画效果</p>
</body>
</html>

上面的代码中,当鼠标悬停在方块上时,方块会向右移动300px,整个移动过程使用自定义的贝塞尔曲线控制速率,不会出现生硬的匀速运动,视觉上更加平滑自然。

注意事项

  • 如果两个控制点的x坐标相同,可能会导致曲线出现垂直段,使得动画在同一时间点出现多个状态,造成动画卡顿
  • 当y值超出0到1的范围时,元素属性可能会暂时超过目标值,比如位移时先超过终点再回弹到终点位置,需要根据需求合理使用
  • 贝塞尔曲线主要用于控制动画的时间速率,不能直接用来绘制视觉上的曲线图形,如果需要绘制可见的曲线图形,需要结合SVG或者Canvas实现

CSS贝塞尔曲线cubic-bezieranimationtiming_function修改时间:2026-06-28 20:21:33

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。