当前位置: 首页 > 知识库问答 >
问题:

在加载图像之前,保持img元素的纵横比?

虞安康
2023-03-14

我有一个img元素,看起来像:

<img src="header-900x600.jpg" class="header-image" alt="" width="900" height="600" style="background-color: rgb(4, 96, 247);">

使用css:

.header-image {
    display: block;
    max-width: 100%;
    max-height: 400px;
    width: auto;
    height: auto;
}

现在,这意味着在保持纵横比的同时,将图像大小调整为最大高度:400px,或最大宽度:100%。虽然加载时图像会折叠到:

加载图像后,它向下推送文本:

我认为,由于图像的宽度和高度是内联的,浏览器应该已经知道它的纵横比了,图像就不会跳转了?我有什么遗漏吗?

我想要的只是图像元素,在图像源加载之前,与图像的长宽比相同。使布局不跳来跳去!

共有3个答案

申屠森
2023-03-14

您将宽度和高度设置为auto。这意味着大小将设置为当前加载的图像,而不是与最大高度或最大宽度有关。

请注意,这可能是CSS的重复:为给定高度保留元素的纵横比

需要明确的是,当您将宽度和高度设置为“自动”时,您将覆盖您设置的其他设置,并告诉浏览器检测图像的大小。图像在下载时无法下载,因此其行为与您描述的一样。

在检测到图像加载完成后,可以通过编程使用javascript设置这些属性。

马晓博
2023-03-14

浏览器在加载图像之前对图像一无所知。您不能设置不存在的元素的参数。相反,只需将图像添加到具有全宽度的容器中,如下所示:

<div class="container">
   <img src="header-900x600.jpg" class="header-image">
</div>

.container {
    display: block;
    width: 100%;
}    

.header-image {
    display: block;
    max-width: 100%;
    max-height: 400px;
}

塔里克在他的回答中所说的也是正确的,如果你宣布自动高度和宽度,那么最大高度和最大宽度什么也不做。

缪远航
2023-03-14

所有主要浏览器现在都能够在其当前版本中做到这一点。

当您在img标签上的超文本标记语言中指定宽度高度属性并在CSS中设置宽度(百分比或固定,也max-wide有效)和高度自动(反之亦然)浏览器计算出正确的大小和长宽比,直到加载图像。加载图像时,它使用加载图像的尺寸,因此这些不应与您设置的属性不同,否则您将再次获得布局偏移。

然而,请注意,无效图像或无法加载的图像可能与尚未加载的图像不同。不能保证考虑img的宽度和高度属性。(如果您想测试行为,这一点尤其重要,您不能简单地删除src属性的值,这不会得到与尚未加载的图像相同的结果。)

另请注意,如以下链接所述,响应图像(picture元素和img元素的srcset属性)仍然存在问题。

这里有一篇很棒的文章,提供了更详细的信息和浏览器支持:https://www.smashingmagazine.com/2020/03/setting-height-width-images-important-again/

注意:只需为图像提供宽度和高度,就可以更好地实现新灯塔CLS(累积布局偏移)测量,请参阅https://web.dev/cls/

 类似资料:
  • 在我的网站上,用户可以上传图片。它们可以是各种大小的,但我想让它们装在相同高度的盒子里,这样它们就可以挨着放在一起,形成一个网格。图像应该在框中居中,保持其纵横比。我可以在CSS中这样做吗?我一直在尝试flexbox的东西,但我不能让它工作。

  • 问题内容: 我有一个48x48的div,里面有一个img元素,我想将它放到div中而不丢失任何部分,同时保持比例,是否可以使用html和css实现? 问题答案: 如果您在编写CSS时不知道图像的尺寸,则需要一些JavaScript来防止裁剪。 HTML和JavaScript 的CSS 如果您使用JavaScript库,则可能要利用它。

  • 更新:原来这是由于Chrome中的一个bug造成的。我仍在寻找解决办法。 我试图通过在元素上设置来在Chrome中使用延迟加载。我还使用以下方法来调整图像: 不幸的是,在图像实际加载之前显示的图像占位符在Chrome中有一个方形纵横比。它不遵循元素的/属性中设置的纵横比。这在以下情况下发生: 仅在Chrome中(不在Firefox 75中,Firefox 75也支持延迟加载)。 有没有一种解决方案

  • 编辑:我应该提到的是,我知道纵横比公式:原始高度/原始宽度x新宽度=新高度,但是,我不知道如何正确地使用它,以我的优势。

  • 我有一个宽度为1900和高度为1000的图像,我使用的是和但我希望div高度与图像更改的高度相同。 示例: 在1366个屏幕中,图像将缩小尺寸以适应屏幕大小(宽度100%),因此,图像高度也将减小,因此我想获得该高度。 我试图做的是: HTML: CSS: 问题:vw是用滚动条宽度计算的,我想要没有,我可以使用宽度%而不是vw吗? 我接受别人的想法来做这件事,但我更喜欢使用CSS。

  • 我使用引导创建旋转木马,我有大的图像,所以当屏幕小于图像时,比例不会保持不变。 我怎么能改变呢? 这是我的代码: http://jsfiddle.net/DRQkQ/ 我需要图像适合100%的宽度,但保持其高度为500px(我认为是500px),这应该意味着在较小的屏幕上,我们看不到图像的最左边和最右边。 我尝试将图像包含在div中并添加 但这不管用 非常感谢。