ChatGPT解决这个技术问题 Extra ChatGPT

如何使用 HTML IMG 标签保持纵横比

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

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

<img src="Runtime Path to photo" border="1" height="64" width="64">
在 2022 年,您可能想要这个答案:stackoverflow.com/a/66618563/8806907 纵横比受除 ie 之外的所有内容支持:developer.mozilla.org/en-US/docs/Web/CSS/…

T
Turnip

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

.widthSet { 最大宽度:64px; } .heightSet { 最大高度:64px; }

另一个为您提供更大灵活性的选项是使用 object-fit。这允许为 img 设置固定尺寸,而图像本身可以在定义的区域内以多种不同的方式呈现。

img { 宽度:64px;高度:64px;边框:1px 实心粉红色; } .fill { 对象拟合:填充; } .contain { 对象适配:包含; } .cover { 对象拟合:覆盖; } .scale-down { 对象拟合:按比例缩小; }


...但是如果你想同时修复高度和宽度怎么办?
这对动态应用程序没有意义。不知道宽度或高度是否为 64 像素,因为它取决于图像的比例。为什么这是赞成的回应?
@Mär 这个问题是关于固定宽度和/或高度的图像。响应能力不是问题的要求。
大小是固定的,纵横比不是固定的,因为问题专门针对任何分辨率的任何图像。包括小于 64x64 的分辨率。
A
AKHIL P

这是示例之一

div{ 宽度:200px;高度:200px;边框:实心}img{宽度:100%;高度:100%;适合对象:包含; }


只是给想要使用此解决方案的人的注意事项:浏览器不太支持对象匹配。 IE 或 Edge 根本不支持它。来源:caniuse.com/#feat=object-fit
现在在 Edge 16+ 上受支持,请参见表:w3schools.com/css/css3_object-fit.asp
I
Ilya Streltsyn

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

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

Fiddle

如果您想在 64x64 像素的“帧”中显示任意大小的图像,您可以使用内联块包装器并为其定位,例如 in this fiddle


不会超出原始尺寸,仅低于原始尺寸。
这在我将父级更改为“align-items:center”之后起作用。 “align-items:stretch”的默认值优先于“max-height”。
G
Glenn Teitelbaum
<img src="Runtime Path to photo"
     style="border: 1px solid #000; max-width:64px; max-height:64px;">

这是正确的解决方案,因为它继续独立于图像的方向。 3rror404 的解决方案要求您知道图像是否宽于高,反之亦然。
还将 widthheight 设置为 auto
限制高度和宽度的正确解决方案。
图像将受此适当限制,但不会超出其原始大小。尽管从开场白中无法确定 OP 想要哪一个。
A
Ankit Kumar Verma

在 html 元素 img 的 css 中使用 object-fit: contain

前任:

img {
    ...
    object-fit: contain
    ...
}

A
Anonymous Coward

列出的所有方法都没有将图像缩放到适合盒子的最大尺寸,同时保持所需的纵横比。

这不能用 IMG 标记来完成(至少在没有一点 JavaScript 的情况下不能),但可以按如下方式完成:

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

是的。使用 style="background: url('_'); background-size: cover width:_px height:_px" 作为 <img> 标记。
谢谢,@UjjwalSingh。实际上,我们需要 cover 而不是 contain 才能将图像尺寸最大化。 contain 导致“信箱”。
A
AlexElin

有一个新的 CSS 属性 aspect-ratio。它为盒子设置了一个首选的纵横比,它将用于计算自动尺寸和其他一些布局功能。

img {
  width: 100%;
  aspect-ratio: 16/9;
}

所有普及的浏览器都支持它。
MDN 链接:https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio
并且 https://web.dev/aspect-ratio/ 包含使用此属性的好例子


这就是我来寻找的。祝福现代 CSS!
这应该是新接受的答案
K
Konstantin Dinev

将图像包装在尺寸为 64x64 的 div 中,并将 width: inherit 设置为图像:

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

N
Nick friesen

尝试这个:

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

添加 object-fit="cover" 将强制图像占用空间而不会丢失纵横比。


S
Sahan De Silva

为什么不使用单独的 CSS 文件来维护要显示的图像的高度和宽度?这样,您就可以提供必要的宽度和高度。

例如:

       image {
       width: 64px;
       height: 64px;
       }

K
Kevin Taing

我的网站显示了许多照片(具有各种宽高比),单击其中一张以模式打开它。为了让它适合模态而不裁剪、滚动或扭曲,我在我的 img 标签上使用了以下类

.img {
  max-height: 100%;
  max-width: 100%;
  object-fit: scale-down;
}

J
Juliano

您需要一个 div 来包装您的图像以获得一致的纵横比。

您可以使用 padding-bottom 技巧来强制 div 遵守纵横比和绝对定位的图像来填充空间。

图像也会响应,占用所有可用的水平空间。

.img-frame{ 宽度:100%;底部填充:100%;背景:灰色;溢出:隐藏;位置:相对; } .img-frame-4by3{ padding-bottom: 75%; } .img-frame-16by9{ padding-bottom: 56.25%; } .img-frame-5by1{ padding-bottom: 20%; } .img-frame img{ 位置:绝对;左:0;顶部:0;宽度:100%;高度:100%;适合对象:封面; }

4:3


16:9


5:1


F
F. Müller

使用CSS:

.img {
    display:table-cell;
    max-width:...px;
    max-height:...px;
    width:100%;
}

欢迎来到堆栈溢出!我建议您阅读 How to answer a question 以提高帮助提出问题的用户的可能性。
S
Stokely

在他发布的大多数情况下,张贴者显示的尺寸受高度限制 >>>(256x256、1024x768、500x400、205x246 等)但适合 64 像素的最大高度像素尺寸,这是大多数风景“照片”的典型特征。所以我的猜测是他想要一个高度始终为 64 像素的图像。为此,请执行以下操作:

<img id="photo1" style="height:64px;width:auto;" src="photo.jpg" height="64" />

该解决方案保证图像的高度全部为最大 64 像素,并允许根据每个图像的纵横比扩展或缩小宽度。在 img height 属性中将 height 设置为 64 会在图像下载时在浏览器的 Rendertree 布局中保留一个空间,因此内容不会转移等待图像下载。此外,新的 HTML5 标准并不总是支持宽度和高度属性。它们只是尺寸“提示”,而不是图像的最终尺寸。如果您在样式表中重置或更改图像高度和宽度,则图像属性中的实际值将重置为您的 CSS 值或图像原生默认尺寸。将 CSS height 设置为“64px”并将 width 设置为“auto”会强制宽度以原生图像宽度(不是图像属性宽度)开始,然后使用 CSS 样式计算新的纵横比作为高度。这会给你一个新的宽度。所以height和width“img”属性在这里真的不需要,只是强制浏览器进行额外的计算。


k
kennarddh

您可以设置 aspect ratio

img { 宽度:64px;纵横比:1/1; }