CSS 保持宽高比但从不溢出视口的响应框
CSS responsive box that maintains aspect ratio but NEVER overflows the viewport
我找到的每个示例,包括据称正确的答案:
保持 div 与 CSS 的纵横比 -
Maintain the aspect ratio of a div with CSS
问题总是在某些时候,框剪辑(溢出)通常在垂直轴上。
我正在尝试创建一个响应式框,它在两个方向上都保持纵横比并且从不在任何一个方向上剪辑(溢出)(即:纵横比框从不大于视口的 90%)。我试过同时使用高度和宽度作为计算的基础,但两者都不起作用,而且高度似乎更符合我的目的(图像的高度永远不会改变,但宽度将取决于图像的纵横比。
是否可以有一个框保持其纵横比并且永远不会溢出视口?
.demoWrapper {
padding: 1vh;
background: white;
box-sizing: border-box;
resize: both;
border: 1px dashed;
overflow: auto;
max-width: 100%;
height: 80vh;
}
div {
width: 50%;
padding-bottom: 35%;
background: gold; /** <-- For the demo **/
}
<div class="demoWrapper">
<div></div>
</div>
为了确保框保持其纵横比但不溢出视口(已指定宽度不超过 90vw,高度不超过 90vh)CSS 可以计算出最合适的:
.box {
display: inline-block;
--ratio: calc( 3 / 2);
/* put the aspect ratio width to height you want */
--h: min(calc(90vw / var(--ratio)), 90vh);
height: var(--h);
width: calc(var(--h) * var(--ratio));
background-color: red;
}
<div class="box"></div>
这假设框的纵横比已知。
如果不是,可以在第一次加载和设置 CSS 变量时计算,但这需要 Javascript。从问题中不清楚宽高比是否已知。
如果宽高比是由图片设置的,那么可能还有其他方法。
我找到的每个示例,包括据称正确的答案:
保持 div 与 CSS 的纵横比 - Maintain the aspect ratio of a div with CSS
问题总是在某些时候,框剪辑(溢出)通常在垂直轴上。
我正在尝试创建一个响应式框,它在两个方向上都保持纵横比并且从不在任何一个方向上剪辑(溢出)(即:纵横比框从不大于视口的 90%)。我试过同时使用高度和宽度作为计算的基础,但两者都不起作用,而且高度似乎更符合我的目的(图像的高度永远不会改变,但宽度将取决于图像的纵横比。
是否可以有一个框保持其纵横比并且永远不会溢出视口?
.demoWrapper {
padding: 1vh;
background: white;
box-sizing: border-box;
resize: both;
border: 1px dashed;
overflow: auto;
max-width: 100%;
height: 80vh;
}
div {
width: 50%;
padding-bottom: 35%;
background: gold; /** <-- For the demo **/
}
<div class="demoWrapper">
<div></div>
</div>
为了确保框保持其纵横比但不溢出视口(已指定宽度不超过 90vw,高度不超过 90vh)CSS 可以计算出最合适的:
.box {
display: inline-block;
--ratio: calc( 3 / 2);
/* put the aspect ratio width to height you want */
--h: min(calc(90vw / var(--ratio)), 90vh);
height: var(--h);
width: calc(var(--h) * var(--ratio));
background-color: red;
}
<div class="box"></div>
这假设框的纵横比已知。
如果不是,可以在第一次加载和设置 CSS 变量时计算,但这需要 Javascript。从问题中不清楚宽高比是否已知。
如果宽高比是由图片设置的,那么可能还有其他方法。