如何使用HTML5图像元素处理响应式图像?
固定宽度、像素完美的网站设计早已不复存在。在当今宽屏显示器、互联网电视、各种尺寸的平板电脑和智能手机的世界中,我们的设计需要处理一切可能的情况,从 随着这种多分辨率景观的出现,需要拉伸或缩小图像以满足这些不同的要求。这可以理解为下面的问题。如果矢量图形中发生偏移,则大多数具有固定像素的图像的宽度不会改变。 那我们该怎么办呢? 作为一般规则,您可以在任何响应式网站上找到以下 CSS 样式: 此代码使用 这解决了问题的一个方面,并允许在许多不同的情况下显示相同的图像。然而,这不允许我们为不同的情况指定不同的图像。 元件与当前的 它允许您根据以下条件加载完全不同的图像: 这又意味着您可以: 这是一个简单的基本示例,用于检查视口是否小于 您可以注意到,属性使用与CSS 创建媒体属性。您可以使用相同的函数,这意味着您可以查询 同时,您还可以使用这些属性来设置设备方向以加载横向或纵向版本的图像,还可以混合大小属性。例如: 上面的代码实现了一个可以将小型横向裁剪图像加载到小型横向设备的版本。将同一图像的大版本上传到大型横向设备。 因此设备可以独立控制小型设备或大型设备中的图像来加载不同裁剪版本的图像。 如果您想为更高密度的显示提供不同分辨率版本的图像,可以通过向 现在 Chrome、Firefox 和 Opera 浏览器都拥有实现了对 如果您现在想使用 这可以通过下载并添加picturefill.js到您的项目头来实现: 您还可以通过异步加载脚本来提高效率,您可以参考该文件。 。 加载此脚本后, Picturefill 在其他版本 IE 中可以正常工作,但 IE9 无法识别图像 与 IE9 类似,Android 2.3♶♶ 无法识别。源 此基于 JavaScript 的解决方案需要浏览器中支持 JavaScript。 Picturefill 2.0 不提供“no-js”解决方案,因为在这种情况下,如果本机浏览器支持 Picturefill 的另一个要求是支持本地媒体功能,以便 发出额外 HTTP 请求,并且 返回 img 文件名 元素中指定的可能提前过期调用,从而在元素 这只是一个暂时的问题,一旦原来支持元素320px
到7680px❀。
目前最常见的解决方案
img {
max-width: 100%;
height: auto;
}
max A 设置 -%–%: 10 确保图像永远不会超过其父容器的宽度。如果源容器的宽度缩小到小于图像的宽度,则图像也会相应缩小。设置
、height:auto
可确保在这种情况下保留图像的纵横比。 新解决方案:
是HTML5中的新元素。
和
元件配合使用时,极大地改进了响应式成像过程。这样您就可以放置多个
source
标签来指定不同的图像文件名,然后根据不同的条件加载它们。 的工作原理
主要工作步骤如下:
标签。
。
media
属性以包含您想要的属性,例如视口的当前高度(viewport height)、宽度(width
等)。srcset
以匹配要加载的相应图像文件的名称。如果您想提供不同的像素密度(例如,针对 Retina 显示屏),您可以向 srcset
属性和
添加其他文件名。 768 像素
,如果较小则加载较小的图像:
max-width
、min-width
、❀❀❙❙ -身高
、方向
等属性。
srcset
属性添加额外的文件名来实现。例如,让我们看一下在像素密度为 2x
的屏幕上处理视网膜代码的片段:
元素现在是如何使用的
元素的支持。在不久的将来它将在其他浏览器中得到广泛支持。但那一刻还没有到来。
,您可能需要等待。也可以使用Picturefill2.0;聚填充由细丝成员提供。
元素的行为如我所描述,但有一些限制。功能限制
Picturefill
IE9
source
source
标签。 。要解决此问题,请将源元素包装在
元素位于video
标签中,使其在 IE9 中可识别,例如:
Android 2.3
图像
元素内。但是,当使用常规 img
标签时,它会识别 srcset
属性。为了避免在 Android 2.3 和所有其他具有相同问题的浏览器上出现此问题,请确保用作默认后备的 img
元素的文件名位于 srcset
属性中。 需要支持 JavaScript 和本机媒体功能
元素,则会显示多个图像。但是,如果选择“no-js”,则必须使用 Picturefill 1.2。
media
属性的功能能够正常工作。所有现代浏览器都支持媒体功能,IE8 及更早版本是唯一不支持的用户组。在本机支持 srcset
元素(但不支持 -image)的浏览器中,
可能会针对
source
中指定更合适的图像。 image
就会自行消失。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。