如何使用HTML IMG标签保持宽高比


132

我正在使用HTML的img标签在我们的应用程序中显示照片。我已经将其height和width属性都设置为64。我需要将任何图像分辨率(例如256x256、1024x768、500x400、205x246等)显示为64x64。但是通过将img标签的height和width属性设置为64,就不会保持纵横比,因此图像看起来会失真。

供您参考,我的确切代码是:

<img src="Runtime Path to photo" border="1" height="64" width="64">


Chridam,我问这个问题已经很久了。我已经离开了负责该问题的公司。我无法尝试建议的解决方案,因为我正在努力处理其他优先事项,以达到当时的期限。我无法获得进一步进展的机会。
sunil kumar 2015年

Answers:


134

不要设置高度和宽度。使用其中之一,将保持正确的纵横比。

.widthSet {
    max-width: 64px;
}

.heightSet {
    max-height: 64px;
}
<img src="http://placehold.it/200x250" />

<img src="http://placehold.it/200x250" width="64" />

<img src="http://placehold.it/200x250" height="64" />

<img src="http://placehold.it/200x250" class="widthSet" />

<img src="http://placehold.it/200x250" class="heightSet" />


14
...但是如果您要固定高度和宽度怎么办?
fatuhoku

7
这对于动态应用程序没有任何意义。宽度或高度是否为64px尚不清楚,因为它取决于图像的比例。为什么这是反对的回应?
科尼格斯堡'18

@Mär这个问题是关于固定宽度和/或高度的图像。响应能力不是问题的必要条件。
萝卜

3
尺寸是固定的,长宽比不是固定的,因为问题特别是关于任何分辨率的任何图像。包括小于64x64的分辨率。
科尼格斯堡'18

66

这是样本之一

div{
   width: 200px;
   height:200px;
   border:solid
 }

img{
    width: 100%;
    height: 100%;
    object-fit: contain;
    }
<div>
  <img src="https://upload.wikimedia.org/wikipedia/meta/0/08/Wikipedia-logo-v2_1x.png">
</div>


8
只是对要使用此解决方案的人的注释:浏览器对对象适配的支持不是很好。IE或Edge根本不支持它。资料来源:caniuse.com/#feat=object-fit
肖恩·道森

2
现在在Edge 16+上受支持,请参见表:w3schools.com/css/css3_object-fit.asp
Eddy R.

44

widthheight的图像设置为auto,但同时限制max-widthmax-height

img {
    max-width:64px;
    max-height:64px;
    width:auto;
    height:auto;
}

小提琴

如果要在64x64px“帧”中显示任意大小的图像,则可以使用内联块包装器并对其进行定位,如本小提琴所示


3
缩放比例不会超出原始尺寸,而只会低于原始尺寸。
科尼斯堡2016年

40
<img src="Runtime Path to photo"
     style="border: 1px solid #000; max-width:64px; max-height:64px;">

2
这是正确的解决方案,因为它继续独立于图像的方向。3rror404的解决方案要求您知道图像的宽度是否大于其高度,反之亦然。
devios1 2013年

2
还建立widthheightauto
Mahmoodvcs 2015年

正确解决方案,同时限制高度和宽度。
Pavan Kumar

1
图像将受到此限制,但不会缩放到超出其原始大小。尽管从职位空缺还不能确定OP想要哪两个。
科尼格斯堡'18

14

列出的所有方法均未将图像缩放到适合框的最大尺寸,同时又保留了所需的宽高比。

这不能通过IMG标签来完成(至少不是没有JavaScript的话),但是可以按以下步骤完成:

 <div style="background:center no-repeat url(...);background-size:contain;width:...;height:..."></div>

2
是。使用style="background: url('_'); background-size: cover width:_px height:_px"<img>标签。
Ujjwal Singh 2014年

3
谢谢,@ UjjwalSingh。事实上,我们需要的cover不是contain为了最大限度的图像尺寸为最大可能。contain导致“ letterboxing”。
Ortwin Gentz


3

将图片包装为div尺寸为64x64 的图片,并将其设置width: inherit为:

<div style="width: 64px; height: 64px;">
    <img src="Runtime path" style="width: inherit" />
</div>


1

试试这个:

<img src="Runtime Path to photo" border="1" height="64" width="64" object-fit="cover">

添加object-fit =“ cover”将强制图像占用空间而不会丢失宽高比。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.