CSS中图片旋转超出父元素解决办法

下面的两种解决办法都会导致图片缩小,可以给图片进行初始化的宽高设置

javascript 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        html,body {
            margin: 0;
            padding: 0;
        }
        #box {
            box-sizing: border-box;
            width: 100%;
            height: 240px;
            background: pink;
        }
        #image {
            transform: rotate(0);
            object-fit: contain;
        }
        #btn {
            margin-top: 100px;
        }
    </style>
</head>
<body>
    <div id="box">
        <img id="image" src="https://www.runoob.com/images/pulpit.jpg" alt="">
        <!-- <img id="image" src="https://pics0.baidu.com/feed/c2cec3fdfc039245259830d9727ca5c77c1e2521.jpeg@f_auto?token=b910f4287521294b9469788c77a3ac93&s=A12326BEC5137FDECCBC8DC1030060BB" alt=""> -->
    </div>
    <button id="btn">旋转</button>
</body>
<script>
    window.onload = () => {
        let btn = document.getElementById('btn')
        let image = document.getElementById('image')
        let box = document.getElementById('box')
        let childRawWidth = image.offsetWidth // 原始的图片宽
        let childRawHeight = image.offsetHeight  // 原始的图片高
        let deg = 0 
        btn.onclick = function() {
            if (deg > 360) {
                deg = 0
            } else {
                deg += 90
            }
            // 方法一:使用 scale -- 父元素的高度不固定
            // let childWidth = image.offsetWidth
            // let childHeight = image.offsetHeight
            // let scalePix = 1
            // if (childWidth > childHeight) {
            //     scalePix = childHeight / childWidth
            // } else {
            //     scalePix = childWidth / childHeight
            // }
            // image.style.transform = `rotate(${deg}deg) scale(${scalePix}, 1)`
            // 方法二:将图片重新设置宽高 -- 父元素的高度固定
            let parentWidth = box.offsetWidth
            let parentHeight = box.offsetHeight
            if (childRawWidth > childRawHeight) {
                image.style.width = childRawHeight + 'px'
            }
            image.style.transform = `rotate(${deg}deg)`
        }
    }
</script>
</html>

原始图片:

超出的效果图:

解决之后的效果图:

相关推荐
丨白色风车丨6 分钟前
LangChain Agent 从入门到实战:创建与调用参数全解析
前端·python·langchain
Jmyd01238 小时前
Web端3D营销展厅技术实现路径:从素材上云到线索回流的数据链路
前端·3d·性能优化·三维数字化
砚凝霜8 小时前
【软考信息安全】第二十二章 Web服务器安全分析与增强——Apache与IIS
服务器·前端·安全
u01110267510 小时前
JPG、PNG、WebP 怎么选?按透明度、体积和使用场景做判断
前端·javascript·vue.js·图像处理·ai作画
jerrywus11 小时前
让 AI 写完代码后交一份报告:我改造了 answer-me-with-html
前端·claude·cursor
派小心.11 小时前
小程序分享链路中来源参数的传递校验
大数据·前端·数据库·人工智能·小程序·数据分析
hhb_61811 小时前
一键生成数据看板,ECharts实战演示
前端·javascript·echarts
Java后端的Ai之路11 小时前
08_React组件API
前端·react.js·前端框架
小马不起床12 小时前
零基础玩转 FastAPI_09:前端基础工程构建
前端·状态模式·fastapi
风骏时光牛马13 小时前
用户管理模块接口开发
前端