涟漪反馈
Ripple
点下去的地方荡开一圈水波,告诉用户这一下收到了。
- 又叫:
- 水波纹
- 点击涟漪
- 波纹扩散
- ripple effect
- material ripple
- touch ripple
- 展厅
- 交互反馈
- 形态
- 固定舞台
- 播放
- 重播
- 关键词
- 需要 JS / 渐变 / 合成层动画 / 键盘可用 / 可以直接用
参数工作台
复制给 AI
随参数实时更新做点击涟漪反馈(ripple):在按钮 pointerdown 时按落点坐标生成一个圆形波纹,直径覆盖整块按钮,用 transform: scale(0) → scale(1) 扩散、不透明度 30% 渐隐到 0,时长 450ms、ease-out,按钮 overflow: hidden 裁出边界,动画结束后把波纹节点移除。键盘 Enter/Space 触发时从中心扩散;prefers-reduced-motion 下改成短促的底色变化。
material ripple feedback, circle spawned at the pointerdown coordinates, scaled from 0 to 1 with opacity fading from 30% to 0 over 450ms ease-out, button has overflow: hidden, remove the ripple node on animationend, centered ripple for Enter/Space, short background-color change under prefers-reduced-motion
https://publieople.github.io/design-museum/entry/ripple/?stage=light
链接带着你调好的参数
什么时候用
- 按钮、列表项、开关这类要明确「点到了」的控件
- 触屏上没有 hover,需要让人看出这一下点在哪、有没有生效
- 整套界面想要统一的点击反馈语言(Material 风格的基础件)
适用场景:按钮 / 列表 / 卡片
推荐取值
- 扩散时长
- 300–600ms
- 起始透明度
- 0.25–0.4
- 直径
- 不小于元素对角线,从落点算起
- 缓动
- ease-out
- 裁剪
- overflow: hidden
别搞混
和「按压反馈」的区别
按压反馈让整个控件缩放或变暗,是「整体」的状态;涟漪从落点扩散,能看出点在哪一下,两者经常叠在一起用。
容易混的去看「按压反馈」
和「进度条」的区别
涟漪只是「按下收到了」,不表示进度;别让它一直扩下去或循环,否则用户会以为在加载。
容易踩的坑
- 波纹用 transform: scale() + opacity 扩散,别去改 width/height,否则每一帧都要重排
- 每个波纹节点动画结束就要移除,手指长按会连着生成,不管就会堆出上百个节点
- 要按落点扩散就得用 pointerdown 的坐标减去元素盒子的位置,写死从中心扩散会丢掉「点在哪」的信息
- 控件要 overflow: hidden 才裁得出边界,否则波纹会溢出到外面
- 键盘 Enter/Space 触发时没有坐标,退化成从中心扩散,别让它什么都不发生
- prefers-reduced-motion 下改成一个短促的底色变化,功能不变
无障碍降级
prefers-reduced-motion 下不放涟漪,改成 80–150ms 的底色或描边变化,按下反馈依然存在。
关键词
- ripple effect
- Material ripple
- pointerdown
- radial-gradient
- transform: scale()
- overflow: hidden
- animation-play-state
- ::after