堂主 - WEB前端开发

专注于互联网 | WEB前端开发 | 以用户为中心的体验 | 家是圆心 | Code is art !

IMG Sprite:针对高对比度模式的优化技巧

Tags : 译文   重构   体验     0 comments

原文地址:http://www.artzstudio.com/2010/04/img-sprites-high-contrast/

堂主译文地址:http://www.osmn00.com/translation/222.html

转载请尊重原作者及译者劳动,附带以上信息,谢谢合作~

前注:高对比度模式是一种Windows系统设置主题,其意是为了保证视力受损用户查看信息的方便。
它通过使用对比鲜明的色彩和字体大小提高文本的可读性。高对比度模式下网页的背景默认会变成全黑。

-------------------- 分割线,以下是正文 --------------------

CSS image sprites是一项用来减少网页中图片HTTP请求数的技术,但因其会导致在windows高对比度模式下图片消失的问题,故其导致的web应用性能的提升和对无障碍体验被破坏之间的矛盾正逐渐引起大家的关注。导致这一问题的原因是这一技术通常是应用CSS的“background-image”这一属性来创建的。

为了证明这个问题,我们在高对比度模式下浏览一些当下的知名网站(上面的是普通模式,下面的是高对比度模式):

 在Google Video中,前后选项的按钮消失了:

google-video.png

在雅虎法国的网站中,导航项和按钮消失了:

yahoo-finance.png

同样在Facebook、亚马逊和AOL音乐中,LOGO也消失了:

facebook.png

amazon.png

aol-music.png

同样,流行的内容共享服务的按钮也没了:

addthis.png

Sprite技术的使用的确为更多网站的优化加载速度的体验贡献甚大,但我们要承认,这个过程中我们忽略并损害了使用高对比度模式用户的体验。

<img> Sprites 的介绍

 在对应用了新的企业标识文字的图形化标题(图片展示标题)的AOL.com的新的设计中,我决定尝试多年前就想过却一直没使用的东西。

由于<img>元素可以在高对比度模式下显示,那么为什么我们不可以通过裁剪图片的方式来完成我们想要的效果呢?

这个案例中我们的图形化标题的HTML结果是下面这个样子:

<h2 class="popular"><img src="img-sprite.png" alt="" />Popular</h2>
<h2 class="featured"><img src="img-sprite.png" alt="" />Featured</h2>

我们把alt属性值设置为空以便屏幕阅读器可以越过它们,我们在标题中写了如“Featured”这样的文字以便搜索引擎可以知道这部分是关于什么的(这可比在alt里添加来得实用)。

下面的是我们要设置的CSS:

h2 {
  	overflow: hidden;
  	position: relative;
  	height: 50px;
  	width: 200px;  
}  

h2 img {
  	position: relative;  
}  

h2.popular img {
  	top: -100px;  
}  

h2.featured img {
  	top: -200px;  
}

不解释了,相信大家一眼就能看明白这是怎么回事。

关于测试环境

有2种方法进入高对比度模式

【一】带有强迫症性质的按部就班法:

  1. 开始菜单 -- 控制面板
  2. 打开辅助功能选项
  3. 点击“显示”
  4. 勾选“使用高对比度”
  5. 确认

【二】懒人万岁的快捷键:

左Alt + 左Shift + Printscreen

<img> Sprite 实例

下面是2个案例,一个是CSS Sprite技术,一个是<img> Sprite技术的,2种模式下都Look Look,做一个“找不同”的小游戏。

CSS Sprite demo

<img> Sprite demo

已知的应用限制

这项技术应用的前提是图片要放置在块元素或者设置了“display: block”属性的内联元素中。<img>在下列元素中时不起作用:

<fieldset> , <legend> , <input> , <button> , <table> , <tr> , <td> , <th>

测试所用的浏览器版本是IE6+,Firefox 3.5+,Chrome和Safari 4+,并且估计在所有现代浏览器下都没问题。

高对比度模式检测

Chris Blouch 还在AXS的无障碍JS库中创建了一个高对比度模式检测的模块,如果你的网站目前已经遇到了这方面的问题并且想改进它,可以在下面的地址获取这个库更多的信息:

http://dev.aol.com/downloads/axs1.2/readme.html#hd

更牛叉的:它能支持打印设备

很多人都在抱怨使用背景图技术的CSS雪碧对打印设备支持的糟烂,而这里的<img>雪碧技术就没这个问题。

CSS Sprite技术打印出来的:

css-sprite-print.png

<img> Sprite技术打印出来的:

img-sprite-print.png

延伸阅读:

Thierry Koblentz 的 http://tjkdesign.com/articles/how-to_use_sprites_with_my_Image_Replacement_technique.asp 文章,他的对图片设置“width="0" height="1"”的应用使得浏览器在禁用图片的情况下依然可以友好显示内容

渔隐的http://nunumick.me/blog/tag/img-sprites/文章,中文的,说明了<img> Sprite的优势和不足的情况。

 

参与讨论

*

*