2021-03-25 06:55:26
CSS 伪类 :hover 与 transition 结合可实现平滑的交互动画效果,通过控制属性过渡时间与缓动函数,无需 JavaScript 即可提升用户体验。
一、核心机制与基本用法:hover 是 CSS 伪类,当鼠标悬停在元素上时触发样式变化;transition 属性则定义这些变化的过渡效果(如持续时间、缓动函数)。二者结合可使颜色、尺寸、位置等属性的变化呈现动画效果。
效果:鼠标悬停时背景色从蓝色(#007bff)平滑过渡到深蓝色(#0056b3),持续 0.3 秒,使用默认缓动函数 ease。
transition 不仅限于颜色,还可应用于以下可插值属性:
transform(缩放/旋转):
.card { transition: transform 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);}.card:hover { transform: scale(1.1) rotate(5deg);}效果:悬停时元素放大 1.1 倍并旋转 5 度,使用自定义贝塞尔曲线(cubic-bezier)控制动画节奏。
opacity(透明度):
.overlay { opacity: 0; transition: opacity 0.2s linear;}.overlay:hover { opacity: 1;}效果:悬停时透明度从 0 渐变到 1,持续 0.2 秒,使用线性缓动(linear)。
box-shadow(阴影):
.box { box-shadow: 0 2px 5px rgba(0,0,0,0.2); transition: box-shadow 0.3s ease-in-out;}.box:hover { box-shadow: 0 8px 20px rgba(0,0,0,0.3);}效果:悬停时阴影扩散范围增大,模拟“浮起”效果。
多属性同步过渡:
.card { transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);}.card:hover { transform: scale(1.1); opacity: 1; box-shadow: 0 8px 20px rgba(0,0,0,0.3);}效果:悬停时缩放、透明度、阴影同时变化,使用 all 简化代码。
避免重排(Reflow):
频繁修改 height、width、margin、padding 等属性会触发浏览器重排,导致性能下降。
推荐:优先使用 transform(缩放/平移/旋转)和 opacity,它们由 GPU 加速,动画更流畅。
过渡时间设置:
一般建议 0.1s~0.4s 之间,过长(如 1s 以上)会使用户感觉迟钝,过短(如 0.05s)则可能因变化过快而失去动画意义。
缓动函数选择:
默认 ease(慢快慢)适合大多数场景;
linear(匀速)适用于机械感动画;
cubic-bezier() 可自定义复杂曲线(如弹性效果)。
移动端适配:
移动设备无“悬停”概念,需确保功能在不支持 :hover 的设备上仍可用。例如:
触摸设备上可通过点击触发样式变化;
避免仅依赖悬停显示关键信息(如导航菜单)。
合理使用 :hover 与 transition 的组合,能以轻量级方式实现直观自然的交互效果。关键点包括: