要实现卡片悬浮时的弹性回弹效果,需使用css的transition配合transform和cubic-bezier缓动函数。1. 常规的ease-out或linear无法实现弹性效果,因为它们的动画曲线限制在0到1之间,不会产生“超调”;而弹性效果需要动画值短暂超出目标再回弹。2. 选择合适的cubic-bezier值是关键:p1y或p2y超出0-1范围可实现超调,如轻微弹性用cubic-bezier(0.175, 0.885, 0.32, 1.275),中等弹性用cubic-bezier(0.34, 1.56, 0.64, 1),强弹性用cubic-bezier(0.68, -0.55, 0.265, 1.55)。3. 除transform外,box-shadow、filter和background-color等属性也可结合弹性缓动以增强视觉表现,但应优先用于transform和box-shadow以保持空间感协调,并配合will-change优化性能,最终通过反复调试找到最佳视觉平衡。

制作卡片悬浮时的弹性回弹效果,在CSS中主要依赖于
transition
transform
cubic-bezier
要实现卡片的悬浮弹性回弹效果,你需要定义一个卡片的基础样式,并在其
:hover
transform
transition
/* 基础卡片样式 */
.card {
width: 280px;
height: 180px;
background-color: #ffffff;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
display: flex;
justify-content: center;
align-items: center;
font-size: 20px;
color: #333;
cursor: pointer;
/* 核心:定义过渡属性,使用自定义的cubic-bezier模拟弹性 */
/* 这里的cubic-bezier值 (0.34, 1.56, 0.64, 1) 能够产生明显的弹性效果 */
transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),
box-shadow 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
will-change: transform, box-shadow; /* 优化性能 */
}
/* 悬浮时的效果 */
.card:hover {
/* 向上平移并稍微放大 */
transform: translateY(-10px) scale(1.03);
/* 增加阴影深度 */
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
}
/* 也可以为回弹(非hover状态)设置不同的缓动函数,使其更自然 */
/* 例如,鼠标移出时可以更平滑地返回 */
.card:not(:hover) {
transition: transform 0.3s ease-out, box-shadow 0.3s ease-out;
}ease-out
linear
在我看来,这是一个关于物理直觉和数学曲线的有趣问题。我们日常生活中看到的“弹簧”效果,比如一个弹簧被拉伸后放开,它不会立刻停在原位,而是会先越过原位一点点,然后反方向再越过一点点,如此往复,直到最终稳定下来。这是一种典型的“阻尼振动”过程。
立即学习“前端免费学习笔记(深入)”;
而CSS中常见的
ease-out
linear
linear
ease-out
它们的数学曲线在Y轴上始终保持在0到1之间(代表动画的进度从0%到100%)。要模拟弹性的“超调”效果,动画的进度需要在某个时刻暂时超过100%(或低于0%),然后再回到100%(或0%)。这正是
cubic-bezier
cubic-bezier
选择合适的
cubic-bezier
cubic-bezier(P1x, P1y, P2x, P2y)
要创建“弹性”效果,关键在于让
P1y
P2y
P1y
P2y
P1y
P2y
我个人通常会使用一些在线工具,比如
cubic-bezier.com
这里提供几个我常用,且能产生不同强度弹性效果的
cubic-bezier
轻微弹性(Subtle Bounce):
cubic-bezier(0.175, 0.885, 0.32, 1.275)
中等弹性(Medium Bounce):
cubic-bezier(0.34, 1.56, 0.64, 1)
强弹性/剧烈回弹(Strong/Exaggerated Bounce):
cubic-bezier(0.68, -0.55, 0.265, 1.55)
记住,这些值只是起点。实际应用中,你还需要根据动画的时长(
transition-duration
transform
虽然
transform
scale
translate
rotate
box-shadow
box-shadow
.card {
/* ...其他样式... */
transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),
box-shadow 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.card:hover {
/* ...transform 效果... */
box-shadow: 0 12px 25px rgba(0, 0, 0, 0.3); /* 阴影更深 */
}filter
filter
brightness
contrast
saturate
.card {
/* ...其他样式... */
transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),
filter 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.card:hover {
/* ...transform 效果... */
filter: brightness(1.1); /* 亮度增加 */
}background-color
transform
box-shadow
.card {
/* ...其他样式... */
background-color: #ffffff;
transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),
background-color 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.card:hover {
/* ...transform 效果... */
background-color: #f0f0f0; /* 背景色变浅 */
}在实际开发中,我通常会建议优先将弹性效果应用到
transform
box-shadow
will-change
以上就是CSS怎样制作卡片悬浮弹性回弹?spring动画函数应用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号