css - 基于容器高度的项目
问题描述
我有一张漂亮的小桌子,里面有 4 个包含图像的元素。
图片通常由用户上传,因此我无法精确控制图片大小。
我要做的是创建一个 2 x 2 布局,调整大小以适应用户屏幕,并且布局中的每个框都具有 16:9 的纵横比。
这对调整窗口宽度非常有效,但如果用户调整高度,元素会溢出,而不是调整高度以适应用户屏幕。
您可以在此处查看示例,如果您调整屏幕,水平宽度行为就是我正在寻找的,但垂直调整会在较小的窗口尺寸上隐藏图像。 https://codepen.io/anon/pen/zaXEOL
.outer-grid {
display: flex;
flex-direction: row;
flex-wrap: wrap;
max-height: 70vh;
max-width: 70vw;
overflow: hidden;
}
.holder {
border: 1px solid red;
max-width: 46%;
max-height: 46%;
margin: 1%;
display: flex;
align-items: center;
justify-content: center;
height: 0;
padding-top: 26%;
width: 100%;
position: relative;
}
img {
object-fit: contain;
max-height: 100%;
top: 0;
max-width: 100%;
width: 100%;
height: 100%
<div class="outer-grid">
<div class="holder">
<img src="http://fillmurray.com/200/300"/>
</div>
<div class="holder">
<img src="http://fillmurray.com/300/300"/>
</div>
<div class="holder">
<img src="http://fillmurray.com/300/200"/>
</div>
<div class="holder">
<img src="http://fillmurray.com/250/300"/>
</div>
</div>
我使用的 css 相当简单
.outer-grid {
display: grid;
grid-template-columns: repeat(2,1fr);
grid-template-rows: repeat(2,1fr);
grid-gap: 1rem;
max-height: 70vh;
max-width: 70vw;
overflow: hidden;
}
.holder {
border: 1px solid red;
max-width: 100%;
max-height: 100%;
display: flex;
align-items: center;
justify-content: center;
height: 0;
padding-top: 56%;
position: relative;
}
img {
position: absolute;
display: block;
top: 0;
max-height: 100%;
max-width: 100%;
}
解决方案
首先,请注意您的布局在 Firefox 和 Edge中根本不起作用。这是因为您使用的百分比填充技巧在应用于网格容器时,不适用于所有浏览器。这是一个详细的解释:Percentage padding / margin on grid item ignored in Firefox
其次,百分比填充根据图像宽度重新调整图像大小。这就是全部技巧。
从规范:
§ 8.4 填充属性:
padding-top
,padding-right
,padding-bottom
,padding-left
, 和padding
<percentage>
百分比是根据生成框的包含块的宽度
padding-top
计算的,即使对于和 也是 如此padding-bottom
。
图像可以在水平轴上重新调整大小,因为百分比填充与宽度相关联。它们无法在垂直轴上重新调整大小,因为百分比填充与高度无关。
推荐阅读
- python - 如何一次增加字符串字符?
- reactjs - 反应钩子中的prevstate
- sql - 没有匹配的主键?- SQL Server 管理工作室
- selenium-webdriver - 在并行运行中使用 driver.quit()
- python - 如何使用 Python 3 在 Web 浏览器中打开网站?
- javascript - 为什么这个简单的计数器会删除附加的 div?
- javascript - 以编程方式提交表单 React
- firebase - 每次热重新加载后都会加载多个图像?
- obd-ii - 使用 OBD II 获得准确的汽车油耗
- python - 计算每个数据框行中表情符号的数量