腾讯响应式图像终于有超赞的解决方案了!

  自从2010年Ethan Marcotte开始讨论响应式网页设计,开发者和设计师们竞相寻求处理响应式图片的方法。这的确是一个棘手的问题 ,因为我们对同一个网站在众多设备宽度下,使用同一图像源。你愿意在一个大显示屏上显示模糊地、马赛克状的图像?你愿意在你的手机上加载一个巨大的(虽然更漂亮的)图像?这个问题令人左右为难。

  一群来自响应式问题社区组(RICG)的聪明家伙致力于解决这个难题,他们使picture元素和srcset、sizes属性纳入HTML 5.1规范草案 。因为我们无法预测用户在何地以及如何访问我们的网站,所以我们需要浏览器自身根据情况选择最好的图像。新规范将解决以下问题:

  基于设备象素比(device-pixel-radio)选择

  基于viewport选择

  基于Art direction(美术设计)选择

  基于图像格式选择

  该规范中,img元素增加了两个新属性:srcset和sizes。srcset用来声明一组图像源,浏览器根据我们使用描述符指定的条件来选择图像。描述符x表示图像的像素密度,描述符w表示图像的宽度;浏览器使用这些信息从列表中选择合适的图像。sizes属性为浏览器提供将要显示图像的尺寸信息,srcset使用w描述符时必须包含此属性。这种方法尤其适用于可变宽度的图像,我将在后面详细讨论。

  我们现在可以根据用户的viewport,提供不同质量或美术设计(art direction)的图像,无需借助复杂的服务器端设置。响应式图像将成为HTML规范的重要组成部分,所有浏览器终将都会支持此解决方案。

  固定宽度图像:基于设备像素比选择

  视网膜屏幕的广泛应用,使我们不仅需要考虑屏幕分辨率,而且也需要考虑像素密度。视网膜屏幕,4K显示器,UltraHD-它们都比相同尺寸的标准分辨率显示器填充了更多的像素。更多的像素=更清晰的图像。

  有些图片不管屏幕尺寸,始终以固定宽度显示-如站点logo或人物简介图像,也就是说需要根据设备像素比来选择。浏览器将根据设备像素比来选择加载哪张图像。

  srcset属性列出了浏览器可以选择加载的源图像池,是一个由逗号分隔的列表。x描述符表示图像的设备像素比。浏览器根据运行环境,利用这些信息来选择适当的图像。不理解srcset的浏览器会直接加载src属性中声明的图像。

<img srcset="crest-383.jpg 1.5x, crest-510.jpg 2x" src="crest-255.jpg" alt="[ISUX译]响应式图像" alt="USWNT crest" />


  网站logo就是固定宽度图像的一个例子,不管viewport的宽度如何,始终保持相同的宽度。不过,与内容相关的图片,通常也需要响应式,它们的大小往往随viewport改变。对于这类图像,还有更好的处理方法。

  可变宽度的图像:基于viewport选择

  对于可变宽度的图像,我们使用srcset搭配w描述符以及sizes属性 。w描述符告诉浏览器列表中的每个图象的宽度。sizes属性是一个包含两个值的,由逗号分隔的列表。根据最新规范,如果srcset中任何图像使用了w描述符,那么必须要设置sizes属性。

  sizes属性有两个值:第一个是媒体条件;第二个是源图尺寸值,在特定媒体条件下,此值决定了图片的宽度。需要注意是,源图尺寸值不能使用百分比,vw是唯一可用的CSS单位。

<img srcset="uswnt-480.jpg 480w,
             uswnt-640.jpg 640w,
             uswnt-960.jpg 960w,
             uswnt-1280.jpg 1280w"
     sizes="(max-width: 400px) 100vw,
            (max-width: 960px) 75vw,
            640px"
     src="uswnt-640.jpg" alt="[ISUX译]响应式图像" alt="USWNT World Cup victory">


  上例中,我们告诉浏览器在viewport宽度小于400像素时,使图像的宽度与viewport等宽。在viewport宽度小于960像素时,使图像的宽度为viewport宽度的75%。当viewport大于960像素时,使图像的宽度为640像素。如果你不熟悉vw ,可以看看Tim Severien的大文viewport单位详解 。

  浏览器利用srcset和sizes信息来选择最符合规定条件的图像。如果浏览器的viewport是600像素,图像最可能以75vw的宽度显示。浏览器将尝试加载第一张大于450像素(600*0.75)的图像,也就是uswnt-480.jpg。如果我的是dpr为2的Retina显示屏,那么浏览器就会尝试加载第一张大于900像素(600*0.75*2)的图像,也就是uswnt-960.jpg。我们无法确定究竟显示哪张图像,因为每个浏览器根据我们提供的信息挑选适当图像的算法是有差异的。(译者注:srcset和size列表是对浏览器的一个建议(hint),而非指令。例如,设备像素比(dpr)为1.5的设备,亦可用1x也可用2x的图像,由浏览器根据其能力、网络等因素来决定。)

  前两个例子都是以不同质量显示相同的图像,仅用srcset属性就足够了。不必担心老旧浏览器,老旧浏览器会把它看作为一个普通的图像并从src中加载。如果你想在不同宽度下显示稍微不同的图像,比如在较窄屏幕下仅显示图像的关键部分,那么要使用picture元素。

  picture:基于Art direction(美术设计)选择

  picture元素就像是图像和其源的容器。浏览器仍然需要img元素,用来表明需要加载图片,如果没有img,那么什么都不会渲染。source为浏览器提供了要显示图像的供选版本。基于美术设计选择的适用场景为:在一个特定的转效点(breakpoint)需要显示一个特定的图像。使用picture元素选择图像,不会有歧义。

