为什么Flexbox中的对象不适合工作?
我有几列,我使用柔性等宽。 每个包含img
标签,我希望这些图像展示object-fit: cover
大小。
.container { display: flex; flex-direction: row; width: 100%; } .test { flex: 1; margin-right: 1rem; overflow: hidden; height: 400px; } img { object-fit: cover; }
<div class="container"> <div class="test"><img src="http://placehold.it/1920x1080"></div> <div class="test"><img src="http://placehold.it/1920x1080"></div> <div class="test"><img src="http://placehold.it/1920x1080"></div> <div class="test"><img src="http://placehold.it/1920x1080"></div> </div>
图像没有resize,在这个演示中可以看到。 这是为什么?
从规格 :
object-fit
属性指定了replace元素的内容应如何适应由其使用的高度和宽度确定的框。
关键术语是: 适用于由其使用的高度和宽度确定的框
图像被replace,而不是它的容器。 而使用其高度和宽度确定的盒子与图像本身相关,而不是其容器。
所以,废弃容器,使图像本身的弹性项目。
.container { display: flex; flex-direction: row; width: 100%; } img { object-fit: cover; flex: 1; margin-right: 1rem; overflow: hidden; height: 400px; }
<div class="container"> <img src="http://placehold.it/1920x1080"> <img src="http://placehold.it/1920x1080"> <img src="http://placehold.it/1920x1080"> <img src="http://placehold.it/1920x1080"> </div>
问题在于, object-fit
指定了图像在img
内部的绘制方式,但是您没有指定这些元素的大小,仅指定了.test
父级的大小。
所以Michael_B的答案的另一种select是使图像具有与flex项目相同的大小:
img { height: 100%; width: 100%; object-fit: cover; }
.container { display: flex; flex-direction: row; width: 100%; } .test { flex: 1; margin-right: 1rem; overflow: hidden; height: 400px; } img { height: 100%; width: 100%; object-fit: cover; }
<div class="container"> <div class="test"><img src="http://placehold.it/1920x1080"></div> <div class="test"><img src="http://placehold.it/1920x1080"></div> <div class="test"><img src="http://placehold.it/1920x1080"></div> <div class="test"><img src="http://placehold.it/1920x1080"></div> </div>