css - 保持纵横比但从不溢出视口的 CSS 响应框
问题描述
我发现的每个示例都包括所谓的正确答案:
用 CSS 保持div 的纵横比 - 用 CSS 保持 div 的纵横比
问题总是在某些时候盒子剪辑(溢出)通常在垂直轴上。
我正在尝试创建一个响应框,以保持两个方向的纵横比,并且从不剪辑(溢出)在任一方向(即:纵横比框永远不会大于视口的 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。从长宽比是否已知的问题中不清楚。
如果长宽比是由图像设置的,那么可能还有其他方法。
推荐阅读
- django - 更改模型中的 Django 迁移错误(“重复键名”)
- angularjs - Angularjs:如何插入批量数据
- facebook - 我如何使用 facebook api 获取印象级别日志数据
- java - java创建一个类的方法调用另一个类的方法
- assembly - 我可以动态链接具有重复函数名称的库吗?
- ios - 播放现场 TuneIn Radio URL iOS Swift
- php - 我在 html 表单的输入字段中设置了自动完成功能。它在 Firefox 和 safari 中完美运行,但在 chrome 中无法运行
- php - 如何从 WooCommerce 订单中获取选定数量的产品?
- jquery-select2 - Select2 "allowClear" 在某些特定情况下不会清除选择框
- java - 如何在 Android 应用程序中检查无线电流媒体链接是否脱机/死机