Html 为什么 flexbox 会拉伸我的图像而不是保持纵横比?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/37609642/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Why does flexbox stretch my image rather than retaining aspect ratio?
提问by sjbuysse
Flexbox has this behaviour where it stretches images to their natural height. In other words, if I have a flexbox container with a child image, and I resize the width of that image, the height doesn't resize at all and the image gets stretched.
Flexbox 具有这种行为,它将图像拉伸到它们的自然高度。换句话说,如果我有一个带有子图像的 flexbox 容器,并且我调整了该图像的宽度,则高度根本不会调整大小并且图像会被拉伸。
div {
display: flex;
flex-wrap: wrap;
}
img{
width: 50%
}
<div>
<img src="https://loremflickr.com/400/300" >
<h4>Appify</h4>
<p> some text </p>
</div>
What causes this?
这是什么原因造成的?
I added This CodePento demonstrate what I mean.
我添加了This CodePen来演示我的意思。
回答by pradeep1991singh
It is stretching because align-self
default value is stretch
.
Set align-self
to center
.
它正在拉伸,因为align-self
默认值为stretch
。设置align-self
为center
。
align-self: center;
See documentation here: align-self
请参阅此处的文档: align-self
回答by Dorian
The key attribute is align-self: center
:
关键属性是align-self: center
:
.container {
display: flex;
flex-direction: column;
}
img {
max-width: 100%;
}
img.align-self {
align-self: center;
}
<div class="container">
<p>Without align-self:</p>
<img src="http://i.imgur.com/NFBYJ3hs.jpg" />
<p>With align-self:</p>
<img class="align-self" src="http://i.imgur.com/NFBYJ3hs.jpg" />
</div>
回答by isapir
I faced the same issue with a Foundation menu. align-self: center;
didn't work for me.
我在 Foundation 菜单中遇到了同样的问题。 align-self: center;
对我不起作用。
My solution was to wrap the image with a <div style="display: inline-table;">...</div>
我的解决方案是用一个 <div style="display: inline-table;">...</div>
回答by Akash
Adding margin
to align images:
添加margin
对齐图像:
Since we wanted the image
to be left-aligned
, we added:
由于我们希望image
成为left-aligned
,我们添加了:
img {
margin-right: auto;
}
Similarly for image
to be right-aligned
, we can add margin-right: auto;
. The snippet shows a demo for both types of alignment.
同样,对于image
要right-aligned
,我们可以添加margin-right: auto;
。该代码段显示了两种对齐方式的演示。
Good Luck...
祝你好运...
div {
display:flex;
flex-direction:column;
border: 2px black solid;
}
h1 {
text-align: center;
}
hr {
border: 1px black solid;
width: 100%
}
img.one {
margin-right: auto;
}
img.two {
margin-left: auto;
}
<div>
<h1>Flex Box</h1>
<hr />
<img src="https://via.placeholder.com/80x80" class="one"
/>
<img src="https://via.placeholder.com/80x80" class="two"
/>
<hr />
</div>
回答by mohamed ali
It is stretching because align-self default value is stretch. there is two solution for this case : 1. set img align-self : center OR 2. set parent align-items : center
它是拉伸,因为 align-self 默认值是拉伸。这种情况有两种解决方案:1. 设置 img align-self : center 或 2. set parent align-items : center
img { align-self: center }
OR
或者
.parent { align-items: center }