【问题标题】:How to show higher resolution image in mobile and lower resolution image in desktop?如何在移动设备中显示更高分辨率的图像,在桌面显示更低分辨率的图像?
【发布时间】:2021-10-17 04:56:20
【问题描述】:

我使用了一些典型的引导网格来生成一排图像,其中 4 个图像在桌面,1 个图像在移动设备中。像这样:

<div class="row">
    <div class="col-md-3 col-sm-12">
        <img src="image1_src">
    </div>
    <div class="col-md-3 col-sm-12">
        <img src="image2_src">
    </div>
    <div class="col-md-3 col-sm-12">
        <img src="image3_src">
    </div>
    <div class="col-md-3 col-sm-12">
        <img src="image4_src">
    </div>
</div>

在浏览器中渲染的图像大小约为250px*250px,但这个分辨率对于移动设备来说是不够的,因为图像在移动设备中几乎是全屏的。我决定使用分辨率约为 500px*500px 的图像,并且图像质量在移动版和桌面版中都非常好,但它让我遇到了 google pageSpeed 警告说:

图像元素没有明确的widthheight

所以我决定使用&lt;picture&gt; 标签来使用两个不同版本的图像。桌面小一号,手机大一号!

<div class="row">
    <div class="col-md-3 col-sm-12">
        <picture>
            <source media="(min-width:701px)" srcset="250px_image1_src">
            <source media="(max-width:700px)" srcset="500px_image1_src">
            <img src="500px_image1_src">
        </picture>
    </div>
    <div class="col-md-3 col-sm-12">
        <picture>
            <source media="(min-width:701px)" srcset="250px_image2_src">
            <source media="(max-width:700px)" srcset="500px_image2_src">
            <img src="500px_image2_src">
        </picture>
    </div>
    <div class="col-md-3 col-sm-12">
        <picture>
            <source media="(min-width:701px)" srcset="250px_image3_src">
            <source media="(max-width:700px)" srcset="500px_image3_src">
            <img src="500px_image3_src">
        </picture>
    </div>
    <div class="col-md-3 col-sm-12">
        <picture>
            <source media="(min-width:701px)" srcset="250px_image4_src">
            <source media="(max-width:700px)" srcset="500px_image4_src">
            <img src="500px_image4_src">
        </picture>
    </div>
</div>

现在我面临一个新问题,即浏览器会在桌面模式下自动选择更高分辨率的图像并忽略另一个。

【问题讨论】:

  • 分辨率是指图像的清晰度或大小??
  • @KunalTanwar 实际上是他们的展位,但主要问题是清晰度。分辨率较低的图像在移动视图中的清晰度不够。
  • 使用 SVG 而不是 PNG!

标签: html css image twitter-bootstrap bootstrap-4


【解决方案1】:

这里有两个独立的问题:

首先:Google 抱怨明确的宽度和高度。如果您为浏览器提供宽度/高度值,它会提供布局中所需的空间,即使图像本身尚未加载也是如此。如果没有宽度/高度值,则在加载图像之前提供的空间将为零,从而导致布局偏移。

第二:您希望提供不同分辨率的图像,因为现代智能手机的屏幕分辨率比普通桌面显示器高得多。通过使用图片标签,您告诉浏览器“这些是我拥有的图像,请确定最适合当前布局和分辨率的图像”。图片标签中的最后一个 img-tag 是后备选项,如果上述媒体查询都不适合,浏览器将使用该选项。这就是它拍摄这张照片的原因。

另见https://www.w3schools.com/tags/tag_picture.asp

实现不同分辨率的另一种方法是使用 srcset。您可以在此页面上找到非常详尽的解释:https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images

【讨论】:

  • 感谢您的关注。你的“第二个”是我在上一个研究步骤中得到的,我在我的代码中使用它,如你所见。但关于你的'第一个:不幸的是,使用宽度和高度只是解决谷歌错误但实际上这不是最佳方式,因为我必须使用更高分辨率(500 * 500)的图像,但它在桌面上以更小的尺寸呈现,我正在浪费资源的桌面查看器。因为在他们的视野中 500*500 和 250*250 的图像之间没有明显的区别。
  • 对不起,我解释得不够充分。我再试一次:您的移动观看者需要您的图片的高分辨率版本。您的桌面查看器没有。所以你提供了两个不同的图像。现在由浏览器决定它使用什么图像。浏览器知道 a) 查看者设备的屏幕分辨率和 b) 图像在当前视口中占据的实际空间。你没有。所以由浏览器决定。您可以在我的答案的第二个链接中找到关于如何提供不同图像版本的很好的解释:)
  • 不要太担心“缺少宽度/高度”的问题 - 在响应式布局中,您通常无法知道图像的当前宽度/高度。所以你可能不得不忍受谷歌“错误”(这不是一个真正的错误)和布局转变......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 2012-10-12
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
相关资源
最近更新 更多