<picture>
  <source media="(min-width: 960px)" srcset="ticker-tape-large.jpg">
  <source media="(min-width: 575px)" srcset="ticker-tape-medium.jpg">
  <img src="ticker-tape-small.jpg" alt="[ISUX译]响应式图像" alt="USWNT ticker-tape parade">
</picture>


  在本例中,当viewport大于960像素时,会加载图像的风景模式版本(ticker-tape-large.jpg)。当viewport宽度大于575像素时,浏览器会加载图像的裁剪过的肖像模式版本(ticker-tape-medium.jpg)。而当宽度小于575像素时,加载的图像( ticker-tape-small.jpg)已经被裁剪成焦点仅在一个球员上了。

  picture元素是向后兼容的;不支持picture元素的浏览器将显示img。图像的所有标准属性(如alt),应该作用在img上而不是picture上。

  source:基于图片格式选择

  最近几年出现了一些新的图片格式,这些新图像格式在较小的文件大小情况下保证了较好的图片质量。听起来还不错,但残酷的事实是没有一个新格式被所有浏览器支持。谷歌的WebP表现不错,但只有Chrome和Opera原声支持。JPEG-XR,最初被称为高清照片,是微软发布的一个专有图像格式,仅Internet Explorer支持。如果你想了解更多信息,可以查看Zoltan Hawryluk对这些新格式的深入研究。

<picture>
  <source type="image/vnd.ms-photo" src="wwc2015.jxr">
  <source type="image/jp2" src="wwc2015.jp2">
  <source type="image/webp" src="wwc2015.webp">
  <img src="wwc2015.png" alt="[ISUX译]响应式图像" alt="WWC 2015">
</picture>

  source的type属性用来指定每个图像的MIME类型,浏览器会选择第一个含有其支持的MIME类型的源。源的顺序是至关重要的,如果浏览器无法识别所有的图象类型,它会回退至原来的img元素。

  现在可以使用这些东东吗?

  在写这篇文章的时候, Firefox,Chrome和Opera的最新稳定版本均支持picture。Safari和IE本身均不支持picture。srcset的情况稍微好一点,Firefox、Chrome和Opera的最新稳定版本完全支持,Safari8和Internet Explorer Edge部分支持,可以使用x描述符用于根据分辨率切换,但不支持w描述符。Safari9已经完全支持srcset了(译者注)。

  现有不少polyfills解决支持性问题,最知名的恐怕是Scott Jehl的picturefill。目前我(原作者)在我自己的网站上使用Alexander Farkas的respimage。目前的状况是,我们已对响应式图像的处理方案达成一致,并且这些解决方案逐渐被所有的主流浏览器实现。尽管该规范仍在不断完善之中,但原生的响应式解决方案离我们越来越近了。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索图像
, webp
, 浏览器
, 像素
, 选择
, viewport
宽度
响应式图像、响应式图像是什么、bootstrap 响应式图像、腾讯视频有声音没图像、腾讯图像识别,以便于您获取更多的相关知识。

时间: 2024-11-03 09:41:41

腾讯响应式图像终于有超赞的解决方案了!的相关文章

《响应式Web设计:HTML5和CSS3实践指南》——1.3节基于cookie及JavaScript的响应式图像

1.3 基于cookie及JavaScript的响应式图像使用复杂的服务器端逻辑也能实现响应式图像.有时因为一些特殊的需求,开发者往往不能够采取最简单的方法来实现特定的目标.之前提到的基于宽度百分比的方法依赖于客户端来实现对于大图像文件的缩放.而本方法则是在服务器端依据客户的请求,返回恰当大小的图像文件.如果你正为网页加载过慢导致的网站性能问题而烦恼,也许该方法能够给不堪重负的服务器负载和网络带宽带来一些改进. 1.3.1 准备工作本条目所涉及的方法都需要在服务器端实现相应的功能.首先,服务器端

《响应式Web图形设计》一13.4 多图像解决方案

