Code前端首页关于Code前端联系我们

如何使用HTML5图像元素处理响应式图像?

terry 2年前 (2023-09-27) 阅读数 45 #数据结构与算法

固定宽度、像素完美的网站设计早已不复存在。在当今宽屏显示器、互联网电视、各种尺寸的平板电脑和智能手机的世界中,我们的设计需要处理一切可能的情况,从320px7680px❀。

随着这种多分辨率景观的出现,需要拉伸或缩小图像以满足这些不同的要求。这可以理解为下面的问题。如果矢量图形中发生偏移,则大多数具有固定像素的图像的宽度不会改变。

那我们该怎么办呢?

目前最常见的解决方案

作为一般规则,您可以在任何响应式网站上找到以下 CSS 样式:

img {
    max-width: 100%;
    height: auto;
}

此代码使用 max A 设置 -%–%: 10 确保图像永远不会超过其父容器的宽度。如果源容器的宽度缩小到小于图像的宽度,则图像也会相应缩小。设置 height:auto 可确保在这种情况下保留图像的纵横比。

HTML5 的 picture 元素处理响应式图片 怎么玩?

这解决了问题的一个方面,并允许在许多不同的情况下显示相同的图像。然而,这不允许我们为不同的情况指定不同的图像。

新解决方案:

是HTML5中的新元素。

元件与当前的 元件配合使用时,极大地改进了响应式成像过程。这样您就可以放置多个source标签来指定不同的图像文件名,然后根据不同的条件加载它们。

它允许您根据以下条件加载完全不同的图像:

  • 媒体属性的结果,例如:视口当前高度(viewport height)、宽度(width)、方向(direction)。
  • 像素密度

这又意味着您可以:

  • 上传适当大小的图像文件,以便充分利用可用带宽。
  • 加载不同裁剪和纵横比的图像以适应不同的宽度布局变化。
  • 加载更高的像素密度以显示更高分辨率的图像。

HTML5 的 picture 元素处理响应式图片 怎么玩?

的工作原理

主要工作步骤如下:

  • 创建标签。
  • 在这些标签内,创建一个要用于执行任何功能的元素
  • 添加media属性以包含您想要的属性,例如视口的当前高度(viewport height)、宽度(width等)。
  • 添加属性srcset以匹配要加载的相应图像文件的名称。如果您想提供不同的像素密度(例如,针对 Retina 显示屏),您可以向 srcset 属性和
  • 后备元素 HTML5 的 picture 元素处理响应式图片 怎么玩? 添加其他文件名。

这是一个简单的基本示例,用于检查视口是否小于 768 像素,如果较小则加载较小的图像:


    
    
    HTML5 的 picture 元素处理响应式图片 怎么玩?

您可以注意到,属性使用与CSS 创建媒体属性。您可以使用相同的函数,这意味着您可以查询 max-widthmin-width

❀❀❙❙ -身高方向等属性。

同时,您还可以使用这些属性来设置设备方向以加载横向或纵向版本的图像,还可以混合大小属性。例如:


    
    
    
    
    HTML5 的 picture 元素处理响应式图片 怎么玩?

上面的代码实现了一个可以将小型横向裁剪图像加载到小型横向设备的版本。将同一图像的大版本上传到大型横向设备。

因此设备可以独立控制小型设备或大型设备中的图像来加载不同裁剪版本的图像。

如果您想为更高密度的显示提供不同分辨率版本的图像,可以通过向 srcset 属性添加额外的文件名来实现。例如,让我们看一下在像素密度为 2x 的屏幕上处理视网膜代码的片段:


    
    
    HTML5 的 picture 元素处理响应式图片 怎么玩?

元素现在是如何使用的

现在 Chrome、Firefox 和 Opera 浏览器都拥有实现了对元素的支持。在不久的将来它将在其他浏览器中得到广泛支持。但那一刻还没有到来。

如果您现在想使用,您可能需要等待。也可以使用Picturefill2.0;聚填充由细丝成员提供。

HTML5 的 picture 元素处理响应式图片 怎么玩?

这可以通过下载并添加picturefill.js到您的项目头来实现:


您还可以通过异步加载脚本来提高效率,您可以参考该文件。 。

加载此脚本后, 元素的行为如我所描述,但有一些限制。功能限制

Picturefill

IE9

Picturefill 在其他版本 IE 中可以正常工作,但 IE9 无法识别图像 sourcesource 标签。 。要解决此问题,请将源元素包装在 video 标签中,使其在 IE9 中可识别,例如:


    
    
    
    
    HTML5 的 picture 元素处理响应式图片 怎么玩?

Android 2.3

与 IE9 类似,Android 2.3♶♶ 无法识别。源

元素位于图像元素内。但是,当使用常规 img 标签时,它会识别 srcset 属性。为了避免在 Android 2.3 和所有其他具有相同问题的浏览器上出现此问题,请确保用作默认后备的 img 元素的文件名位于 srcset 属性中。

需要支持 JavaScript 和本机媒体功能

此基于 JavaScript 的解决方案需要浏览器中支持 JavaScript。 Picturefill 2.0 不提供“no-js”解决方案,因为在这种情况下,如果本机浏览器支持 元素,则会显示多个图像。但是,如果选择“no-js”,则必须使用 Picturefill 1.2。

Picturefill 的另一个要求是支持本地媒体功能,以便media 属性的功能能够正常工作。所有现代浏览器都支持媒体功能,IE8 及更早版本是唯一不支持的用户组。在本机支持 srcset 元素(但不支持 -image)的浏览器中,

可能会针对

发出额外 HTTP 请求,并且 返回 img 文件名 元素中指定的可能提前过期调用,从而在元素source中指定更合适的图像。

这只是一个暂时的问题,一旦原来支持元素image就会自行消失。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门