写点什么

Chrome 38 通过<picture>元素支持 Art Direction

  • 2014-10-22
  • 本文字数:1310 字

    阅读完需:约 4 分钟

Google 在最近发布的 Chrome 38 中,增加了对元素的支持,让开发者能够针对不同类型的媒体查询(media queries)请求,指定多种不同的图像来源。

对于同样的图片,与传统的 PNG 或 JPG 图像格式相比,采用 Google 带来的 WebP 图像格式,下载流量最多将能够减少 25-34%。不过,尽管该图像格式能够降低网络传输数据量,从而使 Web 页面的上传速度将得以小幅提升,但为了满足 Web响应式设计的需求,还需要引入其他解决方案。

例如,根据 DPR``(设备 -``像素 -``比率),<img>``元素的 srcset``属性可以用来渲染若干固定尺寸图像中的一幅,如下图所示:

复制代码
<img src="/images/100-example.jpg"     
srcset="/images/150-example.jpg 1.5x, /images/200-example.jpg 2x"     
alt="" width="100" height="150">

而另一个方案是基于视区(viewport)大小,呈现经过缩放的图像:

复制代码
<img sizes="100vw" srcset="example-200.jpg 200w, example-600.jpg 600w,
example-1200.jpg 1200w” src="example-200.jpg">

Responsive Images Community Group (RICG)公布的信息来看,Chrome 34+、Safari 和 Firefox 33+(带有状态 flag)都支持 srcset 属性。微软则正在考虑为 IE 实现该特性。而 Opera 21+ 由于使用了 Chrome 的 Blink 引擎,所以同样支持该特性。WHATWG 小组详细列出了srcset 属性及其用法(点击查看详情)

有时候,用户代理需要呈现完整图片,或是呈现部分图片并排除不相干的部分,而这取决于设备的物理大小、屏幕分辨率、朝向(垂直或水平)及其他方面的因素。我们可以从如下示例图片(由 responsiveimages.org 提供)来了解这个被称为 Art Direction 的方法。

尽管也可以使用 JavaScript 来实现这一功能,但是实际上我们并不提倡这种做法,因为某些用户代理会在加载和运行任何脚本之前就下载页面图片;另一些则会在运行脚本、下载图片之前,让页面呈现出空白图片占位。因此,推荐的解决方案是使用<a href="https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element">picture</a>元素,它让开发者能够指定多重图像来源,并将它们与媒体查询结合。

下面的示例展示了为多种 DPR 提供不同图片来源的方法:

复制代码
<picture>   <source media="(max-width: 500px)"
srcset="banner-phone.jpeg, banner-phone-HD.jpeg 2x">   <
img src="banner.jpeg" srcset="banner-HD.jpeg 2x"
alt="The Breakfast Combo"> </picture>

当浏览器无法识别元素时,将使用元素作为回滚方案。 HTML 规范包含了其他示例,展示如何使用多重图像来源,用于图像的裁切或不同的图像格式。

Google 最近还在其稳定版分支(stable channel)中公布了一份可以用在 Chrome 38 中进行测试运行的 Art Direction 的示例。运行该示例的时候,用户要想观测到效果,需要调整浏览器窗口的大小,强迫浏览器呈现不同的图片。

目前,只有Chrome 38+ 和Opera 25+ 能够完整地支持元素。Firefox 33+ 也支持这一元素,但需要人工启用。而对IE 或Safari 来说,具体的情况目前尚不清楚。对于尚不支持这一特性的浏览器,想要创建响应式图片的开发者可以使用 Picturefill Polyfill 作为替代方案。

查看英文原文: Chrome 38 Supports Art Direction through the picture Element

2014-10-22 03:151903
用户头像

发布了 256 篇内容, 共 87.1 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

阿里云万郁香:多样付费选择构筑成本最优的弹性体验

阿里云弹性计算

阿里云 年度峰会 付费方式

数据分析人员需要掌握SQL到什么程度?3个常考题目刷一刷

博文视点Broadview

服务发现与配置管理高可用最佳实践

阿里巴巴云原生

阿里云 微服务 高可用 云原生 MSE

netty系列之:真正的平等–UDT中的Rendezvous

程序那些事

Java Netty 程序那些事 1月月更

Java Jackson 中的 JsonNode 和 ObjectNode

HoneyMoose

面试突击13:方法优先调用可选参数还是固定参数?

王磊

java面试 2022

Kafka往事——揭露Kafka推出Kafka Streams背后原因

Kafka中文社区

明道云虹桥演示中心,欢迎进店!

明道云

关于ant design pro的权限方案设计

袋鼠云数栈

大数据

盘点 2021| 不忘初心,未来之路,与君共勉

法医

前端 盘点 2021

《LeetCode刷题》数组与队列

IT蜗壳-Tango

IT蜗壳教学 1月月更

设计模式【8】-- 手工耿教我写装饰器模式

秦怀杂货店

Java 设计模式 装饰器

一篇从购买服务器到部署博客代码的详细教程

冴羽

nginx 前端 后端 博客 博客搭建

一个cpp协程库的前世今生(十一)等待与返回值

SkyFire

c++ cocpp

【LeetCode】奇偶树Java题解

Albert

算法 LeetCode 1月月更

Spring Boot工程中如何优雅地处理异常

sean77

spring 整洁代码

AWS 上传的 S3 文件重新载入的时候简体中文显示乱码

HoneyMoose

kubelet 的主动驱逐POD

Geek_f24c45

Kubernetes kubelet

Apache APISIX 结合 Authing 实现集中式身份认证管理

API7.ai 技术团队

api 网关 Apache APISIX Authing 身份验证

开源实践 | 携程在 OceanBase 的探索与实践

OceanBase 数据库

OceanBase 开源 客户案例 携程

Java Jackson 中的 mapper

HoneyMoose

【LeetCode】 替换所有的问号Java题解

Albert

算法 LeetCode 1月月更

双碳绿色风中,乘势而起了哪些新能源?

脑极体

error: ‘slots_reference’ was not declared in this scope

Ayosh

OpenCV

ReactNative进阶(四):ReactNative 原理剖析之JS 层渲染 diff 算法

No Silver Bullet

React Native 渲染性能 1月月更

Kubernetes生态,从繁荣走向碎片化

巨子嘉

容器 云原生

一键抠除路人甲,昇腾CANN带你识破神秘的“AI消除术”

华为云开发者联盟

CANN 昇腾 图像消除 智能实例分割 CRA算法

教你实现一个 iOS 重签名工具

37手游iOS技术运营团队

ios xcode

杜甫草堂

wood

300天创作

倒计时1天 | 超百位技术大咖齐聚开发者大会,与全球开发者一起“数聚未来”

OceanBase 数据库

OceanBase 开源 开发者大会

使用LNMP环境部署码云测试项目

咿呀呀

lnmp

Chrome 38通过<picture>元素支持Art Direction_JavaScript_Abel Avram_InfoQ精选文章