我想知道为什么将img
flex 项目包装在 div
s 中会导致它们正确缩放,但仅img
项目却不能。
如果你查看这个JSFiddle,你会发现将图像包装在div中确实按照StackOverflow上其他帖子的建议工作,但它似乎不起作用。而且align-self
并没有像这里建议的那样改变任何东西。我试图align-items
,以便它会覆盖默认stretch
但这不起作用。我还尝试清除min-height
和min-width
值,因为这些值默认设置为 auto
.这个答案证明了使用 div
包装器的合理性,但它没有解释为什么它适用于 div
flexbox 项目而不是直接用于img
项目。
以下是一些 HTML:
.stack {
display:flex;
max-width:600px;
align-items:center; /* this does not cause image tags to resize */
}
.stack img {
min-height:0;
min-width:0;
height:auto;
align-self:center;
}
.test img {
width:100%;
}
<div class="stack">
<div class="test">
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
<!--Wrapping in a div works-->
</div>
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
</div>
为什么似乎是用div包裹图像的唯一解决方案?我不明白为什么正确缩放图像的唯一方法是通过div
包装器。
使用 CSS flexbox,您需要直接从包装父元素寻址子元素。
在您的示例中,为了防止重复<div><img><div>
结构,您只需删除<div class="test"></div>
.
如果您需要将类(如示例中所示)应用于图像,则可以。
.stack {
display: flex;
max-width: 600px;
align-items: center;
border:1px solid gold;
}
.stack img {
min-height: 0;
min-width: 0;
height: auto;
width:200px;
align-self: center;
}
.test img {
width: 100%;
}
.test:nth-of-type(1) {
border: 2px solid #000;
}
<body>
<div class="stack">
<img class="test" src="http://picsum.photos/200/200" />
<img class="test" src="http://picsum.photos/200/200" />
<img class="test" src="http://picsum.photos/200/200" />
<img class="test" src="http://picsum.photos/200/200" />
<img class="test" src="http://picsum.photos/200/200" />
<img class="test" src="http://picsum.photos/200/200" />
</div>
</body>
调整浏览器大小以查看其工作...
这能满足您的需求吗?
标记:
<body>
<div class="stack">
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
</div>
</body>
.CSS:
.stack {
display:flex;
}
.stack img {
align-self:center;
width: 100px;
}
https://jsfiddle.net/zbac1dxe/6/
图像正在被拉伸,因为对齐自我的默认值是"拉伸"。要保持纵横比,请将对齐方式设置为"居中"。我已经更新了您的代码片段来演示这一点。
请记住,您有 5 张宽度为 200 像素的图像,容器宽度定义为 600 像素,因此以 200x200 正确显示图像会导致容器显示水平滚动条。
请参阅这个 StackOverflow 问题:为什么 flexbox 会拉伸我的图像?
.stack {
display:flex;
max-width:600px;
}
.stack img {
align-self: center;
}
<div class="stack">
<div class="test">
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
<!--Wrapping in a div works-->
</div>
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
<img src="https://placehold.it/200x200/E8117F/FFFFFF"/>
</div>