768px
时加载srcset
中的任何图像。我尝试了下面的代码,但是 sizes 属性似乎不能按预期工作。 以下代码会在所有屏幕尺寸上加载
1024.jpg
:<img
src="default.jpg"
srcset="img/1024.jpg 1024w"
sizes="(min-width: 768px) 768px, 100vw"
/>
或者说,如果元素使用了empty srcset,但它仅仅是“提示”浏览器应该加载哪张图片,那么可以使用
768px
时加载srcset
中的任何图像。1024.jpg
:<img
src="default.jpg"
srcset="img/1024.jpg 1024w"
sizes="(min-width: 768px) 768px, 100vw"
/>
或者说,如果元素使用了empty srcset,但它仅仅是“提示”浏览器应该加载哪张图片,那么可以使用
另一个答案并不能完全令人满意。通常情况下,使用 srcset
可以让浏览器选择图像候选项。虽然你可以假设在某些设备上会选择哪个图像,但是你没有任何控制权。每个 srcset
中的图像都可以被选择。
因此,如果你想要控制使用或不使用的内容,你需要使用 picture
元素。
以下是3个示例。如果视口宽度大于等于768px,则下载 'img/1024.jpg' 图像,否则会选择 data 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>
的情况下使用。
它可能不是用于此目的,但它非常有效。附加一个1x1像素的图像,它将在sizes == 0vw时使用。在这种情况下,对于所有小于768px的内容,都将使用此图像:
<img
src="default.jpg"
srcset="img/null.jpg 1w
img/1024.jpg 1024w"
sizes="(max-width: 768px) 0vw, 100vw"
/>
我知道这不是回答 OP “不加载任何图片”的问题,但相对接近,你可以在所有其他情况下引用相同的1x1像素图像,这意味着该图像将不会被下载。
但有一个注意点: 在以下情况下,即使我们指定为100px,我认为浏览器可能会在512px及以下时就使用1x1像素图像。
<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
标签可用于选择图像元素的内容来源,但无法控制元素的存在或可见性。
srcset
和sizes
标签旨在增强响应式CSS。它们的值应遵循CSS中定义的任何断点。
srcset
是浏览器可以从中选择具有相应宽度的可用图像列表。
因此,它将为了向后兼容,其中一个URL在
img
元素的src
属性中指定。在新用户代理中,当srcset
属性使用w
描述符时,将忽略src
属性。
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 时,图像将占据整个宽度。"
我猜您不希望在视口小于 768px 时使用 1024px 的图像。
要在视口小于 768px 时提示使用小图像,请改用 max-width: 768px
:
<img
src="default.jpg"
srcset="default.jpg 768w, img/1024.jpg 1024w"
sizes="(max-width: 768px) 768px, 100vw"
/>