每个响应式网站开发教程都建议使用display:none CSS属性来隐藏移动浏览器加载的内容,这样网站加载得更快。这是真的吗?display:none不加载图像,还是在移动浏览器上加载内容?有没有什么方法可以防止在移动浏览器上加载不必要的内容?
当前回答
为了防止获取资源,使用Web Components的<template>元素。
其他回答
我们说的是图像不能在手机上加载,对吧?那么如果你只是做一个@media (min-width: 400px){background-image:thing.jpg}
那么,它难道不会只寻找超过一定屏幕宽度的图像吗?
使用display:none with images的技巧是为它们分配一个id。这是不需要很多代码使其工作。下面是一个使用媒体查询和3个样式表的示例。一个用于手机,一个用于平板电脑,一个用于台式机。我有三张图片,手机,平板电脑和台式机的图片。在手机屏幕上只会显示手机的图像,平板电脑只会显示平板电脑的图像,桌面电脑则显示桌面电脑的图像。 下面是一个代码示例,使其工作:
源代码:
<div id="content">
<img id="phone" src="images/phone.png" />
<img id="tablet" src="images/tablet.png" />
<img id="desktop" src="images/desktop.png" />
</div>
不需要媒体查询的手机CSS。是img#手机让它工作:
img#phone {
display: block;
margin: 6em auto 0 auto;
width: 70%;
}
img#tablet {display: none;}
img#desktop {display: none;}
平板css:
@media only screen and (min-width: 641px) {
img#phone {display: none;}
img#tablet {
display: block;
margin: 6em auto 0 auto;
width: 70%;
}
}
和桌面css:
@media only screen and (min-width: 1141px) {
img#tablet {display: none;}
img#desktop {
display: block;
margin: 6em auto 0 auto;
width: 80%;
}
}
祝你好运,并让我知道它是如何为你工作的。
浏览器正变得越来越智能。现在你的浏览器(取决于版本)可能会跳过图像加载,如果它可以确定它是没有用的。
图像有一个显示:none样式,但它的大小可以由脚本读取。 Chrome v68.0不加载图像如果父隐藏。
你可以在那里查看:http://jsfiddle.net/tnk3j08s/
您也可以通过查看浏览器开发工具的“network”选项卡来检查它。
注意,如果浏览器是在一个小的CPU计算机上,不需要渲染图像(和布局页面)将使整个渲染操作更快,但我怀疑这在今天是否真的有意义。
如果你想阻止图像加载,你可以不添加IMG元素到你的文档(或设置IMG src属性为"data:"或"about:blank")。
如果是这样,有没有一种方法不加载不必要的内容在手机上 浏览器吗?
使用<img src="" srcset="">
http://www.webdesignerdepot.com/2015/08/the-state-of-responsive-images/
https://caniuse.com/#feat=srcset
HTML5 <picture>标签将帮助您根据屏幕宽度解析正确的图像来源
显然,在过去的5年里,浏览器的行为并没有太大的变化,许多人仍然会下载隐藏的图像,即使在它们上设置了display: none属性。
尽管有一个媒体查询的解决方案,它只能在图像被设置为CSS背景时才有用。
虽然我认为这个问题只有一个JS解决方案(延迟加载,图片填充等),但似乎有一个很好的纯HTML解决方案是HTML5的开箱即用。
这是<picture>标签。
MDN是这样描述的:
HTML <picture>元素是一个容器,用于为其中包含的特定<img>指定多个<source>元素。浏览器将根据页面的当前布局(图像将出现在框的约束)和它将显示在设备上(例如普通或hiDPI设备)选择最合适的源。
下面是如何使用它:
<picture>
<source srcset="mdn-logo-wide.png" media="(min-width: 600px)">
<img src="mdn-logo-narrow.png" alt="MDN">
</picture>
背后的逻辑
只有当所有媒体规则都不应用时,浏览器才会加载img标记的源代码。当浏览器不支持<picture>元素时,它将再次回退到显示img标记。
通常,您会将最小的图像作为<img>的源,这样就不会为较大的屏幕加载较重的图像。反之亦然,如果应用了媒体规则,则不会下载<img>的源文件,而是下载相应的<source>标记的url内容。
这里唯一的缺陷是,如果浏览器不支持该元素,它将只加载小图像。 另一方面,在2017年,我们应该以移动优先的方式思考和编码。
在有人太兴奋之前,这里是当前浏览器对<picture>的支持:
桌面浏览器
移动浏览器
关于浏览器支持的更多信息,您可以在can I use。
好的方面是html5please的句子是用一个回退。我个人打算采纳他们的建议。
关于标签的更多信息可以在W3C规范中找到。这里有一个免责声明,我觉得这很重要:
图片元素与看起来相似的视频和音频元素有些不同。虽然它们都包含源元素,但当元素嵌套在图片元素中时,源元素的src属性没有意义,而且资源选择算法是不同的。同样,图片元素本身也不显示任何东西;它只是为它所包含的img元素提供了一个上下文,使它能够从多个url中进行选择。
它说的是,它只帮助你在加载图像时提高性能,通过提供一些上下文。
你仍然可以使用一些CSS魔法来隐藏小设备上的图像:
<style>
picture { display: none; }
@media (min-width: 600px) {
picture {
display: block;
}
}
</style>
<picture>
<source srcset="the-real-image-source" media="(min-width: 600px)">
<img src="a-1x1-pixel-image-that-will-be-hidden-in-the-css" alt="MDN">
</picture>
因此浏览器不会显示实际的图像,只会下载1x1像素的图像(如果您多次使用它,它可以被缓存)。但是要注意,如果浏览器不支持<picture>标记,即使在桌面屏幕上也不会显示实际图像(因此您肯定需要在那里进行填充备份)。
推荐文章
- 如何使一个DIV不包装?
- 使用jQuery以像素为整数填充或边距值
- CSS div元素-如何显示水平滚动条只?
- 如何指定一个元素后包装在css flexbox?
- 使用“!”的含义是什么?重要的”?
- 用CSS截断长字符串:可行吗?
- 重要的样式
- 灰色的图像与CSS?
- CSS中*和*|*的区别是什么?
- 资源解释为样式表,但以MIME类型text/html传输(似乎与web服务器无关)
- CSS高度:100% vs高度:auto
- 带引导的固定宽度按钮
- 是类型="文本/css"必须在<链接>标签?
- 在没有jQuery的情况下,防止悬停父div的子元素时onmouseout
- 英语字母表中哪个字母占像素最多?