用transform: rotateY(180deg)可实现图片水平镜像翻转,需配合perspective和transform-style: preserve-3d生效;rotate(180deg)仅为平面旋转,非镜像效果。
直接给 <img> 元素加 transform: rotateY(180deg) 就能镜像翻转,但要注意它只是视觉变换,不改变图片原始方向或 DOM 结构。
常见错误是只写 rotate(180deg) —— 这是平面旋转,看起来像倒扣,不是左右镜像;必须用 rotateY(绕 Y 轴)才能实现真正“照镜子”效果。
transform-style: preserve-3d 和容器设置 perspective 才能让 3D 变换生效(尤其在旧版 Safari 中)overflow: hidden,翻转后可能被裁切,建议给容器加 transform: translateZ(0) 触发硬件加速并修复渲染边界.flipped { transform: rotateY(180deg); }
这是最常用交互场景,关键在于过渡动画要加在原始元素上,而不是 hover 伪类里。
错误写法:img:hover { transform: rotateY(180deg); transition: transform 0.3s; } —— transition 放在 hover 里会导致首次悬停无动画。
立即学习“前端免费学习笔记(深入)”;
transition,hover 时只改 transformimg { transition: transform 0.3s ease; }<br>img:hover { transform: rotateY(180deg); }
max-width: 100%),翻转后可能因盒模型计算偏差出现轻微抖动,可加 backface-visibility: hidden 消除cursor: pointer,否则部分 iOS Safari 不触发 hover用 JS 切换 class 是最稳妥方式,避免直接操作 style.transform 引发内联样式优先级冲突。
典型错误:多次调用 element.style.transform = 'rotateY(180deg)' 后再设回 'none',结果发现没还原——因为 'none' 并非重置 transform 的合法值。
element.style.transform = ''
element.classList.toggle('flipped'),CSS 里定义好对应状态document.querySelector('img') 硬编码,改用事件委托或 data 属性标识:<img data-flip="true">
IE10+ 支持 transform: rotateY,但需要 -ms- 前缀;Android 4.4 及更早版本只支持 2D 变换,rotateY 会完全失效。
如果必须兼容这些环境,可用 scaleX(-1) 作为降级方案:它不是严格意义上的 3D 翻转,但视觉效果一致,且所有浏览器都支持。
scaleX(-1) 会让文字也镜像,若图片含文字(如 logo),需对内部文字单独加 scaleX(-1) 补偿offsetWidth 等属性,容易卡顿