我无法理解如何避免srcset
在屏幕上加载任何图像 < 768px
。
我已经尝试了下面的代码,但 sizes 属性似乎并没有像你想象的那样。以下负载适用1024.jpg
于所有屏幕尺寸:
<img
src="default.jpg"
srcset="img/1024.jpg 1024w"
sizes="(min-width: 768px) 768px, 100vw"
/>
或者图片元素,如果它支持一个空的 srcset但它只“提示”浏览器应该加载哪个图像。
另一个答案并不令人满意。通常,srcset
您可以让浏览器选择图像候选者。虽然您可以假设哪个图像是在某些设备上拍摄的。你没有任何控制权。srcset
可以拍摄中的每张图像。
所以如果你想控制,使用什么或不使用什么,你需要使用picture
元素。
这里有3个例子。如果视口为 768 像素或更宽,则下载“img/1024.jpg”图像,否则选择数据 uri 或损坏的图像img
。
<picture>
<!--[if IE 9]><video style="display: none;"><![endif]-->
<source srcset="img/1024.jpg" media="(min-width: 768px)">
<!--[if IE 9]></video><![endif]-->
<img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Image">
</picture>
<picture>
<!--[if IE 9]><video style="display: none;"><![endif]-->
<source srcset="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" media="(max-width: 768px)">
<!--[if IE 9]></video><![endif]-->
<img src="img/1024.jpg" alt="Image">
</picture>
<!-- you can also write (but this makes it invalid) -->
<picture>
<!--[if IE 9]><video style="display: none;"><![endif]-->
<source srcset="img/1024.jpg" media="(min-width: 768px)">
<!--[if IE 9]></video><![endif]-->
<img alt="Image">
</picture>
虽然第一个和第二个代码示例是绝对有效的。目前有一些讨论通过简单地省略srcset
(参见代码示例 2)来允许这样做。在此处查看此讨论:https ://github.com/ResponsiveImagesCG/picture-element/issues/243
有一个非常简单的解决方案,无需<picture>
. 它可能不打算以这种方式使用,但效果很好。
附加一个 1x1px 的图像,它会在 size == 0vw 时使用。在这种情况下,这对于 768 像素以下的所有内容都是正确的:
<img
src="default.jpg"
srcset="img/null.jpg 1w
img/1024.jpg 1024w"
sizes="(max-width: 768px) 0vw, 100vw"
/>
我知道这并没有回答 OP 的“加载 NO 图像”问题,但它相对接近,您可以在所有其他情况下引用相同的 1x1 px 图像,这意味着它不会在那里下载。
一个警告: 在以下情况下,我相信浏览器可能会决定使用 512px 及以下的 1x1px 图像,即使我们指定 100px
<img
src="default.jpg"
srcset="img/null.jpg 1w
img/1024.jpg 1024w"
sizes="(max-width: 100px) 0vw, 100vw"
/>
这是因为浏览器在这种情况下采用最接近所需大小的值 1 比 1024 更接近 511...虽然不确定 编辑:通过附加 200w 图像也可以很容易地解决这种情况, 在任何情况下你都可能会这样做
简单地说,你不能。
删除/隐藏图像元素必须在 CSS中通过媒体查询或 Javascript 完成。
srcset
和标签对于选择图像元素的内容源很有用sizes
,但它不能控制元素的存在或可见性。
和标签旨在增强响应式 CSS srcset
。sizes
它们的值应该遵循 CSS 中定义的任何断点。
srcset
是可用图像的列表,浏览器可以选择它们各自的宽度。
根据最新的规范,它只会在填充时从该列表中选择:
img
为了向后兼容,在元素的src
属性中指定了 URL 之一。在新的用户代理中,当属性使用描述符 时,该src
属性将被忽略。srcset
w
因此,它认为1024.jpg
是唯一的选择而忽略default.jpg
.
将默认图像添加到srcset
(使用正确的w
描述符 - 这里我假设 default.jpg 为 768px 宽):
<img
src="default.jpg"
srcset="default.jpg 768w, img/1024.jpg 1024w"
sizes="(min-width: 768px) 768px, 100vw"
/>
sizes
当给定的媒体查询为真时,告诉浏览器图像的宽度。这有助于浏览器计算从哪个图像中挑选srcset
。
目前,sizes="(min-width: 768px) 768px, 100vw"
正在告诉浏览器:
“如果视口大于768px,图像将是 768px 宽,否则当视口小于 768px 时,图像将是全宽。”
我假设您不想在视口小于 768 像素时使用 1024 像素的图像。
要在视口小于768像素时提示小图像,请max-width: 768px
改用:
<img
src="default.jpg"
srcset="default.jpg 768w, img/1024.jpg 1024w"
sizes="(max-width: 768px) 768px, 100vw"
/>