响应式图片(srcset属性和picture元素)

自适应网页设计意味着,不仅我们的布局能根据设备特性而变化,内容也可以。例如,高分辨率 (2x) 显示屏上高分辨率图形可保证清晰度。当浏览器宽度为 800px 时,一张 50% 宽度的图像或许很适合,但在一款很窄的手机上,则会占用太多屏幕空间,并且缩小图像来适应较小的屏幕时,耗费的带宽开销却是一样的。

你知道吗?加载网页时,平均 60% 以上的流量都来加载图片。HTML 中 img 元素很强大,它可下载、解码然后渲染内容,而现代浏览器支持众多图像格式。跨设备使用图像与桌面端并无太大区别,只需做一些微小调整,就能构建美好体验。

图像使用相对尺寸,在指定图像宽度时,请记得使用相对单位,以防止它们意外溢出视口。例如,width: 50%; 将图片宽度设置为包含元素宽度的 50%

因为 CSS 允许内容溢出其容器,因此可能需要使用 max-width: 100% 来保证图像及其他内容不会溢出。例如:

img, embed, object, video {
  max-width: 100%;
}

请务必借助 img 元素的 alt 属性提供有意义的描述;这些描述有助于提高您的网站的可访问性,因为它们能提供语境给屏幕阅读器及其他辅助性技术。

高 DPI 设备上使用 srcset 来增强 img,srcset 属性增强了 img 元素的行为,让您能够轻松地针对不同设备特性提供多种图片文件。类似于 CSS 原生的 image-set CSS 函数,srcset 也允许浏览器根据设备特性选择最佳图像,例如,在 2x 显示屏上使用 2x 图像,将来甚至允许在网络带宽有限时对 2x 设备使用 1x 图像。

<img srcset="elva-fairy-320w.jpg,
             elva-fairy-480w.jpg 1.5x,
             elva-fairy-640w.jpg 2x"
src="elva-fairy-640w.jpg" alt="Elva dressed as a fairy">

在不支持 srcset 的浏览器上,浏览器只需使用 src 属性指定的默认图像文件。正因如此,无论设备能力如何,一定要始终包含一个在任何设备上都能显示的 1x 图像。如果 srcset 受支持,则会在进行任何请求之前对逗号分隔的图像/条件列表进行解析,并且只会下载和显示最合适的图像。

尽管条件可以包含分辨率和宽度等各种参数,但目前只有分辨率能够得到很好的支持。

在自适应图像中用 picture 实现,若要根据设备特性更改图像,请使用 picture 元素。 picture 元素定义了一个声明性解决办法,可根据设备大小、设备分辨率、屏幕方向等不同特性来提供一个图像的多个版本。类似于 video 元素,它可以包含多个 source 元素,使得根据媒体查询或图片格式指定不同图片文件成为可能。

<picture>
  <source media="(min-width: 800px)" srcset="head.jpg, head-2x.jpg 2x">
  <source media="(min-width: 450px)" srcset="head-small.jpg, head-small-2x.jpg 2x">
  <img src="head-fb.jpg" srcset="head-fb-2x.jpg 2x" alt="a head carved out of wood">
</picture>

上面的例子中,如果浏览器宽度至少为 800px,则将根据设备分辨率使用 head.jpg 或 head-2x.jpg。如果浏览器宽度在 450px 和 800px 之间,则将根据设备分辨率使用 head-small.jpg 或 head-small-2x.jpg。对于屏幕宽度小于 450px,且不支持 picture 元素向后兼容的情况,浏览器将渲染 img 元素,因此要始终包含该元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值