scale动画需配合transition才能产生缓动效果,transition必须写在默认状态且仅过渡transform更安全;transform-origin影响缩放锚点但无需加入transition;需兼顾:hover/:focus/:focus-visible以保障可访问性;非整数scale可能导致模糊,可加will-change或translateZ(0)优化;移动端应设touch-action: manipulation避免与双击缩放冲突。
scale动画必须配transition才能动
直接写
只会瞬间变形,没有动画。CSS动画靠的是属性值变化 + 过渡机制,
本身不触发重排,但要让它“动起来”,得明确告诉浏览器:这个变化需要缓动。
常见错误是只加了
却漏掉
,或者把
写在 hover 状态里(导致首次悬停无动画)。
必须写在默认状态(非:hover / :active)上,例如
只过渡
比过渡
更安全,避免意外触发动画(比如同时动了
或
)
时间单位用
(如
)比
更易读,且兼容性无差别
scale的基准点默认是中心,想改就得用transform-origin
元素放大时默认绕自身中心缩放,但按钮图标可能需要从左上角展开,卡片悬停可能想从顶部向下铺开——这时候不调
,动画会偏移出预期位置。
注意:
的值影响视觉锚点,但它本身不是动画属性,不需要加进
;只要它和
一起变化,浏览器就会平滑过渡原点+缩放两个变换。
立即学习
“
前端免费学习笔记(深入)
”;
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
常用值:
、
(默认)、
,也支持像素或百分比,如
如果元素有
,缩放时圆角会同步缩放,无需额外处理
慎用
配合大 scale 值,可能让元素直接移出视口(尤其父容器
时)
hover触发缩放时,focus和键盘用户容易被忽略
纯
写法对鼠标用户友好,但键盘 Tab 进入、屏幕阅读器用户完全感知不到变化,甚至可能因缩放导致焦点框错位或内容被裁切。
这不是“加个:focus就行”的问题,而是交互反馈需一致。缩放本质是状态可视化,状态不止有 hover。
同时写
,确保三类用户都能看到响应
避免在
里用过大 scale(如
),可能撑破容器或遮挡相邻元素
如果缩放后文字变模糊,大概率是用了非整数倍缩放(如
)+ 元素没开启硬件加速,可加
或
强制 GPU 渲染
移动端双击缩放和scale动画会打架
iOS Safari 默认双击放大页面,如果元素本身又带
动画,用户双击后可能看到异常拉伸或卡顿。这不是 bug,是 viewport 缩放层和 CSS 变换层叠加的结果。
根本解法不是禁用双击缩放(损害可访问性),而是让动画和缩放互不干扰。
给缩放元素加
,能减少误触,同时不影响双击缩放全局行为
避免在
或全屏容器上设
,优先作用于具体组件级元素
真要兼容老 iOS(maxTouchPoints 后降级为 opacity + translateY 模拟缩放感,避开 transform 层冲突
实际缩放动画最麻烦的从来不是写几行 CSS,而是缩放后元素尺寸变了,但它的文档流占位没变——父容器不会自动重排,兄弟元素也不会避让。这点一旦没提前想好,后面加
或
补救,反而更容易引发新问题。
transform: scale(1.5)transformtransformtransitiontransitiontransition.btn { transition: transform 0.2s ease; }transformallcoloropacitys0.25smstransform-origintransform-origintransitiontransformtop leftcenterbottom right20px 30pxborder-radiustransform-origin: 0 0overflow: hidden:hover:hover, :focus, :focus-visible:focusscale(1.8)scale(1.3)will-change: transformtransform: translateZ(0)scaletouch-action: manipulationbodytransform: scale()marginposition: absolute