针对特定环境的图片技术

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 价值$200的免费赠送额度!

使用 CSS 媒体查询作为移动解决方案的唯一组成部分的缺点之一是,相同的内容会提供给台式机浏览器和移动设备(理论上移动设备速度较慢,网络速度也较慢)。

为两者提供相同的 HTML… 这不是什么大问题。 提供比移动设备上需要的尺寸大好几倍的图片,这才是问题所在。 许多聪明的人试图解决这个问题,因此我只想在这里重点介绍一下他们的工作:

CSS3 方法

虽然这个 由 Nicolas Gallagher 编写的方法 **目前在任何浏览器中都不起作用**,但我认为它是我最喜欢的。 您将最小的图片作为默认源,然后将指向较大版本图片的 URL 路径列出为 HTML5 数据属性。

<img src="image-mobile.jpg"
     data-src-desktop="image-desktop.jpg"
     alt="">

然后使用 CSS 生成的内容通过媒体查询,如果屏幕宽度表明是台式机,则使用较大版本图片替换图形。

@media (min-width: 1024px) {
    img[data-src-desktop] {
        content: attr(data-src-desktop, url);
    }
}

即使是 当前 CSS 规范的开发版本,它已从 原始版本 中大大精简,也保留了这种功能。

Nicolas 在 他的文章 中清楚地概述了这种方法的潜在缺点,我认为每一个缺点都可以在未来的技术中得到解决。

JavaScript 方法

虽然上面提到的 CSS3 方法目前只是理论上的,但 这种 JavaScript 技术Scott Jehl (来自 Filament Group ) 开发,已经可以投入使用(即使仍然处于实验阶段)。

这项技术实际上是 JavaScript、HTML 和 .htaccess(仅适用于 Apache 服务器)的结合。 Readme 文件中对它的解释最清楚。

一旦 rwd-images.js 加载,它就会测试屏幕宽度,如果宽度很大,它就会在您页面的头部插入一个 BASE 元素,将所有后续图片、脚本和样式表请求定向到一个名为“/rwd-router/” 的虚构目录。 当这些请求到达服务器时,.htaccess 文件会确定请求是否为响应式图片(它是否带有 ?full 查询参数?)。 它会立即将响应式图片请求重定向到其完整尺寸,而所有非响应式图片请求都会通过忽略“/rwd-router/” 部分的 URL 重写,定向到其适当的目标。

Cookie 方法

Keith Clark 有一种方法 可以存储一个包含当前设备屏幕尺寸的 cookie。 在提供图片之前,可以测试该 cookie,并用它来决定提供哪个尺寸的图片。

它通过设置一个包含屏幕尺寸的 cookie 来实现。

document.cookie = "device_dimensions=" + screen.width + "x" + screen.height; 

然后图片实际上是通过一个简单的脚本进行路由的。 文件名是一个参数。

<img src="images/?test.png">

脚本会读取 cookie 并提供合适的图片。 查看 完整文章 以了解所有代码。

还有其他方法吗?

您是否见过其他试图解决这个问题的项目? 我希望能够将这篇文章更新为最新的最佳方法。