图像断点 srcset - 如何处理中间视口尺寸中使用的较大图像?

image breakpoint srcset - what to do with larger images used in middle viewport sizes?

我一直致力于新的响应式网站设计,我有一个包含图像网格的图库,当浏览器视口为 768 像素或以上时,该网格跨越 4 列宽(因此每个图像大约占视口的 25% ). 767px 或更低的任何内容都只有 1 列宽(在较低的分辨率下使其成为全宽)。

每张图片我都有三个来源。 220 像素、260 像素和 420 像素。

从上面可以看出,尺寸不符合视口越小图像越小的正常惯例,所以我一直在研究和尝试各种选择。

根据建议,我一直在隐身模式下使用 Google Chrome 并且还在 Internet Explorer 中进行私密浏览,浏览器视口在加载页面之前开始变小,等等...确保我所做的任何更改得到更新。

我得到的当前代码是我最接近使其工作的代码,它是在堆栈溢出时对某人的查询(类似于我的)的回答之后。然而,在尝试实现它时,我似乎无法让浏览器加载正确的图像,它总是加载更大的 420px 宽图像。

我的代码目前是这样的:

<img sizes="(min-width: 767px) 420px, 100vm"
    srcset="images/thumbs/image_420.jpg 420w,    
            images/thumbs/image_260.jpg 260w,    
            images/thumbs/image_220.jpg 220w"    
       src="images/thumbs/image_220.jpg"
       alt="example image"
/>

我在讨论这个问题时提出了第二个问题。最好将我的场景中的默认 img src 设置为 260px 图像吗?因为如果 srcset 不被理解并且只有中等大小的视口 (460-767px) 会受到影响,这将涵盖桌面和移动浏览器。还是最好将默认图像设置为最小尺寸?

如有任何建议,我们将不胜感激。

-- 编辑--

只是一个快速的更新,我以为我昨天已经从逻辑上解决了这个问题,但它没有用,所以我不确定我是否仍然理解计算的整个概念。我最近的编辑看起来像这样:

<img sizes="(min-width: 460px) 420px, (min-width: 768px) 220px, 100vm"
    srcset="images/thumbs/image_420.jpg 420w,    
            images/thumbs/image_260.jpg 260w,    
            images/thumbs/image_220.jpg 220w"    
       src="images/thumbs/image_260.jpg"
       alt="example image"
/>

所以在我看来,我认为我列出的尺寸部分说明...如果视口至少为 460 像素,则使用 420 像素的图像,否则如果视口至少为 768 像素,则使用 260 像素的图像。那么最后的 100vm 意味着否则使用在全视口宽度下最好的那个。 我还将默认文件修改为 260px 文件,因为如果无法识别某些内容,这适合大多数视口大小。

但是,上述编辑仍然只加载 420px 图像。

如有任何建议,我们将不胜感激。哪怕只是为了纠正我的逻辑!

sizes 从左到右求值。所以顺序很重要。如果视口为 1000px,则第一个媒体条件 (min-width: 460px) 将匹配,因此选择大小 420px,并且根本不评估 sizes 属性的其余部分。

另外,单位应该是vw,而不是vm

所以应该是:

<img sizes="(min-width: 768px) 220px, (min-width: 460px) 420px, 100vw"
     srcset="images/thumbs/image_420.jpg 420w,    
             images/thumbs/image_260.jpg 260w,    
             images/thumbs/image_220.jpg 220w"    
        src="images/thumbs/image_260.jpg"
        alt="example image"
/>

至于你的第二个查询,从技术上讲你可以选择你喜欢的任何图像(即使是没有在 srcset 中列出的图像),但你的推理对我来说很有意义。我唯一推荐的是将您选择的 src 图像 首先 放在 srcset 中,因为较旧的 WebKit 仅具有部分 x-only srcset 实现将在不理解描述符时选择第一项。