WebKit内核最新新增了对srcset属性的支持(参考:https://www.webkit.org/blog/2910/improved-support-for-high-resolution-displays-with-the-srcset-image-attribute/),这是首个宣布支持srcset的浏览器引擎。

WebKit内核最新新增了对srcset属性的支持(参考:https://www.webkit.org/blog/2910/improved-support-for-high-resolution-displays-with-the-srcset-image-attribute/),这是首个宣布支持srcset的浏览器引擎。

srcset属性是由W3C旗下的响应式图片社区(http://responsiveimages.org/)首先提出的,目的是旨在为使用不同分辨率的不同浏览器用户提供适合其浏览环境的图片大小的解决方案。

作为W3C响应式图片社区的主席,我本人对此功能期待已经有很长的时间了。现在该属性率先由Webkit内核宣布支持,这是个天大的好消息,而且对参与的各方――无论是用户还是浏览器厂商来说都是很有利的。在本文中,我将简单介绍关于srcset属性。

  1. <img src="low-res.jpg" srcset="high-res.jpg 2x">

srcset属性的目的在于允许开发者为某个图片的属性指定一系列的来源,其中这些图片的来源是要根据客户显示屏的像素分辨率而设定的,比如:

  1. <img src="low-res.jpg" srcset="high-res.jpg 2x">

其中指出了使用图片作为在低分辨率的显示屏上显示的默认图片以及不能识别srcset属性的浏览器中也会使用该图片;而srcset中指定的图片,则会在能识别srcset属性的浏览器中同时是高分辨率屏幕中显示。可以看到,其语法类似于苹果对Retina-ready图形卡的定义:开发人员只需提供一个备用的文件名(alternate filename)和倍数放大(resolution multiplier),比如1x、2x或4x。"Resolution Multiplier"是用来衡量"多少个物理像素组成'一个'像素点的方法",例如iPhone 5的屏幕分辨率为1136x640,但"显示分辨率"为568x320。这意味着4个物理像素组成了一个"显示像素",或称"4x multiplier"。

这样其中的一个好处是,持有高分辨率显示设备的用户(典型的如苹果设备的用户)能很轻松得浏览那些能提供高质量图片的网站,从而带来很好的用户体验。与此同时,那些使用普通显示分辨率的用户也不会因为网络带宽等问题而懊恼浏览高分辨率图片较多的网站,因为这些网站能提供适合他们观看的图片。

接下来,我们会有这样的疑问,我们能否使用Javascript去实现这个属性的功能?其实srcset属性所做的事情并没有太特别,它根据用户的显示分辨率从一系列的可供选择的列表中选择了某张图片,然后替换原来src属性所指定的。看上去这个步骤可以完全用Javascript去代替,但为什么要使用全新的属性去实现呢?

实际上,我们尝试对网站BostonGlobe.com进行响应式图片设计的时候,采用过这样的方法,这个网站也是我们较早采用“响应图片”解决方案的网站之一。但由于目前几个主要的浏览器对图片具有越来越强大的预读取功能(prefetch),因为图片被读取之前,我们很难有机会去自定义脚本,最后我们为每一个图片发起了两个不同的请求。我将其中的一些过程记录

在(http://alistapart.com/article/responsive-images-how-they-almost-worked-and-what-we-need),有兴趣的读者可以参考。

那么我们能用CSS去实现这个功能吗?我们可以使用背景图片并结合和像素有关media查询语法去实现这个功能。由WebKit实现的srcset属性和CSS 3中最新的image-set属性有点像。image-set允许指定一系列的背景图片和分辨率 并能让浏览器去判断哪一种是最适合用户的。

使用CSS去按上面的方法去管理图片在不同分辨率下的显示的话,在一些简单的比如示例性的页面上是没问题的,但如果一旦应用到生产环境的规模比较大的网站中去,是多少会出现性能上或者各种各样的问题。

从开发人员的角度看,让CMS网站去成大量的背景图片并没有特别的好处。然而,更糟糕的是,它会导致用户每一次会请求很多并不需要的额外的样式和图片(当然除非你的CSS设计的十分仔细和谨慎)。除此之外,它使得我们的图片丢失了语义,这在搜索的环境下显得不是那么有利。

最接我们已经找到了一个基于CSS的方法,能通过基于HTML5中的数据属性值的方法,更换掉图片的来源,这其中使用了一些CSS的技巧(参考http://nicolasgallagher.com/responsive-images-using-css3/),但是要注意的是,其中大部分只是理论上的,可能在生产环境上会遇到各种问题,并且,它仍然没有解决如脚本遇到的同样问题:在下载高分辨率图片的时候的多次请求问题。

接下来我们讨论带宽的问题。无论屏幕的分辨率如何,也有大量需要使用分辨率较低的图像源的情况:比如Retina的MacBook Pro的连接到3G网络环境,或不稳定的会议WiFi网络。

除了能为用户提供一种内嵌简单的分辨率媒体查询功能外,srcset属性也在一定程度上考虑了带宽。真正令人兴奋的是,srcset是它定义为一组提供给浏览器的建议方案。然后,浏览器可以根据使用环境或用户的喜好去决定,它到底是使用一个较低的分辨率的图片还是使用高分辨率的图片。

实际上,我们是很倾向根据用户显示设备不同的分辨率去发送图片的,因为这样既节省了带宽,也能加速图片的下载。如果熟悉HTML 5的读者可能会记得<picture>标签,那么srcset标签和这个picture标签有什么异同呢?

由WebKit所实现的srcset的版本是和原来建议的srcset功能相匹配的,也跟响应式图片社区一直致力的版本是相符的。我们可以认为这个srcset其实就是化身为针对分辨率的快速的媒体查询方法,一个关键的区别在于浏览器可以选择源根据用户的喜好和选择进行选择。

虽然这已经是匹配原来srcset草案的建议,但当前srcset规范还正在试图扩大语法涵盖的范围,其中有的部分跟<picture>标签的功能是有重合的,如:

  1. <img src="fallback.jpg" srcset="small.jpg 640w 1x, small-hd.jpg 640w 2x, large.jpg 1x, large-hd.jpg 2x" alt="…">

象上面这种模式的语法在我们看来并不理想。我们限制一些和媒体查询语法中如max-width、像素和高深莫测的一些用法,其目的是尽可能能重用媒体查询语法的功能。幸运的是,web开发人员或者浏览器厂商都不是特别喜欢过度复杂的语法。

而<picture>标签的存在其目的是为了能用更灵活的和熟悉的语法,去解决一些问题例。<picture>标签在source元素中可以使用media属性,和video标签类似。这使我们能够针对图像源做一些组合:viewport的高度和宽度,以像素或ems为单位,使用min或max值,就和我们使用CSS media查询一样。

  1. <picture>
  2. <source src="med.jpg" media="(min-width: 40em)" />
  3. <source src="sm.jpg" />
  4. <img src="fallback.jpg" alt="" />
  5. </picture>

要注意的是,我们是可以在<picture>标签中使用srcset属性的,例子如下:

  1. <picture>
  2. <source srcset="med.jpg 1x, med-hd.jpg 2x" media="(min-width: 40em)" />
  3. <source srcset="sm.jpg 1x, sm-hd.jpg 2x" />
  4. <img src="fallback.jpg" alt="" />
  5. </picture>

最后要注意的是,尽管Webkit在基于响应式图片的解决方案中率先行动了,但我们也期望其他浏览器继续跟上这个趋势,同时在http://usecases.responsiveimages.org/上,列举了在响应式图片处理方案的最新研究趋势。

原文链接:http://mobile.smashingmagazine.com/2013/08/21/webkit-implements-srcset-and-why-its-a-good-thing/

WebKit最新特性srcset简介(转)相关推荐

  1. 深入解读ADO.NET2.0的十大最新特性

    篇文章概述了.NET Framework 2.0里的ADO.NET2.0的最新特性.在以下叙述中将附带一些简单的例子来讨论这些特性的细节.以下便是ADO.NET新增的特性: 1. 批量复制操作(Bul ...

  2. 如何在windows上玩转redis的最新特性?

    想要了解redis的最新特性,可是windows下的可以安装的版本最高为3.2,想要验证redis的诸如stream特性的话,就无能为力了. 解决方法之一在windows上安装虚拟机,然后再虚拟机上安 ...

  3. uc浏览器TV版最新版本功能简介

    uc浏览器TV版最新版本功能简介 UC浏览器TV版怎么样?提起UC很多人都知道,不就是那款在手机上很火的浏览器么?而要说到UC电视版,知道的人就不多了.本月初,UC发布了旗下首款PC版浏览器,网友们试 ...

  4. Autodesk Infrastructure Map Server 2012(MapGuide 2012) 最新特性介绍

    近日Autodesk发布了面向基础设施的WebGIS平台产品-Autodesk Infrastructure Map Server(AIMS) 2012,也许你习惯于称它为MapGuide 2012, ...

  5. FL Studio20破解补丁包 V20.9 最新免费版(FL Studio20破解补丁包 V20.9 最新免费版功能简介)

    大家好,关于FL Studio20破解补丁包 V20.9 最新免费版,FL Studio20破解补丁包 V20.9 最新免费版功能简介这个很多人还不知道,我来为大家解答以上的问题,现在让我们一起来看看 ...

  6. WebKit新特性WebGL

    http://blog.csdn.net/klarclm/article/details/7381426 # WebGL及在WebKit和Chromium中的实现 ## 概述 前面章节介绍了Canva ...

  7. Webkit 最新 Javascript 引擎领先 Chrome

    几周前 Google Chrome 发布之后,因其创新的 UI 以及出色的 JavaScript 执行效率而备受赞誉.最近,作为 Safari 与 Chrome 浏览器内核的 WebKit 发布了一个 ...

  8. 微软即将发布的.NET 5,蕴藏哪些最新特性?

    作者 | Paul Krill 编译 | 郑丽媛 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 以下为译文: 为了统一.NET平台,.NET 5改进了RyuJIT中 ...

  9. 2020.5.2 Redis 都6.0了 最新特性你get了吗?:多线程连环 13 问!

    支持多线程的Redis6.0版本于2020-05-02终于发布了,为什么Redis忽然要支持多线程?如何开启多线程?开启后性能提升效果如何?线程数量该如何设置?开启多线程后会不会有线程安全问题?多线程 ...

最新文章

  1. 计算机网络拓扑结构 以下关于星型网络拓扑结构的描述正确的是______。 (多选题 )
  2. Symantec Backup Exec System Recovery简明安装手册
  3. uvm 形式验证_这究竟属于下一代验证的方法、语言还是工具?||路科验证
  4. syslog-ng客户端,服务器配置
  5. python-知识回顾-16
  6. java shapefile 中文乱码_GeoTools操作Shape格式文件
  7. Linux桌面版横评:一、评测背景
  8. 【CSS】Table样式
  9. 操作系统—死锁的概念
  10. 419.甲板上的战舰
  11. GIS520论坛,GIS专业资源下载!
  12. flash player 11.2 64位 linux,Adobe Flash Player 11.2.202 Beta 1支持 64位操作系统
  13. 【转】京东抢购服务高并发实践
  14. AD603+MCP4725+STM32-----自动增益控制电路
  15. 谈谈我对上手MacOS的体验与macos常用快捷键总结
  16. 什么!这就是PCB打板!
  17. 全选、全不选、反选功能的实现
  18. JavaScript实现flatten
  19. Python设计模式之享元模式(8)
  20. 《奔跑吧 Linux内核》之处理器体系结构

热门文章

  1. c++心形编码_求一个C语言写成的心形代码?
  2. git-2-git基本理论及项目创建
  3. 惟客数据李柯辰:数字化客户经营的基础、核心与方法|2022全球数字价值峰会
  4. glibc: fgets 使用规范;如果不规范,CPU吃满的一个例子
  5. 小米10青春版科学计算机,确定了!小米10青春版:首发搭载 MIUI 12 系统,50倍变焦加持...
  6. 思特奇杯·云上蓝桥 -算法 集训营第二周
  7. nginx内置变量 $request_filename
  8. s5pv210-nand-dm9000-dts-2
  9. webstorm插件开发
  10. 送上“曾国藩日课十三条”