13.4 多图像解决方案 响应式Web图形设计 如果你想对图像质量有更多把握,同时还可以不拘泥于一种图像格式,那么是时候该考虑下picture元素和srcset属性了. 13.4.1 picture元素 picture元素(见图13.17)是响应式图像社区(网址是http://picture.responsiveimages.org/)提出的新元素,旨在帮助网页设计师在用户可见的内容中指定合适的图像. 如果用户使用一个高清分辨率的大屏幕来访问网站,那么我们可以为之提供高清大图. 如果用户使用常规

《响应式Web设计:HTML5和CSS3实践指南》——1.5节基于媒介查询的图像缩放

1.5 基于媒介查询的图像缩放媒介查询是针对响应式图像的另一个有用和高度可定制的方法.这与通过设置宽度百分比来实现自适应宽度的方法并不相同.你的设计可能需要为不同的屏幕尺寸范围准备一些具体的图像宽度,而自适应宽度会打破你的设计. 1.5.1 准备工作这种方式仅仅需要一张图像.而且在客户端浏览器调整图像,而不是在服务器端. 1.5.2 实现方式HTML代码相当简单,使用标准的图像标签创建一个图像元素,如下所示: 将CSS中的这个类添加到每个媒介查询中,所对应设置的尺寸都不相同.这将会使浏览器针对每

Chrome 34 Beta版的语音搜索和响应式图片支持

Chrome 33稳定版发布才过了一周,Google就宣布了Chrome 34 beta for Windows.Mac.以及Linux.Chrome 34 beta的新功能包括--支持响应式图片.unprefixed版本的Web Audio API.以及"OK Google"语音搜索.当然,人们最感兴趣的,应该都是后者--只需在Chrome中新建标签页或访问Google.com,再说一句"OK Google",浏览器就会自动提取语音关键词并进行搜索了. 该功能已登

《响应式Web设计:HTML5和CSS3实践指南》——导读

目 录 第1章 响应式元素及媒介1.1 简介 1.2 基于宽度百分比的图像缩放1.3 基于cookie及JavaScript的响应式图像 1.4 使视频自适应于屏幕宽度1.5 基于媒介查询的图像缩放 1.6 基于媒介查询的动态导航栏 1.7 基于尺寸的响应式内边距1.8 基于CSS3按钮的进度条 第2章 响应式字体 2.1 简介2.2 创建自适应的响应式字体2.3 使用画布实现文本阴影2.4 使用画布实现内侧阴影和外侧阴影 2.5 使用画布旋转文本2.6 使用CSS3旋转文本2.7 使用CSS3

《响应式Web设计性能优化》一导读

前 言 响应式Web设计性能优化 现如今,虽然响应式设计已经成为一个热门话题,但它仍然被当作一门前端技术.在大多数开发人员的印象中,响应式设计通常都与媒体查询有着紧密的关系.在本书中,我更愿意把响应式设计称为一种哲学,而不仅仅是一门技术:一个可以从传统单一的前端处理转变为从多方位考虑的理想解决方案,因为每个HTTP请求中都携带了许多信息到Web服务器,这样Web服务器就可以根据信息做相应的响应.在某些场景中,在后台实现响应式是一种更好的解决方案. 正因为周围的设计者和开发者常常有构建响应式站点方

响应式网站与原生移动应用,哪个更适合你的企业?

以电商为例,截至去年,消费者花在零售企业移动应用上的时间占购物时间的27%,与此同时,67%的消费者表示,除了用电脑,他们在移动设备上更愿意去一些界面友好.用户体验佳的网站上购物. 如果你的公司负担得起,强烈建议既创建响应式网站也创建原生移动应用,这样可以吸引全体消费者的注意.原生移动应用将会为你现有的忠实顾客提供良好的移动客户端体验,而响应式网站可为新老客户浏览公司网页时提供最佳的用户体验. 例如,流行的电子商务品牌Nasty Gal就有其专门的响应式网站和原生移动应用,这就能给顾客带来了最好

《响应式Web图形设计》一13.2 缩放图像带来的问题

13.2 缩放图像带来的问题 响应式Web图形设计使用CSS缩放图像只能算解决一半问题.光栅图像的脆弱在于必须为显示尺寸准备像素足够大的图像.图像被拉长或拉宽的时候,它没有多余的像素数据供其添加.因此,边缘会变得模糊不清.这就是为什么一开始最好从尽可能最大的尺寸开始着手处理图像.该尺寸可能是一个非常大的显示器宽度. 13.2.1 大尺寸图像 在创作本书期间,戴尔公司推出了UltraSharp U3011显示器,30寸超大尺寸,2 560×1 600分辨率.因此,能够匹配此屏幕的自适应图像可能会非

另外一款超棒的响应式布局jQuery插件 &amp;#8211; Freetile.js

在线演示 我们曾经介绍过俩款知名的响应式布局插:isotope和masonary,今天我们这里再介绍一款相当不错的响应式布局插件 – Freetile.js,使用它同样可以生成超酷的动态布局效果.相信大家一定会喜欢! 主要特性 Freetie来自于Assemblage 和 Assemblage Plus的内建布局引擎,设计灵感来自于Masonry,VGrid和Wookmark,但是和他们相比较,拥有以下独特的地方: 允许包含任何尺寸的元素,并且不要求一个固定的列宽度,因此你不需要指定列宽度来迎合