真正需要的是提供适合设备和环境的媒体,因为我们对任何特定的网络请求了解甚少。 我最近发布了一篇博客文章,里面有那么多图片,页面大小达到了 2.29 MB。 我应该在发布到 Twitter 时提醒大家:“如果你使用 3G 网络,就不要点击它,因为它可能要花很长时间才能加载,等你回家再看吧。”
理想情况下,我提供的这些图片都可以有一个较低分辨率的版本,在浏览器窗口大小较小或网络连接速度较慢的浏览器中显示。 即使在最先进的浏览器中,目前还没有原生方法来做到这一点。 所以现在是开始讨论我们作为网页开发者希望它如何运作的好时机。 也许我们可以影响规范的制定方式。
让我们将此讨论限制在内联栅格图像。 也就是说,今天作为 <img>
提供的服务。 我认为我们可以走三条路。
- 创建仅用于解决此问题的全新元素。
- 创建一种旨在解决此问题的新图片格式。
- 什么也不做,用其他技术解决我们的问题。
每种方法都有其优缺点。 让我们逐一看看。
创建新的元素
最有可能的候选者是 <picture>
,正如在 W3C 社区中所讨论的那样。 Scott Jehl 有一个 JavaScript polyfill,它模拟了它的功能。 语法如下:
<picture alt="description of image">
<!-- low-res, default -->
<source src="small.jpg">
<!-- med-res -->
<source src="medium.jpg" media="(min-width: 400px)">
<!-- high-res -->
<source src="large.jpg" media="(min-width: 800px)">
<!-- Fallback content -->
<img src="small.jpg" alt="description of image">
</picture>
优点
- 模仿其他媒体语法,例如
<video>
和<audio>
,这很有道理。 - 回退功能使其与不支持它的浏览器向后兼容,这非常重要。 我们不能让图片在旧浏览器中无法正常显示。
- 让我们这些网页作者能够控制在特定情况下显示的内容。
缺点
- 它比
<img>
复杂得多。 难以教授,难以学习,需要编写更多代码。 容易出错。 - 通过将媒体查询语法引入 HTML,它稍微混淆了 CSS 和 HTML 的界限。
- 与内联样式的问题类似。 使未来的更新变得更加困难。 不是可重用的抽象。
新的图片格式
这篇博客文章的灵感来自于我和 Christopher Schmitt 的对话,以及他发表的一篇博客文章。 Christopher 认为,一种新的图片格式是理想的解决方案。
这种新的图片格式将包含多个版本的自己。
哪张图片被像网页浏览器这样的程序提供,可以通过浏览器和网页服务器之间的虚拟握手来确定。
因此,该文件可能总共有 800k,但其中包含四个不同的版本:500k、200k、50k 和 10k。 通过某种标准化的规则集,这四个图片中的一个将被传送到浏览器并显示。
听起来像天方夜谭吗? 实际上,已经存在一种名为 FlashPix 的图片格式,它可以处理更加剧烈的版本化。 认为新的图片格式无法实现吗? WebP 正在以相当快的速度获得支持。
最终,语法将保持现状
<img src="unicorn.rpng" alt="fancy unicorn">
我只是编造了这个文件扩展名,但“响应式 PNG”对我来说就足够了。
Christopher 喜欢这种方法,因为它
允许继续使用 IMG 元素,它已经深深地融入到了 Web 的骨髓和精髓之中。
我喜欢这种想法。 我们无需抛弃一个一直运作良好的元素。 当然,我们也不会这么做。 无需替换 <img>
,只需在其基础上进行构建并提供替代方案即可。
优点
- 保持语法简单。 工作方式与以往相同。
- 也保持作者的编写简单。 一个文件,而不是多个文件。 采用速度可能会更快,更多人会实际使用它(较少人会为每个图片制作 4 个版本并手工制作查询来提供服务)。
缺点
- 可能会失去控制。 为了保持简单,图片格式会决定到底提供什么内容的逻辑。 它总能做出正确的决定吗? 它考虑哪些因素? 父容器宽度? 网络连接速度? 像素密度? 多个因素的组合?
- 与旧版本不兼容。 不支持新格式的浏览器会发生什么情况?
其他技术
我们当然可以依靠 JavaScript 来帮助我们。 它可以帮助我们使用新的图片格式。 我们将在 <img>
中使用普通的 png 和 jpg,并在新格式获得普遍支持之前,使用它来动态替换 src
属性。 这可能有点笨拙,但可行。
如果它能做到这一点,也许我们应该让它直接解决整个问题。 JavaScript 可以执行我们可能需要的所有“测试”(例如,窗口大小测试、网络速度测试),并且它可以负责将我们图片的 src
属性替换为更合适的图片。 Adam Bradley 的 foresight.js 库已经在做这件事了。 也许这就是 JavaScript 的用处,我们无需干涉。
认为 JavaScript 的客户端特性并不理想吗? 有几个解决方案可以将事情转移到服务器端。
Matt Wilcox 的 Adaptive Images 是一种非常巧妙的解决方案,它只使用少量的 JS 来测量当前屏幕大小并设置 cookie,然后所有对图片的请求都将通过一些 PHP 代码,根据屏幕大小确定要提供哪个版本的图片。
Sencha.io Src 是另一种完全无 JavaScript 的解决方案。 它通过 UA 嗅探来确定设备,并根据此决定要提供哪个大小的图片。 您只需在图片的 src 属性前加上 Sencha 服务的 URL 即可
<img src='//src.sencha.io/http://mywebsite.com/images/unicorn-hires.jpg' alt="unicorn" />
这是最简单的使用方法,它可以做得比这更复杂。 不过,这是一项第三方 Beta 服务,因此请注意它固有的风险(例如,服务停机,您的图片将无法加载)。 我想它最终会变成一项付费服务。
优点
- 我们不会动摇标准。
- 无需等待浏览器支持任何新功能。
缺点
- 这仅仅是忽略问题吗? 标准不应该帮助解决实际问题吗?
- 正确执行此操作所需的代码过于繁琐。
我的观点
仅仅依靠旧技术和技巧对我来说是不够的,但我无法决定我更喜欢新的格式还是新的语法。 也许两者都行? 也许是混合的方式? 我觉得语法更可能,因为对此的讨论更多。 格式的难度要大得多,而且我没有听说过任何关于此类事物的积极开发的传闻。
当我能够更新这篇文章,其中包含“官方”最佳实践时,那将是一个快乐的日子!
相关
- Brad Frost: 优化网页体验以适应高分辨率屏幕
- W3C: 响应式图片社区组
- Tim Kadlec: 媒体查询和资源下载测试
我认为我们应该有一个屏幕尺寸标头,它与 HTTP/SPDY 标头一起发送。 这意味着可以将服务器端代码实现为 IIS/mod_rewrite 插件,以便
1) 在大多数情况下,编码人员不需要编写额外的特殊代码。
2) 你可以根据会话进行修改。
3) 一些 JS 统计软件包可以删除测量这些内容的额外代码。
那是理想的解决方案...但离线应用程序怎么办?!!
我认为屏幕尺寸检测过于局限。你可以拥有一个巨大的屏幕,但仍然处于低带宽环境中。
值得注意的是,
<picture>
并不意味着在 HTML 中引入媒体查询——它们已经被指定为<video>
的源元素的一部分,我相信在一些夜间版本中已经实现了。我们希望确保,无论在这里出现的任何元素,都符合现有标准,你知道吗?
我认为将媒体查询放入 HTML 的真正问题在于它没有集中化(像 js/CSS 一样),所以你会遇到更多代码重复,而且如果你需要更改断点,需要修改更多地方。当然,
<video>
可能已经这样指定了,但这并不意味着它是最好的方法。我认为 rpng 的想法很棒,尺寸问题并不是那么大,因为它接近于大型版本的尺寸...小型和中型相对较小!!
我同意,新的图像格式似乎是最好的最终解决方案。这感觉很像当前渐进式 JPEG 的实现:加载每个后续层将取决于屏幕尺寸和网络延迟等因素。
你的图标字体博文在我的 Opera Mini 4.3 上通过 EDGE 网络加载得很快(不到 3 秒,压缩到 105kb)。仅此而已。
我喜欢新的图像格式的想法。正如你所说,它已经是网络的一部分。此外,如果我们使用新的元素,我们需要拥有无数不同尺寸的图片,它们都有不同的名称,从而影响 SEO,并且需要更大的代码片段。
使用图像格式,我们可以使用一个具有一个名称的图像,它会根据之前指定的文件大小自动响应。如果为图像标签添加了新属性,我们可以轻松地实现向后兼容。这意味着更少的 HTML,更好的 SEO 以及一个要处理和存储的图像。
Apple 实际上在其图标中使用了这种方法。如果你复制“获取信息”窗口中的一个图标,然后将其粘贴到 Preview 中,该图标实际上是同一个图像的 4 个不同分辨率。
徽标是
<picture>
吗?网站上有很多 img 不是图片。你是否能够针对个别资源使用 CSS 来进行填充/边距设置?
<picture>
<source class=”small”>
<source class=”large”>
</picture>
本周倾向于 .rpng。
到这个解决方案被广泛地解决和实施时,每个人都会使用 4G 或更高网络了。只是一个想法或讨论点。
我喜欢 picture 解决方案,但它也可以是
<image>
<source class=”small”>
<source class=”large”>
</image>
我绝对同意 Chris 的观点,即不应该将 html/css 混淆,我认为 source 上的类应该是针对特定 css 规则的必要条件。
绝对更喜欢 Tim 提出的“image”建议而不是“picture”,因为它太具体了。
这种语法怎么样
我可能完全错了,但这在这种情况下的意义比父子关系更大吗?
我意识到 IMG 不是一个漂亮或非常描述性的标签,但为什么不升级我们已经拥有并还算不错的标签呢?
根据我有限的测试,它似乎 向后兼容。
不,它不能轻易地变成 <image>。
因为浏览器供应商对编写不当的文档非常宽容,所以 <image> 的处理方式与 <img> 相同。
你可以通过创建一个包含以下内容的测试文档来测试这一点:
<image>
<source class=”small”>
<source class=”large”>
</image>
然后在网页检查器中查看 <image> 元素。你会发现所有子元素都被丢弃了。
这是因为 <img> 不应该包含子元素,而 <image> 从浏览器的角度来看,基本上是 <img> 的同义词。
无论你喜欢与否,<img> 和 <image> 都不能用于任何使用子元素的解决方案。
我认为语法是最合理的,但是为什么我们不能将这种语法与允许自闭合标签的语法结合起来(如果只有一个 URL)?此外,标签名称 picture 的好处是什么?为什么不直接保留 img?
我使用 .htaccess UA 探测来提供普通图像或小型优化后的图像。我对任何关于改进它或为什么不使用它的建议或想法持开放态度 :-) http://sandermangel.blogspot.com/2012/02/responsive-images-trough-htaccess.html
这与我最初的想法一致...
对我来说效果很好,因为它不需要额外的 HTML,因此可以轻松地在旧网站上实施。
在我看来,这是一个很大的优势,胜过其他需要浏览器支持的前端技术。
你正在向 Opera(桌面浏览器)提供低分辨率图像。
... 这就是为什么每种依赖于 UA 探测的响应方式都很糟糕。
嘿,抱歉一直插话:只是想指出,围绕提议的
<picture>
元素,有一些常见的问题和疑虑,我们已经发布到 响应式图像社区组,包括我们不能使用<img>
/<image>
的原因,以及当前(和提议的)CSS 和基于脚本的解决方案的不足之处。你链接的页面(以及 响应式资产 细分)详细介绍了图像多个备份的 HTML 相关引用——从而修改了我在博文中提到的 1 对 1 关系。
虽然我在博文中谈论的是新手网页构建者,但似乎也存在一个“一个 IMG,一个文件”的关联,无法在浏览器中撤消。
这突出了我认为新的图像格式 (.rpng) 和浏览器与服务器端方法之间的合作关系,比试图从 HTML 中硬塞一个解决方案要好。
这是一个我投入了大量思考的主题。它是响应式网页设计中那些我认为我们目前没有完美解决方案的问题之一。如果你还没有读过,我建议你阅读 Jason Grigsby 关于响应式图像的博文。他在这方面做了很多很棒的研究。
http://blog.cloudfour.com/responsive-imgs/
http://blog.cloudfour.com/preferred-solutions-for-responsive-images/
理想情况下,我希望 picture 元素尽快获得支持。我一直关注着 W3C 响应式图像 picture 元素的讨论,我更喜欢它,因为它将所有逻辑都集中在一个地方。我还感觉与新的图像文件类型相比,使用 picture 元素语法可以更好地控制逻辑。例如,你可以在提议的 picture 元素语法中的一个 source 标签上编写 min-width 和 min-device-pixel-ratio 的媒体查询。我不确定如何将这种逻辑添加到新的图像文件类型中。
然而,我并不完全反对新的图像文件类型。
我阅读了 Christopher Schmitt 的博文,发现它非常有趣。Matt Wilcox 提出了一个关于 picture 元素的想法,它与 video 元素加载文件格式的方式类似。
例如,对于 video 元素,你通常提供视频文件的几个不同版本,浏览器会使用它支持的任何文件格式。我认为这对 picture 元素来说是一个好主意。这样一来,我们就可以选择将逻辑保留在标记中,或者使用新的图像文件作为 picture 元素中的源,比如 webP,“rpng”,或者任何其他图像格式,然后在最后添加 .jpg,用于不支持这些新图像格式的浏览器。
还有一点,Scott Jehl 的 picturefill 示例代码中缺少 noscript 标签。这段代码可以防止在 JS 启用时下载备用 img src 图像。换句话说,可以防止重复下载。如果没有 noscript 标签,picture 元素 polyfill 的好处就会变得毫无意义。
我还有更多想法,但我认为它们更适合发布在博文中,而不是让这段评论变得更长。
有时最好的解决方案是最不糟糕的解决方案。
Matt Wilcox 在他的自适应图像视频演示中提出了一个关于 标签的绝佳观点,我将转述一下。
当你想要用新的断点更新你的网站设计时会发生什么?在 CSS 中,更改很容易,你更新媒体查询和任何必要的布局更新。但是,如果有多个 标签会发生什么?你需要重新审视每一个标签并更新它们的断点。潜在的噩梦。
将你的 picture 元素的媒体查询设置为一个 PHP 变量,并保持代码的 DRY 原则。
代码示例:https://gist.github.com/1893129
是的,你仍然需要在两个地方更新媒体查询,一次在你的 CSS 中,一次在你的 PHP 变量中,但如果你使用这种方法,你就不必更新你使用 picture 标签的每个实例。
当然,我同意基于变量的方法是明智的选择,并且大多数社区可能都会采用这种方法,尽管我有一部分人认为这种事情应该可以通过使用纯 HTML 或 CSS 来完成。
lowsrc!:D
也许我们应该用现代的思路修改 img 标签的旧 “lowsrc” 属性。现在几乎没有人使用它了。<img src=”hiresimg.png” lowsrc=”forsmallerdevices.png” />。显然,它需要被更详细地(很多)阐述,但这将是一个开始。
lowsource 听起来是一个很棒的选择。 标签对我来说语法太过繁琐了。而且,当没有小图片存在时,它可以很容易地被省略。
“你不能害怕做更大的梦,亲爱的。”设备不仅仅是两种尺寸。使用 picture 元素,你可以针对小型屏幕、中等屏幕、大型屏幕、超大型屏幕、高分辨率(Retina)屏幕的设备。
如果带宽媒体查询最终成为现实,我假设你也可以使用它们。目前,我猜你可以使用网络 API 来支持带宽媒体查询功能 - http://w3c-test.org/dap/network-api/,一旦它完成。我对网络 API 不像我想的那样熟悉,所以这只是我的猜测。
重点是,lowsrc 属性有点意思,但我相信像提议的 picture 元素这样的更健壮的解决方案是响应式图像的更好解决方案。
LOWSRC 是 HiSRC 插件 的灵感来源,该插件使用网络检测规范。
但是,这只是拼图的一部分。平板电脑屏幕正在变得更好,高分辨率 - 桌面机器也将随之而来。
将需要不止两种尺寸或同一图像的变体,而我认为将同一图像的多种类型保存在一个容器文件中是最好的做法之一。
关于
lowsrc
浏览器供应商在许多场合告诉我们,他们不太可能对现代浏览器中存在的 “图像预取” 行为进行修改 - 这意味着图像的
src
的内容将始终在任何自定义逻辑应用之前被获取。出于这个原因,供应商似乎不认为lowsrc
是一个可行的解决方案 - 而且就我们而言,它在实现方面留下了一个巨大的灰色地带。当我们无法在预取阶段之前应用自定义逻辑时,如何设置较小图像的断点?这是由浏览器设置的吗?然后我们将被限制在单个断点,它将基于什么?lowsrc
无法像媒体查询那样处理多种图像尺寸或分辨率 - 并且将被迫依赖于单个硬编码断点,而不是不断扩展的媒体查询列表。我当然能理解保持简洁的吸引力,但更长的语法只对开发者来说是一个问题。对我们的用户最有益的解决方案应该始终胜过对开发者最方便的解决方案。
看起来我们应该担心三个因素。
1. 设备分辨率
2. 连接速度
3. 用户是否付费使用带宽
这些因素传统上是相互关联的(一部手机体积小,速度慢,人们按使用量付费),但这些因素现在并不一定相互关联。
- 在 iPad 3 上,使用 3G 网络(巨大的潜在分辨率,相对较慢的连接速度,按带宽使用量付费)
- 在智能手机上使用 WiFi(低分辨率,高速,无限使用)
- 在笔记本电脑上使用 WiFi,但有数据上限(高分辨率,高速,在某个点为更多带宽支付更多费用)
我不知道答案是什么,但如果我们能嗅探到这三个因素,而不是仅仅第一个(这是媒体查询所做的),那就太好了。我知道这里已经讨论过一些内容:https://css-tricks.cn/bandwidth-media-queries
用户是否付费使用带宽是一个有趣的想法。你提到嗅探它,但我不知道该如何检测它?尽管我同意,这似乎是我们应该考虑的事情。
你会建议向每台设备提供什么图像。
iPad 3,使用 4G LTE 网络,有数据限制 - 按带宽使用量付费。
iPad 3,使用 WiFi 网络,无限数据使用。
两台设备都具有 Retina 显示屏,都具有高速互联网连接,只有一台设备有数据限制。
Retina 图像应该像 YouTube 上的 HD 视频那样成为一种可选功能吗?
+1。带宽至少与屏幕尺寸一样重要 - 当然不应该使用屏幕尺寸来推断连接速度。我可能在一台高分辨率的笔记本电脑上使用 3G 连接,并且不想等待全质量图像加载。
我同意你的三个因素,尽管我认为我们可以将后两个因素合并为一个浏览器设置。默认情况下,该设置由浏览器自动设置,以根据设备分辨率、带宽以及他们是否使用 WiFi 或移动网络来请求 “最合适的图像”。或者,用户可以根据自己的独特情况设置他们喜欢的图像 “类型”,如果他们想要更多控制的话。我并不认为让网站知道我是否付费使用带宽有什么问题,但我确实认为许多人会这样做。将来,任何影响图像最佳请求的其他因素都将内置到他们的浏览器中。
所有这些变量今天都可以由操作系统侧的浏览器确定,因此在规范中实现一个元标签或查询以 “获取” 我们的信息不会花费很长时间。或者,我们可以将这些信息作为标题传递并进行 mod_rewrite,从而无需额外的 src 属性或标签。
此外,通过让浏览器自己决定什么是最好的,我们消除了每次访问时对每个访问者进行分析的必要性,这也加快了用户体验。
在我们这边,我们可以自己构建各种版本的图像,或者将其留给服务器模块为我们生成/缓存。然后我们通过新的标签/属性或上面提到的标题功能来提供各种选项。
为了未来证明,你所需要做的就是手动添加更多 img 的迭代,或者更新你的服务器模块以生成这些变体并将其缓存以供查看。
这让我们设计师能够完全控制我们想要提供的图像质量,并让用户在需要更丰富/更快的体验时向我们请求不同的图像。它还促使浏览器供应商改进他们的浏览器,为他们的用户提供最佳的默认体验。
我做的是,我不使用 IMG 标签,而是使用带有背景图像的 divs,并且使用媒体查询根据像素密度或屏幕尺寸更改背景图像或高度、宽度等,因此我可以为不同的设备提供不同尺寸的图像,以及为具有超高 dpi 屏幕的手机提供高 dpi 图像。
既然我们只是在想出还不存在的解决方案,我建议将我们的图像封装在一个 XML 文件中,就像 Android 一样。(iOS 图像委托是否以相同的方式工作?我从来没有尝试过。)
因此,HTML 标签将保持不变(有利于向后兼容),但我们可以指定图像标签 src 中的 XML 文件(或者可能在标题中 - 就像我们对样式表所做的那样),并可能通过 “data-” 元素来识别正确的标签。
XML 文件将列出所有图像识别名称和实际文件名以及每个分辨率类所在的目录(低、高、中级子目录,尽管为了便于编码,我们可以假设这一点)。
这样做也打开了使其适用于通过 CSS 获取的图像的可能性。
我确信,这种方案将是我们最终解决这个问题的方式。
嘿,Chris,你或者 Christopher Schmitt 有没有在 W3C 社区组交叉发布这些内容,以便进行进一步的社区讨论?
Nicolas,我在响应式图像社区组中提到了我的想法。
如果你有任何其他领域的建议,比如继续讨论的邮件列表,请告诉我。
我认为这两种情况都很明显。
1. 它不只是关于文件大小和分辨率。这可能是大多数时候的问题,但你可能也希望在不同尺寸下显示图像的不同版本。例如,在小屏幕上裁剪到人物的脸部可能更有意义。这方面的例子
http://www.useit.com/alertbox/9611.html
http://www.slideshare.net/bryanrieger/prime-sky (第 20 页)
2. 有时它与文件大小和分辨率有关,以及这对用户的影响。例如,iPad 上的视网膜图像。如果用户使用的是高带宽连接,并且他们的合同中还有足够的带宽,而且他们没有明确表示不想使用高分辨率图像,那么只向他们提供这些图像将是有帮助的。
对于第二种情况,我认为浏览器必须参与进来。网络速度是瞬息万变的。只有浏览器,它可以监控网络速度,并且可能更了解用户的运营商合同情况,才能决定在任何给定时间下载哪个分辨率是最合适的。
从短期来看,像 Apple 提出的 image-set 规范这样的解决方案可以通过指定在何处可以找到表示同一文件在不同分辨率下的文件,然后让浏览器决定应该显示哪个文件来帮助解决这个问题。从长远来看,像 JPEG2000 这样的东西,其中文件可以在不同分辨率下逐步下载,将是理想的。
但对我来说很明显,我们需要这两种方案。在 CSS 方面,我们已经具备了这种灵活性,如果采用 image-set,它会变得更好。对于作为内容的图像,特别是 IMG 标签,我们需要类似的东西。
使用新的属性来表示高分辨率和低分辨率图像意味着
– 所有网站都必须添加支持才能使其正常工作
– 至少需要创建每张图片的两个版本
新的 picture 标签也意味着同样的事情。
像 rpng 这样的新格式将
– 需要很长时间才能被网站和图像创建工具采用
创建基于分辨率/连接速度的新媒体查询
– 将需要时间,并且需要大量的测试和完善
我认为最好的方法是不让 Web 开发人员费心这些,而是让移动浏览器开箱即用地提供与 Opera 移动版/迷你版相同的功能。这样,用户可以选择是否想要压缩,有时即使人们使用 Wi-Fi,他们也希望网站加载速度快,有些人可能希望以最佳状态查看照片集页面,即使他们使用的是。
很快,这将不再是一个问题,因为网络速度会越来越快,新的 iPad 的理论下载速度比我的笔记本电脑通过有线连接的速度还要快。
谁说的……Opera?
对我来说,就像 classicc 一样,这不是我们应该费心的事情,而且一些最好的浏览器已经处理了这个问题,首先是 Opera。
嗯,使用 Opera Turbo 和类似服务的弊端是 TLS/SSL 会失效,因此你必须在安全性和功能之间做出选择——即使可以通过在(尚未完成的)HTML5 标准中添加一些内容来解决这个问题。
不要让用户思考,并奖励良好的实践。
为什么不简单地依靠 CMS 来提供图像呢?我知道 WordPress 会创建一些不同的尺寸。我相信有人可以想出一个方法来利用这一点。
@Brian 除非你使用设备检测数据库,否则 CMS 在第一次页面加载时并不知道设备/浏览器的功能。我在 http://blog.cloudfour.com/responsive-imgs/ 中概述了 image 标签面临的挑战。
@Jason – 如果你在考虑设备检测,这就是 Categorizr 这样的资源可以提供帮助的地方——http://goo.gl/SlIZ1
我知道当客户经常将图像上传到他们的 WordPress 网站时,他们会从相机上传原始图像,通常是 jpeg 格式。这通常是一个 2000-3000+ 像素宽的 img,这实际上是一件好事。
有了它,你可以使用 PHP 生成用户上传的原始图像所需的所有图像。你可以生成视网膜显示器的图像、普通“桌面”设备的图像、平板电脑设备的图像,以及移动设备的图像/s。这样,用户就不必做任何额外的工作来创建不同源标签在 picture 元素中的其他图像。
我最喜欢新的格式。它可以向后兼容,就像动画 gif 和动画 png 一样。服务器会确定需要哪个尺寸,然后使用(例如)image/png 的 MIME 类型发送它,覆盖 html 中的 .rpng 扩展名。浏览器只会看到看起来像普通 png 图像的东西。
虽然我个人不太喜欢它,但 picture 元素看起来像是最好的选择。
另一种图像格式并不是真正的答案,开发人员/设计师/等等似乎在优化我们现有的图像选项方面已经遇到了很多问题,而无需再添加一个选项。
还值得记住的是,如果你通过 3G 连接,很多时候你会自动通过运营商的代理服务器,而且很多运营商会自动对图像进行降采样。
为此创建一种格式可以使我们的生活变得更加轻松。
但是,假设现在是 2012 年,我们越来越依赖 js\css 动画,而且我们仍然没有一种图像格式能够将透明度映射和 jpg 压缩结合起来,所以我不抱太大希望。
我对图像格式的最大担忧是,CS5 和其他图像编辑程序是否会接受这种新的格式,以便我可以在我用来编辑图像的软件中创建它们?此外,IE 需要多长时间才能接受一种新的图像格式?我相信 Firefox、Chrome 和其他浏览器会很快采用它,但 IE 可能需要 2 或 3 年,并且会让我们所有人使用 js 和 hack 来让它正常工作。
我对这些东西不太了解,但我正在考虑 HTML5 视频播放器,以及如何必须有 3 种不同的视频格式,Flash 回退,视频链接回退才能覆盖所有浏览器。如果引入一种新的开放图像格式,情况会类似吗?
经过几次尝试,我最终使用了一个 data-responsive 属性 + js 代码来解决这个问题。
优点
不需要 htaccess 或 gd 库
不需要 JQuery 或任何 js 库
它与使用旧 XHTML 浏览器的低端设备兼容
兼容到 IE5
缺点
你必须生成 4 个不同尺寸的图像(240、480、600、800)
我应该写一篇关于它的博文……:)
虽然我对实施新图像格式的障碍一无所知,但我认为以下这些对于新格式的成功至关重要
• 能够将单个图像“手动”打包到一个文件中(例如,对于不同的断点进行不同的裁剪或完全不同的图像,而不是仅仅进行缩放,这仍然应该是默认行为),
• 能够将断点标准委托给一个中央控制器——连接到 CSS 或 JS 查询、外部指令文件,任何东西——以便将控制权(显示什么/何时)掌握在设计人员手中(同样,这应该是格式默认设置的附加功能),
• 能够与不支持新格式的浏览器某种程度上向后兼容——这可能意味着使用花哨的响应式技术扩展当前格式,并保持基本图像可供旧浏览器访问,
• 虽然对于响应性来说不是绝对必要,但我们当然应该希望它具有 alpha 透明度和出色的无损压缩。
再说一次,我不知道这些是否都可行,但如果能将它们都包含在一个闪亮的新格式中将是件好事。
这可能已经被社区讨论过了,但怎么样呢?比如某种新的 CSS 属性?
像这样
(顺便说一下,我在这里使用的是 SASS 语法)
我当然能理解为什么有些人会认为这在某种程度上跨越了样式/内容分离的界限,但从语义的角度来看,我们已经在 background-image 属性中声明了图像源……我知道这不同,但也许在某种程度上语义应该让位于功能?从 SEO 的角度来看,这不会造成任何问题,因为你的回退图像将在实际的 html 图像源中声明(也许在我的代码中指定的图像的移动版本可能不是必要的,但这可能有助于保持断点的清晰定义)。
我不确定这里在性能方面会遇到什么问题……用户什么时候会加载哪些图像……我不知道 CSS 在这方面是如何工作的。
当然,如果用户禁用了 CSS,此选项也无济于事……
好吧,是的……就是这样。我相信这方面存在性能问题,但是什么问题呢?可能还会出现哪些问题?这似乎是一种可行的方案……
……啊,好吧,我突然发现了一些图片密集型网站的严重 CMS 问题
我越是想这件事……
1. 我就越头疼。
2. 我就越觉得用户应该控制这件事,而不是媒体查询。
虽然可能能够计算出设备尺寸,并且将来我们可能能够计算出连接速度以及用户是否需要付费使用数据……但无法确定目的和上下文。
我是在访问摄影师的网站向客户展示他的精彩图片?还是因为我拍摄时间晚了,所以去那里获取他的电话号码?
粗略示例 - http://jsfiddle.net/MerlinMason/LmgdQ/
提供一个 240 像素宽的图片,并在点击它时切换到最佳图片,这不是个坏主意
我实际上是做印刷的,但我将用一些关于可能的全新图片格式的问题来验证“没有愚蠢的问题”理论。
由于网站现在非常灵活,我希望不同设备上的相同图片使用不同的文件类型是目前有利的。例如,假设您使用了透明的 png 图片,但当网站针对其他设备重新构建时,透明度可能无关紧要,而 jpeg 图片可能提供更好的压缩效果。
那么,这种新的文件格式是否像 zip 文件一样,可以让我将任何想要的文件类型导入其中?还是会成为一种全新的图片格式,可以模仿我选择的组合中的当前(以及最终的未来)优势?还是仅仅是同一事物的逐步缩小版本,仅此而已?
我可以想象,这些问题的答案也会影响使用图片的新版本更新这些文件的难易程度。
在我看来,在这种情况下,代码减少带来的好处也可能伴随着灵活性降低。我错了,这重要吗?
我大约 3 个月前就开始开发我称之为 WebHD 的东西,其中我首先加载一个普通的 1:1 图片像素密度,然后隐藏地加载高分辨率图片(在后台),并在加载完成后用高分辨率图片替换低分辨率图片。这利用了视网膜显示屏(如果原始图片大小是两倍,并且使用 CSS 缩小)。
到目前为止,正如文章中提到的,还没有原生方法可以知道您是如何下载内容的(3G 或 Wifi),但这可以加快页面流预览和基本图片的速度。
另一种方法是拥有一个移动版和平板版网站,它们将显示相应的图片。
令人难过的是,其他一切的发展速度都超过了网络跟上的速度。这一切都是因为公司在为标准而战。
我曾经构建过类似的东西,不同的是用户启动了 HD 模式。他们会获得基本质量的图片,如果需要,他们可以点击 HD 按钮来获取更大的图片。
不过请注意,如果您理解正确,您的技术在所有情况下都会加载两个图片。这并不能解决带宽问题,只能让它看起来像性能提高了。
市面上有太多解决方案了,很高兴看到我们的行业真的在认真对待这个难题。:) lowsrc 似乎也是一种非常有趣的方法,但我毫不怀疑,很快就会出现一个官方标准(希望如此)。
对于喜欢 less.js 的人,我在这里尝试了响应式图片:http://forr.st/~VE1(或者你可以直接进入TinkerBin,请记住将 CSS 设置为 LESS。不过需要注意的是,这纯粹是实验性的。也许在一个单独的“images.less”文件中它会很有用,你可以在这里处理所有图片,但 pff…它仍然太繁琐了!
我支持 unicorn.rpng,祝大家复活节快乐!
CSS 用于布局,我不会使用任何基于 CSS 的解决方案来解决这个问题……显然不具有未来兼容性,甚至不具备当前兼容性,因为这在 WindowsPhone(即使是 7.5)上也无法正常工作,WebOS、黑莓 < 5 也无法正常工作。最新的诺基亚 Symbian Belle 浏览器也很有可能不支持。
我更喜欢 pictures 元素……原因如下
1.) 让前端设计人员完全控制哪些图片在什么时候呈现……因为他们可以决定断点
2.) 完全向后和向前兼容……这意味着向后兼容,因为您有一个回退到原始全尺寸或中等尺寸(同样,由您选择)图片文件的选项……并且向前兼容,因为您可以随时返回并编辑断点或删除它们
我不介意额外的语法……当然,它一定比编写复杂的 JavaScript 或命中服务器来自动调整图片大小要少写代码,也更节省处理器资源……
3.) 我假设这个 pictures 元素与 image 元素一样,可以包含任何浏览器制造商为了网络兼容性而商定的图片格式……这意味着它可以处理任何当前或未来的网络图片格式(例如看起来很吸引人的 webP 格式)……
这些只是我的想法……是这里数百个想法中的一个……很棒的讨论……。
如何使用背景图片替换所有图片?您只需在 HTML 中包含一个缩小版本的图片,并根据屏幕尺寸或您喜欢的任何条件(媒体查询)使用 CSS 替换它。
了解用户的连接速度似乎是最难解决的问题。我想知道浏览器是否会采用类似 iOS 应用 SDK 的东西来处理高分辨率图片(即 background.jpg 和 [email protected]),它会为高分辨率屏幕获取正确的资源。然后连接到设备的网页浏览器可以检查是 Wifi 网络还是蜂窝网络,并根据屏幕分辨率和连接情况获取图片。问题是,这会在 Wifi 连接上产生大量额外的 HTTP 请求。
棘手的问题。
假设仅仅因为某人的连接速度较慢,他们就想要低分辨率图片,这不是很危险吗……。
屏幕尺寸对我来说是有意义的,因为为小屏幕下载大图片没有意义……。但如果有人在笔记本电脑上通过 3G 或慢速连接连接,我们是否要假设他们想要降低视觉体验……。也许他们想要,也许不想要……重点是我们不知道……。
@迈克尔·怀特,
我不会根据速度来限制它,而是根据连接类型。Wifi 与蜂窝网络,而不是快与慢。4G LTE 的速度可能比 Wifi 宽带连接快,但 4G 用户仍然可能拥有有限的数据套餐。这意味着即使他们的速度足以下载高分辨率图片,他们也可能没有足够的带宽。用完别人的宝贵数据套餐似乎更危险。
浏览器可能应该提供一个额外的功能,让用户在可用时切换是否下载高分辨率资源。类似这样的功能最适合移动用户。给他们选择权的东西。
我们已经做了几年内容协商了,至少从 HTTP/1.1 发布以来就是这样。标准 HTTP 请求包含指定首选文档类型、字符集、编码和语言的标头。
使用视窗的宽度和高度引入一个新的标头应该轻而易举。而且它将 100% 向后兼容。
要为响应式图片提供服务,目前 JavaScript 解决方案是最好的。它向后兼容,可缓存,并且相当容易维护。它确实需要高级 HTML 修改,但没有任何东西是无法用正则表达式过滤器轻松完成的。
UA 嗅探和 cookie 解决方案都会创建无法(或不应该)被 HTTP 加速器或代理缓存的图片。UA 嗅探技术也很容易出错,并且需要大量维护。
我本来要写这个,但你比我表达得更好,所以谢谢。我认为如果你看看这个帖子,以及所有这些顾虑、警告和问号,就会很清楚,html 和新的抽象格式并不包含最终的完整答案。这是一个页面操作问题,应该继续由 JavaScript 处理。如果存在任何内容协商,则应该通过标头进行。
没错——让客户端告诉服务器它想要什么。除了视窗的宽度和高度之外,我还想添加一个“prefer [low/high] resolution images”的标头。然后,移动客户端可以根据设备是连接到蜂窝网络还是 Wifi 网络来切换这个标头,并允许用户选择“始终低分辨率”、“始终高分辨率”、“自动”。
感谢大家的参与,很棒!
仅供考虑,这里有一个不同的想法……如何使用单个高分辨率图片文件,并使用代理行为文件(例如编解码器)来定义根据设备像素比率或设备宽度(使用 @media 查询)显示多少像素(或多少分辨率)?
你可以把它想象成编辑高清视频,只使用低分辨率的预览来加快重绘速度,或者在 InDesign 布局中预览链接的高分辨率图像。
优点:每个图像只有一个 src 文件,不依赖于 JS,可以在全局或单个图像上设置,不改变 HTML 语法,完全通过 CSS 响应式。
缺点:对于较小的设备,可能会有性能问题,例如在运行时对大型图像进行下采样?
我只是把它抛出来。
有人不能仅仅让**便携式网络图形**变成**渐进式网络图形**吗?
只需更新格式,以便现有应用程序看到默认图像,而支持“渐进式”位的应用程序可以加载不同的尺寸、比例等(无论它们在规范中指定什么)。
嘿,瞧,您就有了优雅降级!:-)
FlashPix 将多个图像保存到一个图像中,我们不想要也不需要那样。我们有一个主图像,对于较小的图像(甚至是缩略图、裁剪版本等),我们只想取其中的一部分并提供它。
我浪费了几个小时来创建不同大小的重复图像,例如缩略图、裁剪等。我希望我可以只在一个 png 文件中指定这些,然后上传它。然后只需使用 img 标签加载它。这可能会在 img 标签中添加一些语法,但只是为了定义要使用图像的哪个版本。
实际上,我认为新的图像语法更有可能成为未来的候选者,尽管它还有很多不足之处。
我主要担心的是,“网络”的大部分内容都不会处理这个问题。根本不会。当然,访问这些网站的网络工匠会带头,但网络的其余部分不会或只会很缓慢地跟进。许多网站处于低维护或无维护状态,有很多自制的 CMS,或者没有 CMS,而所有这些人根本不会创建同一图像的多个版本。我不认为会发生这种情况。
因此,我认为最具自动化的解决方案(通过浏览器智能、新图像格式,等等)将是上面提到的原因的优越解决方案。
顺便说一句,在上面的评论中,我还看到了很多对用户可用带宽的过度估计和错误假设,无论是否付费。将这些假设与内容交付联系起来是一项风险很大的业务。
我个人认为
<img rsrc=”responsive.rpng” src=”non-responsive.png”/>
将是一个很好的折衷方案,只有在“rsrc”不存在的情况下才会处理“src”。
.icns 中不包含多个图像吗?
是否有可能将新的图像格式滚动到图像格式的渐进式增强、“静默”升级中?例如,如果我们可以升级 png,同时保留相同的扩展名,也许我们实际上可以在它们的 url 中传递变量,如下所示
也许可以将其设置为,较旧的浏览器(IE)会忽略这些变量,并像 png 一样提供它?通过将变量传递给新格式,我们还可以更好地控制它的运行方式。也许某种 api 可以让我们选择在不同带宽下发生的事情以及图像对屏幕尺寸的响应程度?
我对图像格式处理不太了解,不知道这些是否可行,但这将非常棒。
timthumb 的当前观点是什么?
http://code.google.com/p/timthumb/
我一直关注这个问题,现在我觉得我们在做很多工作来解决昨日的问题。移动带宽正在迅速增长(尽管数据上限没有,这不可否认),有时甚至高于桌面带宽。如果解决方案只是在这里或那里进行一些调整,我可以看到这种讨论,但我们正在谈论新的图像格式、新的 HTML——这个问题真的值得吗?500K 可以涵盖非常大、非常高质量的 JPEG。与我 3GB 的 iPhone 限制相比,这几乎是微不足道的,即使是小型视频也是如此。
作为一名摄影师,我会根据目标尺寸对图像进行微调和锐化。这将适用于包含多个版本的新图像格式,但现在我们有一个庞大的文件,服务器必须将其拆分。当然可以做到,但是当推出速度很慢时,值得吗?
我认为我们有更大的问题需要解决——也许是更好的多栏文本格式控制;字距和连字控制;各种不涉及带宽或屏幕尺寸的事情。
所以我的解决方案是不担心它;只需继续使用相同的 img 标签。我是不是很懒?我更喜欢使用“务实”这个词,但是对“懒惰”没有强烈的反驳。
一些非常好的观点。如果您使用网页字体和大量 CSS 创建的元素来设计您的网站,那么这些元素在高分辨率显示器上看起来会很棒。如果您希望您的徽标看起来不错,请考虑使用 SVG 图像。JPEG 的照片看起来仍然相当不错,只要它们不包含很多线条艺术。
此外,成为一个懒惰的程序员是一种美德,而不是问题。:)
移动带宽正在迅速增长……
等等,让我澄清一下,移动带宽在美国正在迅速增长……
实际上,让我稍微改动一下,移动带宽在美国的城市地区正在迅速增长……
好吧,现在我仔细想想,移动带宽在美国大多数城市地区都在迅速增长,但并不均匀,这意味着即使在那些据说支持 4G 的地区,人们也可能最终使用缓慢的连接。
4G/LTE 并不能拯救我们,即使它能做到,谷歌、亚马逊、雅虎和微软都记录了性能方面毫秒级的改进如何提升可用性和使用率。
所以您可能不关心从您的网站中挤出额外的性能,但您可能也没有数百万美元的资金与缓慢的用户体验相关联。对于这些公司来说,解决这些问题是至关重要的。
最关心性能的公司之一是谷歌。苹果已经提出了 image-set 来帮助解决分辨率问题,因此他们也在关注这个问题。这两家公司也恰好是 WebKit 的主要贡献者之一。鉴于相关人员,似乎不太可能不会对我们处理图像的方式进行一些改变来解决这些问题。
值得庆幸的是,他们没有等待带宽改进来拯救我们。
我认为你们大多数人误解了 Forrest Tanaka 的观点,我认为他是一个现实主义者。
让我们看看 PNG,它被创建为用于网络和其他数字媒体的更好、更具图像格式的格式。从维基百科来看,PNG 的讨论始于 1995 年,当时网络还处于起步阶段,56k 调制解调器是高科技……现在是 2012 年,仍然有人必须支持 IE6,它不支持完全透明的 PNG……17 年过去了,我们仍然没有对 PNG 的通用支持……到我们有通用支持的时候,看起来我们将在研究另一种图像格式……
对于像谷歌和苹果这样的大型网站,我可以看到为什么要从他们的网站中挤出每一滴带宽……但对于构建小型网站的人来说……我认为 Forrest 想要表达的意思是,我们应该集中精力在其他领域,在那里我们可以立即做出改变……
我个人喜欢为未来构建我的网站……是的,第三世界的人没有高速互联网……但有些人甚至没有互联网……我们是否将网站打印在纸上并分发到全球各地……互联网速度越来越快……手机越来越便宜……五年后,想象一下二手机市场上 iPhone 4 会有多便宜……想象一下我们将在发达世界中使用什么样的分辨率……想象一下我们的互联网连接速度会多快……也许我们今天在这里的速度将可供那些不太发达国家的公民使用……
如果让我选择,我宁愿不开发新的图像格式,而是以类似于视频或音频标签的方式在我们 HTML 中进行多行图像选择……但我相信,在 5 到 10 年内,当我们享受 100mb/s 的下载速度,发达世界获得 5mb/sec 的下载速度时,这场讨论将显得非常愚蠢……
顺便说一句,根据这个页面:http://www.netindex.com/download/2,97/Sudan/ ……苏丹的平均互联网连接速度为每秒 0.97Mbps……大约是我们 1995 年高科技调制解调器在发达世界所能达到的速度的 18 倍……想象一下 17 年后,苏丹和其他发达世界的互联网速度会怎样……
我认为 Forrest 提出了一个很好的观点。
我认为我们需要尽可能地保持简单。我喜欢“rpng”这个想法,它可以始终提供一个受人喜爱的 .png 格式以保持向后兼容性。
鉴于全球有大量的互联网用户使用比我们这些幸运的人更低 (或更低) 的带宽,而我们有高速互联网、本地 Wi-Fi 和无限制的移动套餐,因此必须有一个全球通用的解决方案。
如果这个解决方案比优雅的解决方案更笨拙(至少在一开始是这样的),我认为我们这些开发者(和设计师)应该欣然接受。
您是否会因为知道您正在为全球更多用户提供服务而感到更好?对于那些使用低带宽或古老设备的用户来说,少许(例如)JS 可能是一件小事,可以用来提供更小的文件。
至于解决方案,我不知道它是什么,或者它应该是什么;我只知道定义标准的人和开发浏览器引擎的人需要加快速度,并专注于以适当的方式交付内容。
虽然个人来说,我更希望看到混合/媒体查询标签(内联媒体查询覆盖样式表,就像人们期望的那样)。
这是我在 Rails 应用程序中使用 Cloudinary 服务的解决方案
以上解决方案看起来很难实现——向后兼容性、页面重写或缓存混乱都可能是问题。
有没有什么 CSS 方面的方案?
在 CSS 文件中加入一些服务器端代码,例如
以上列出了服务器将支持的过滤器,其中“none”和“100%”为默认值。客户端在请求图像时,将在 HTTP 请求头中添加过滤器名称和值。可能首先作为“X-…”值,但之后会更标准化,类似于 ETags。
然后,为移动用户设置一个媒体查询,强制调整大小
使用以上解决方案,如果浏览器不支持,影响不大,他们只会获取全尺寸图像,而且会迫使他们升级并支持额外的头部来加速浏览。另外,由于有 HTTP 头部字段,缓存应该能够识别它们并缓存图像的正确版本,在升级之前默认为全尺寸。
以上都是我想到的,如果有遗漏的地方,请告诉我。
我现在正在尝试 Riloadr,这是一个用 JavaScript 编写的响应式图像加载器,我不得不承认,这个库提供的灵活性让我印象深刻。
除了 JS、HTML 和 CSS 之外没有其他依赖,图像组、无限断点,以类似于 CSS 媒体查询的方式工作,回调、延迟加载……简而言之,它是我迄今为止尝试过的最完整的工具,而且它真的有效!
@Chris:你试过它吗?https://github.com/tubalmartin/riloadr
我不会使用 UA 探测,因为它很难维护,可能无法匹配你预期的所有设备/浏览器。
大多数解决方案不依赖 UA 探测,所以我建议你使用不同的方法,使用一些知名解决方案,或尝试一些新的解决方案,比如 Riloadr (https://github.com/tubalmartin/riloadr) 或 foresight.js (https://github.com/adamdbradley/foresight.js)。
我只想说,许多手机的浏览器都提供低、中和高分辨率图片选项。Opera Mini 就是一个例子。Chrome 也可以实现这一点。但是,在某些智能手机浏览器中,这是一个严重的问题。同时,帮助我的读者对我来说很重要。这就是为什么我会使用你添加的以上代码片段。感谢分享。
我投票给老的 img 标签中添加一个新的 highsrc 属性。
甚至考虑采用新的图像文件格式也相当不切实际。正如其他人指出的,我们仍然使用 iepngfix 在 IE6 中获得正确的透明度支持,这是 PNG 设计 17 年后的事了。浏览器和图形工具对新图像格式的采用和调试速度非常慢,对于像这样重要的、时间敏感的问题来说,速度太慢了。(我们有多少人正在 iPad 3 上阅读这篇文章,嗯?我们需要一个标准化的解决方案,现在就需要)。
一个新的图像文件格式,在一个文件中包含多个版本,也不利于缓存(在浏览器中,在网络路径中透明,在服务器端使用 CDN),而缓存对于性能至关重要。简单有效的缓存是最重要的。
从长远来看,提议的 标签可能值得拥有,并提供了一种很好的通用解决方案,解决了核心问题,假设浏览器足够智能,不会在非常慢的连接上选择一个非常大的版本,并且希望用户可以在设置中控制该决定。我支持 ,但是……
那么为什么不直接将这个常见情况添加到老的
标签中,作为一个新的名为 highsrc 的属性,其行为定义为
1) 浏览器可以在任何时候选择将 src 设置为 highsrc 的值。这通常会在高 DPI 系统上进行初始页面加载时发生,除非用户在浏览器的设置中将其关闭。但它也可能在加载初始 src 图像之后发生,如果链接速度较慢但并非太慢,此时值得首先加载普通图像,然后在背景中替换,因为高 DPI 图像在空闲时间进入。
2) 如果 JavaScript 代码设置了 src,则这也会隐式地将 highsrc 设置为相同的值。JavaScript 在设置 src 后需要显式设置 highsrc,例如在高 DPI 悬停时,以确保安全和简单,并且不会破坏任何现有的脚本,同时允许轻松采用新属性。
我个人没有看到这种方法有任何明显的缺陷。它以一种简单、简洁的方式在 HTML 中声明了可用的版本,然后它将决定权交给浏览器,这似乎是正确的位置。这意味着用户可以通过浏览器的设置进行输入,并且可以考虑当前的链接速度。因此,如果用户按 MB 计费,他可以关闭高 DPI 图像,就像他今天可以在大多数浏览器中关闭所有图像一样。在慢速链接上,浏览器可以自动适应,或者使用某种用户设置来帮助——我个人会提供一个简单的设置,比如“不要加载超过 X 秒的高 DPI 图像”。
简单。易于理解(和教授)。易于在今天的浏览器中快速实现。易于标准化。不会破坏任何现有的页面或代码。
如果有人在他们的响应式布局中使用 WordPress,你可以查看我编写的一个小插件,它可以通过 PHP 提供移动图像。
对于我们现有的标准来说,我认为服务器端解决方案是最好的方法,尽管需要依赖用户代理字符串,这不像浏览器宽度那样高效。
如果有人有兴趣,这里有一个链接
http://www.spaceheadconcepts.com/blog/wordpress/responsive-images-responsage/
是的,我同意。PHP 是一个比较好的解决方案,因为它可以在服务器端进行图像调整大小……考虑到网页设计师创建 3 个或更多图像大小的不切实际性……而且 CMS……在我看来,这条路不太好走……所以,是的,服务器端 PHP 调整大小看起来不错。
我正在尝试开发响应式网页应用程序,它是分辨率无关的。
我想知道我可以使用哪些单位来表示 div 的高度。
目前我正在使用百分比(%)单位来表示宽度和高度,但它并不总是有效,例如:在浮动 div 和相对定位的 div 的情况下。
但是,当我使用像素单位来表示高度,使用百分比(%)来表示宽度时,它可以正常工作。
这是一种正确的方法吗?
关于响应式图像 polyfill,请查看这个脚本。它与 Scott Jehl 的 picturefill 做的是完全相同的事情,但它使用了一种面向 JSON 的方法,并且更好地支持 IE8。https://github.com/verlok/picturePolyfill
这会是服务器端脚本的潜在功能吗?就像“renderOptimum”这样的函数,它会获取 300dpi 分辨率的目标图像,并将其渲染为适合用户的分辨率?快速与质量的偏好可以通过提示用户或通过代码覆盖来确定;如果他们的连接被检测为“缓慢”,但他们的像素比率大于 1。