在网页开发中,经常遇到用户上传的图片方向不对,或者设计稿要求某个图标、照片呈现横向展示效果。使用CSS让图片旋转90度是最直接的办法,核心是利用transform属性里的rotate方法改变元素的渲染角度,而不破坏原始文档流中的占位空间。

一、使用transform: rotate()实现静态旋转
transform是CSS3提供的变换属性,rotate()是其函数之一,接收角度参数,单位可以是deg(度)、grad、rad、turn。对于图片旋转90度,只需写transform: rotate(90deg),正值代表顺时针,负值代表逆时针。该变换只影响视觉呈现,元素在文档中占据的宽高盒模型不会自动交换,这点后面会详细说明。
下面是一段最基础的代码示例,将页面中的jpg图片顺时针转九十度:
/* 让类名为rotate-img的图片顺时针旋转90度 */
.rotate-img {
transform: rotate(90deg);
}
对应的HTML结构非常简单,只要给img标签加上这个类即可:
<img src="https://ipipp.com/demo.jpg" class="rotate-img" alt="旋转示例" />
这种写法兼容所有现代浏览器,但在一些老旧版本Webkit内核里,可能需要添加-webkit-前缀。不过目前主流环境已不需要,若项目要支持旧手机,可以补一条-webkit-transform: rotate(90deg)。静态旋转适合截图展示、修正手机竖拍照片等不需要动画的场景,优点是代码少、性能高。
二、通过transition实现平滑旋转动画
如果希望图片在交互时(比如点击按钮)缓缓转九十度,而不是瞬间变化,就要结合transition属性。transition负责在属性值改变时产生过渡效果,我们监听某个状态类切换,让transform从0deg变到90deg,视觉上就是转动过程。
以下代码展示了如何用复选框控制图片旋转,并带有零点三秒的平滑过渡:
.smooth-img {
transition: transform 0.3s ease;
}
#toggle:checked ~ .smooth-img {
transform: rotate(90deg);
}
<input type="checkbox" id="toggle" /> <label for="toggle">点击旋转</label> <img src="https://ipipp.com/demo.jpg" class="smooth-img" alt="平滑旋转" />
这种方案用户体验更好,常用于相册查看、电子书翻页等。需要注意的是,transition只监听变化瞬间,若初始没有transform,浏览器也能从无变换过渡到rotate,但显式写transform: rotate(0deg)会更稳妥。另外,过渡时间不宜过长,否则在低端设备可能出现掉帧。
三、利用animation做持续或一次性旋转
当需求是图片加载后自动转九十度并停住,或者不断旋转,可以用@keyframes配合animation。与transition不同,animation基于关键帧,能控制更精细的时间线和循环次数。例如只转一次到九十度,设animation-fill-mode为forwards保留终态。
示例代码如下,页面打开后图片在一秒内转到九十度然后停止:
@keyframes turn90 {
from { transform: rotate(0deg); }
to { transform: rotate(90deg); }
}
.anim-img {
animation: turn90 1s linear forwards;
}
<img src="https://ipipp.com/demo.jpg" class="anim-img" alt="动画旋转" />
如果写成animation: turn90 1s linear infinite,图片就会不停转圈。使用animation的好处是无需JS触发,纯CSS完成。缺点是关键帧写法比单句transform繁琐,且forward模式占用合成层,数量多时留意内存。
四、旋转后的布局与适配问题
很多初学者发现图片转了九十度,但旁边的文字还是按原矩形排列,出现大片空白。这是因为transform不变更布局盒,img仍是原来宽高的占位。若图片是200x100,转后视觉为100x200,但父容器还留着200x100位置。
解决办法有两种:一是用包装div,对父级设旋转后尺寸;二是用width和height互换并margin偏移。简单示例如下:
.wrap {
width: 100px;
height: 200px;
}
.wrap img {
transform: rotate(90deg);
transform-origin: center;
}
此外,在移动端Retina屏上旋转可能导致边缘模糊,可加will-change: transform提示浏览器优化。还有打印样式中,部分浏览器对transform支持弱,重要图纸建议用canvas重绘。掌握这些细节,才能让css图片旋转90度真正稳定可用。
css旋转transformimage_rotation修改时间:2026-07-31 16:36:29