active:scale-95无反应是因缺少transition-transform、cursor-pointer及transform-origin控制;它实际生效但无动画,需在默认状态声明过渡,ios还需role="button"和touch-manipulation确保触发。

直接加 active:scale-95 没反应,不是 Tailwind 有 bug,而是你漏了三样东西:过渡声明、触发条件、缩放中心控制。
为什么 active:scale-95 看起来像没生效
它其实生效了,只是“啪”一下缩、松手立刻弹回,人眼根本抓不住。因为 :active 伪类只定义按下时的终态值,不负责怎么变过去——动画必须由元素自身声明。
-
transition-transform必须写在按钮的默认 class 里,不能只写在active:后面 -
duration-100是经验阈值:短于 80ms 感知不到,长于 150ms 显得卡顿 - 别用
transition-all:如果按钮同时有hover:bg-blue-600,颜色变化也会被拖慢,点击反馈变钝
iOS / 移动端点不动 active: 的真实原因
iOS Safari 默认对非表单控件或无交互意图的元素禁用 :active,哪怕你用了 div + role="button",也得手动“激活”它。
- 必须加
cursor-pointer(等价于cursor: pointer),这是最轻量的触发方式 - 如果是
div模拟按钮,要补role="button" tabindex="0",否则 iOS 根本不进入 active 状态 - 加
touch-manipulation(对应touch-action: manipulation),避免系统等待 300ms 判断是否双击 - 检查父容器有没有
pointer-events-none或overflow: hidden,它们会截断事件冒泡
让缩放反馈更自然的关键配置
默认从中心缩放没问题,但按钮、图标这类小元素常需要“向内压感”,这时缩放中心偏移反而更真实;而真机上跳变或卡住,往往和硬件加速策略或 active 状态未及时清除有关。
- 缩放中心可调:
origin-center(默认)、origin-top-left,或自定义如origin-[50%_75%] - 慎用
hover:scale-105+active:scale-95同时存在:快速连点可能因 hover 残留导致 scale 值冲突 - 推荐组合:
transition-transform duration-100 ease-in+active:scale-95,而 hover 只动颜色(hover:bg-blue-600),避开 transform 冲突 - 缩放值选
scale-95而非scale-98:后者在小按钮或高 DPI 屏幕上基本感知不到,前者是 GPU 渲染稳定、热区收缩可控、焦点框位置不变的平衡点
真正难的不是写对类名,而是让 active 在各种设备上都准时触发、缩放不抖、松手不粘滞——这些细节藏在 cursor、role、timing function 和父容器的 pointer-events 里,而不是 class 列表里。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











