使用html css 技巧改善网站的无障碍访问

前阵子,在奇舞团重构营分享了 Ivo Gomes 的《HTML/CSS tips to improve the accssibility of your websites》,抽空翻译了下,不当之处还望见谅,感谢!

为什么我要关注无障碍阅读

无障碍阅读是什么?

  • 无障碍阅读是为盲人等残障人事服务的;
  • 无障碍站点本身是极其枯燥和乏味的;
  • 无障碍阅读的实现成本较大、困难众多;
  • 只提供文字版本是远远不够的;
  • 无障碍需要我们去做相关的验证;
  • 我们要保证读屏设备的无障碍可访问性,如果它能运行良好的话;

嗯,那我该怎么做呢?

1、增大你的字号

不要使用过小的字号(10px、12px);

尝试使用16px,甚至更大的字号;

小贴士:尝试距离屏幕一米远,然后去阅读你的站点,看文字是否能够看清。

2、使用相对单位的字号

请注意样式的继承。

如图所示:body下的元素 h1 最终字号将是:2*1.6=3.2

推荐的方式:

3、增加行间距


如图所示:行间距太小,阅读起来好吃力;


增大行间距的效果,赞!

4、提供跳转链接提示

提供跳转链接提示可以帮助用户快速跳转到目的地,无需用户逐个点击去探测将要跳转到哪。

大多数开发者可能会选择隐藏跳转提示,其实这个也不能完全说是不对的。

通常我们所使用的隐藏跳转提示的方法:

推荐的方法


如图:给予跳转前的提示,告之用户该链接会将他带向哪里。

5、正确使用表格

如果你必须使用表格(仅仅是为展示数据),那么请务必保证正确使用。

为表格定义一个summary和caption标签

用th标签来定义行、列的头部;


最终效果如图所示

6、不要移除链接的外边线

依靠键盘来导航的用户需要知道此时哪个链接获取到了焦点(focused)

因此,千万,千万不要移除这个线,尽管它看起来跟凤姐似的。

我知道,你肯定要说:这个太丑了,产品说:….

好吧,你可以移除这个线,但仅仅是在active状态下可以这么做!

7、不要创建一个空链接

无论到何时,请确保你的链接内有文本,这个很重要!


千万不要这么做!

7、显示链接的目标

你应该显示该链接将在一个新窗口打开,或者跳转到一个非html文档,例如word,ppt等。

高亮显示链接将在新窗口打开


你也可以使用实体符替代图片来实现


我们也可以为非html文档添加一些有意思的提示


也可以为外部站点做一些相关描述


最佳实践:如上图所示

8、更多的链接提示

当我们使用大块的链接时,务必保证最重要的信息优先展示出来。

当我们使用javascript触发链接时,应该为链接提供一个 href

9、无鼠标导航

当用户不使用鼠标或无法使用鼠标时,提供一个导航反馈。

这其中包括使用键盘做导航,用手指操作的触摸屏,或者其他的一些设备。

提示:使用:hover的同时,也使用:focus

提示:在IE7及之前的版本都支持active状态,从IE8开始IE支持focus状态。

10、段落间距

确保两个段落间有足够的间距;正如之前所说的增大行间距一样,这个技巧可以很好的提升文本的可阅读性。


额,估计你看不出这里是两个段落


优化后的效果,清晰易读。

我们应该一直为段落使用p标签,尽管看起来很傻。我们经常会看到这样的代码:

11、检查色彩的对比度

检测页面前景色与背景色的对比度。这里有一个谷歌的色彩检查对比工具http://snook.ca/technical/colour_contrast/
colour.html


如图所示:它会将你所输入的颜色做分析比对,并给出相关建议。

12、关于alt属性

alt属性为图像提供了一个额外的文本信息。但这个并不意味着你必须给所有的图片都要添加这个属性。

如果它是一个空白图片的话,那么它还是一个很不错的方案。


当该图片与文本相关联时应当添加alt替代文本。


如果图片是无关紧要的,此时alt也应该有,但可以是空白的。

13、关于title属性

title属性应该被用来为页面上的元素提供一些额外的信息。因此,停止复制链接内的文本到title属性里吧!


屏幕阅读器会将该链接文本阅读两次。

正确使用title属性:


title属性应该提供一些额外的信息,它将不会很快的在屏幕上显示。

14、为标题使用H标签

html中的标题标签共分h1-h6六个元素,他们非常有用,尤其是在一些看起来很适合用标题标签的元素上。

每一个文档应当有一个逻辑结构,层级间不能跳跃。

主内容区域应该有一个一级标题,每一个文档内只允许出现一个h1标签。

* 我们可以使用多个H1标签,但只能用在内容的标题上。

标题元素应该有一个树形结构

16、使用lang属性

屏幕阅读器的使用者需要知道这个文档是用哪个语言来书写的,否则他们将会使用默认的英语来阅读每个文本。如果这个站点不是用英文写的,那么,你能想象它读出来会是什么样的…

如何使用lang属性呢?

例如这段代码就告诉我们这个站点是以葡萄牙语书写的。


这个是用英文写的单词或者词组。

16、标注背景颜色

请记得给元素应用背景图片的时候加一个背景色。

如果背景图片加载失败,文本可能会变得很难阅读。

但是,如果我们添加了一个背景色情况就会得到改观。

因此,我们通常需要添加一个背景色,以此达到平稳退化。

17、书写一个有用的页面标题

页面标题是当我们搜索一个页面或者站点(通常是在搜索引擎上、或者浏览器上的选项卡工具条、或者收藏夹菜单)时首先你会看到的东西。

我们可以将标题做一个调换,将文档标题放置于首位,站点名称放置于尾部。这样做可以让标题在收藏夹、浏览器选项卡、搜索结果页上优先显示出来。


这里有一些简单的规则

使用一些分隔字符来做区分。例如使用“ – ”或者“ | ”

标题是写给人看的,不是写给搜索引擎看的。

不要将关键词或者面包屑写到页面标题中。

18、在表单中使用label标签

使用label元素提高表单元素的可访问性。

我们可以通过一些内在的联系从而更好的控制表单元素,例如给label元素的属性for设置与表单元素id属性相同的值。

利用label增加元素的可点击范围


如图所示,没有添加label的元素可点击范围很小。


使用label关联后的点击区域明显增大。

19、将表单元素分组

使用fieldset和legend元素将表单元素分组。

如果你只是想要让页面内容外围有一个边线环绕着,那么请不要使用fieldset元素。

使用fieldset和legend元素来控制逻辑上相关的表单控件,请将它们结合在一起使用。

在屏幕阅读器朗读这些文本前,请确保文本足够简练、确保legend和label文本配合使用时能够正常工作。

使用group元素

使用optgroup元素进行下拉框内容分组筛选。

20、增大按钮

确保你的按钮有足够大的点击区域。过小的点击区域需要极大的点击成本,用户必须精确的点击到按钮上才能完成操作。我们可以通过增大按钮的点击区域使他们能够更好的操作。

………………………………………………………………


上图为盲人使用的屏幕阅读设备。

如果你将站点设计的足够友好,残障人士都可以正常访问,那么,你同样也可以做到让其他人更好的使用和访问。

写在最后:以上几点中有很多是和大众版开发几乎完全相同的,个人感觉还是有很大的借鉴空间。也许你会觉得做无障碍阅读很费事且没有太大的实际意义,但“勿以善小而不为”,多一份爱心,就多一份和谐,愿我们生活的世界不再是那么冷漠!

由移除input元素获得焦点后的边线样式想到的

今天同事问我:如何移除webkit浏览器下 input 元素获得焦点后的默认样式?

input获得焦点时的边线

如图所示:当鼠标未在input框内点击时,我们通过样式给它定义了一个边框。当我们在输入框键入文字(即获得焦点focus)时,在 firefox和chrome 、下input 输入框加了一个带颜色的线框。

firefox chrome input focus border

在实际工作中,设计师会美化input,那么为了实现设计稿的美观性,我们就不得不干掉这个边线。

Css 属性 Outline 可以用来控制这个环绕在input 周围的这个边线,代码如下:


.noFocus:focus {outline: none;}

此时,输入框获得焦点时边线消失了!

其实,我个人对于移除焦点边线是极度反对的,正如我很讨厌模拟很多原生态元素,例如input file;

原因很简单,看似美观的设计却忽略了一个极为重要的理念:无障碍设计(barrierfreedesign)

这个概念名称始见于1974年,是联合国组织提出的设计新主张。无障碍设计强调在科学技术高度发展的现代社会,一切有关人类衣食住行的公共空间环境以及各类建筑设施、设备的规划设计,都必须充分考虑具有不同程度生理伤残缺陷者和正常活动能力衰退者(如残疾人、老年人)群众的使用需求,配备能够应答、满足这些需求的服务功能与装置,营造一个充满爱与关怀、切实保障人类安全、方便、舒适的现代生活环境。

无障碍阅读

W3c从1997年2月就推行无障碍网页倡议(WAI),可惜并没有多少人注意它,因为无障碍网页涉及的方面比较广。有多少人听到“盲人也会访问网站”就想笑呢?其实这里所指的残障人士不仅仅是指盲人,其实也包括电脑本身。键盘进水、鼠标不能用等等,都属于残障时刻。

当你看不到光标在哪里,此时你就是盲人;当你的键盘不能用,你就少了一只手;你所需要的反馈全部消失时,你是不是很惊慌?我们顾此失彼的去做一些事情,却不成想给别人造成了很大的困扰。好心办错事,是我们最不想看到的!

所以,在web交互设计中,我们需要给用户一个及时的信息反馈,告之用户当前在哪里、状态发生了哪些改变是很必要的。

关于元素水平居中

在日常重构工作中,水平居中一个已知宽度元素是相当容易的:

我是小强
.element{width:960px;margin:0 auto;}

但业务总是变化的,如果页面中的元素是不固定的,也就是说元素的总宽度随时会变化依然要实现水平居中,之前的方案就无法生效了。

其实,css还是足够强大的,尤其是它的多态性,多种效果组合之后就会实现很多你想要的结果:

不定宽度的元素水平居中

html:

  • 我是小强
  • 我是小强
  • 我是小强
  • 我是小强

css:

.demo-1{clear:both;position:relative;left:50%;float:left;}
.demo-1 .inner{position:relative;left:-50%;text-align:center;}
.demo-1 li{display:inline;}

浮动元素水平居中

html:

pattern-1:position + float

按钮1
按钮2

css:

.demo-2{position:relative;left:50%;float:left;}
.demo-2 .btn{display:inline;position:relative;float:left;right:50%;width:100px;height:26px;margin:0 2px;background-color:green;text-align:center;line-height:26px;}

pattern-2:display:table-cell;

html:


css:


.demo-3 {display:table;margin:10px auto;padding:2px;border:1px solid #000;white-space:nowrap;}
.demo-3 ul{display:table-row;white-space:nowrap;}
.demo-3 li{display:table-cell;}
.demo-3 a{display:block;padding:4px 10px;border:1px solid #ff0000;background:#ffffcc;text-decoration:none;}
.demo-3 ul a:hover{background:red;color:#fff;}

pattern-3:inline-block;

html:


css:

.demo-4{text-align:center;}
.demo-4 ul{display:inline-block;*display:inline;zoom:1;}
.demo-4 li{float:left;}
.demo-4 li a{display:block;padding:4px 10px;border:1px solid #ff0000;background:#ffffcc;text-decoration:none;}
.demo-4 ul a:hover{background:red;color:#fff;}

Demo is here !

写在最后:实现方案大概就这么几种,其实未知宽度元素浮动元素的水平居中实现思路大致相同。由于浮动所产生的问题较多,个人比较推荐inline-block的方案(请注意inline-block的空隙问题),具体采用哪个我们还是依项目再定吧!

滑动门那些事

滑动门在页面重构中是一个使用较为频繁的技巧,该效果帮助我们实现了元素背景图自适应宽度的需求,实现方法相信大家已经烂熟于心。

滑动门原理

上图为滑动门实现原理:通过标签组合,利用背景图叠加呈现出一个自适应的按钮。

近日在做项目时,邂逅几个特异化场景,发现布局方式、拼图方式的不同会导致布局的实现有所差异,于是借机对其做了一番小小的整理。

模式一:对齐方式a(0,0) 、span(100%,0);

拼图方式:整张;

拼图模式:整张

Html
我是Bug
我是小Bug
我是迷你强
Css
.demo-1 a{float:left;height:31px;background:url('http://p1.qhimg.com/t01a507c07037ac43e0.png') no-repeat 0 0;padding-left:16px;line-height:31px;}
.demo-1 a span{float:left;background:url('http://p1.qhimg.com/t01a507c07037ac43e0.png') no-repeat 100% 0;padding-right:16px;}

优点:图片体积小;
缺点:父子层背景图会出现”重叠“现象,即通过透明部分会看到底层的图片,右侧圆角消失;

背景图覆盖

优化:添加当前上下文背景色(如demo中所示的body背景色#999;)

.demo-1 a span{float:left;background:#999 url('http://p1.qhimg.com/t01a507c07037ac43e0.png') no-repeat 100% 0;padding-right:16px;}

拼图方式:拆分;

拼图模式:拆分

优点:无背景图“覆盖现象”,即无需添加背景色;
缺点:图片体积略大;

Demo is here

模式二:对齐方式:a(100%,0) 、span(0,0);

拼图方式:整张;

拼图模式:整张

Html
我是一个按钮
其实我也是!你呢?
偶也似,噢卡卡!
Css
.demo-1{background-color:#000;}
.demo-1 a{display:inline-block;padding:0 20px 0 0;background:url('btn.png') no-repeat 100% 0;line-height:70px;}
.demo-1 a span{display:block;padding:0 0 0 20px;background:url('btn.png') no-repeat 0 0;}

问题一:父子层背景图叠加;

有同学说直接将周围背景色切进图中(丢弃透明效果),问题似乎能解决。

可一旦周围背景色发生变化,该图就会露出马脚,囧!

解决方案:老老实实搞Png, 添加周围背景色(例如本demo中的#000);

问题二:当上下文背景为渐变色方案一(添加上下文背景色)失效,囧。

背景为渐变色

好吧,换个思路再来一次!

拼图方式:拆分;

布局方式:多层嵌套;

html

Css:
.demo-3{padding:30px;background:url('http://p1.qhimg.com/t01e236ac520ba7aed0.png') repeat-y;}
.demo-3 a{display:inline-block;height:64px;padding:0 12px 0 0;line-height:64px;background:url('http://p6.qhimg.com/t012d58b051d01c767b.png') no-repeat 100% 0;}
.demo-3 a span{float:left;padding:0 0 0 12px;background:url('http://p6.qhimg.com/t012d58b051d01c767b.png') no-repeat 0 0;}
.demo-3 a i{float:left;background:url('http://p6.qhimg.com/t012d58b051d01c767b.png') repeat 0 -65px;font-style:normal;}

Demo is here

以上,希望能对您有所帮助!

(转)设计好脾气的Web页面

随着技术的进步,Web设计的理念与技法也在不断发展。设备种类越来越多,带给我们的挑战也越来越大。怎样以最合理的方式使设计方案能够最大程度地适应各种设备的性能与规格属性,这是我们在工作当中必须考虑的问题。

面对这样的挑战,我们一方面会觉得自己曾经熟悉的工作领域突然充满了未知感,而另一方面,一直普遍存在的那些旧问题也依然摆在面前。我们是否需要花费全部精力用来解决各种新旧细节问题,还是可以从宏观上寻求一些具有指导性质的“真谛”?

Web设计的历史过于短暂,要想弄明白一些大道理,我们不妨将视野放远些,让思路跨越设计的范畴。其实,我们真的可以从那些看上去与设计没有多大关联的领域中找到一些抽象化的、更具普遍意义的思路和模式,以帮助我们解决自己的问题。心理学和音乐等都是我们可以加以研究和探索的对象。接下来,就让我们一起了解一下巴赫与当前Web设计所面临的挑战之间的关系。

巴赫与“好脾气的克莱维尔”(十二平均律钢琴曲集)

1722年,巴赫创作了一部包括48首前奏曲与赋格(24个大小调)的钢琴曲集,主要用作培养年轻音乐家的教育素材。这套曲集是西方音乐史中最重要的作品之一,影响极为深远。巴赫本人将它命名为“好脾气的克莱维尔(The Well-Tempered Clavier)”。

为什么这部曲集具有重大的历史意义呢?要知道,在巴赫所处的那个时代,在键盘乐器上使用全部调式演奏曲目并不是一种很正统的做法。从物理学的角度讲,具有固定音调的键盘乐器一次只能演奏几个特定的调式。对于那个时代的调音系统来说,要在钢琴上弹奏出全部12个调式,几乎是一件不可能的事情。

物理定律是很难被突破的,但人的感知是可以被改变的,解决方案就是重新定义“合调”的概念。某些音程在被调整之后会与标准的音准产生微小的偏差,从而产生了一个新的调音体系,使人们可以弹奏全部曲调。这种为了构筑更合理的系统而调整其组成要素属性特征的能力,就是一个系统的“脾气”。

巴赫的平均律对自然律进行了修正,将八度音程分为十二半音的调律法,以便于转调。这种方式自然可以被称为“好脾气”,它就像是古典音乐中的实用主义。

Web设计中的好脾气

Web设计面向的目标设备正在由单一发展为多元,这也许是最近一两年里最令人激动,同时又是最令人焦虑的事情了。这不再是关于样式能否在不同浏览器中保持兼容的问题,我们在新局面下面对的是各种方面的因素:不同的设备、不同的屏幕尺寸、不同的使用环境、不同的系统平台所具有的UI风格等。

虽然响应式设计(什么是响应式Web设计?)或是针对指定设备进行设计的思路都可以在一定程度上帮助我们面向不同的环境调整外观形式及体验方式,但不是所有的UI元素或模块都可以被赋予弹性,我们仍然需要在很多地方使用“固定”的全局化设计方案。这时,“好脾气”的思路就可以帮上忙了。具体的实践原则很简单明了:为了让设计方案在一系列不同类型的设备中都能产生最好的用户体验,我们需要对界面中一些关键性的UI元素做出不同程度的折中调整,使整个页面对于环境的适应能力更强。

触控优先

最近,越来越多的桌面版本网站当中开始出现具有触屏设备UI风格的界面元素,这种做法很好地体现出了“好脾气”的设计思路。在触屏移动设备当中,我们需要通过手指对界面当中的交互对象进行直接操作。比起传统的鼠标指针,手指触控方式需要的目标作用区域更大。考虑到这一点,我们应该适度地增大页面当中一些重要交互元素的尺寸;同时,为了保持视觉上的平衡,我们还需要对相关元素之间的间距及它们各自的内边距进行调整。

举个简单的例子,Google在其新版UI当中明显地增大了“写邮件”按钮这类重要交互元素的尺寸;同时,诸如导航菜单、工具栏、邮件列表等界面元素,在间距留白等方面也有做相应的调整。相比于过去,新版设计方案显著地提升了Google的这些主线产品对于触屏操作的友好性。

从某种程度上讲,iPad在触屏移动设备与传统桌面设备之间架起了一座桥梁,它的普及提升了触屏设备UI风格在桌面设备当中的影响力。看看Gmail和Twitter这类主流产品在最近的改版,或是花时间到那些CSS网页设计案例集当中浏览一下最新的优秀作品,你会发现当前的Web设计风格看上去确实和以前不大一样了,它们看上去似乎更加的…丰满。留白更多,按钮更大,一切看上去都又大又平。不过我们也必须承认,这种现象与桌面显示器不断增大的尺寸也有一定的关联。

在这类设计方案当中,界面元素所占据的空间对于鼠标指针来说显得有些许浪费了,但对于手指触控的方式却恰到好处。这也正是“好脾气”的设计思路的核心思想,即为了使界面能够适用于更多的平台环境,而对“标准化”的设计方案进行微调,最终达到一种折中的状态。

此外,我们之前的又是为了触屏移动设备而设计一文也可以在触控体验设计方面为大家带来一些参考。

响应式设计方案

市面上有很多关于这个话题的讨论,不过它们大多是围绕着各种相关的开发技术来进行的。其实,“响应化”本身不是目的,我们真正需要的是一种机制,它能够帮助网站根据不同的设备平台对内容、媒体文件和布局结构进行相应的调整与优化,从而使网站在各种环境下都能为用户提供一种最优且相对统一的体验模式。

响应式方案离不开全局化的用户体验设计。正像我们在前文当中提到的,这类方案固然可以在一定程度上帮助我们面向不同的环境调整设计方案,但不是所有的UI元素或模块都可以被赋予弹性,我们仍然需要在很多地方通过“好脾气”的设计思路权衡出一种最优的全局化解决之道。在这方面,波士顿环球报(“Boston Globe’s)的网站就是一个不错的例子。

各位可以试着使用不同类型的设备来访问这个站点,或是直接在桌面设备中不断调整浏览器窗口的尺寸,以观察页面的响应化调整规则。

响应式策略可以使同一套设计方案适应于各种类型的显示设备,用户甚至可以通过老旧的苹果Newton掌上电脑来浏览波士顿环球报的页面。不过,这不只是前端开发方面的成就,实际上,这种策略所体现出的具有高度适应性的设计思路才是最重要的。

我想,如果我们只需要面向桌面设备进行设计,那么最终的方案应该是更加纯粹的,包括视觉效果及交互体验等方面。毕竟,在这种情况下,我们拥有足够的时间和资源来使一种设计方案尽量趋于完美。一旦要考虑到不同类型的设备环境,我们就必须做出某种程度的权衡,以便“弹奏出全部调式”。

有兴趣的同学不妨参考我们之前的相关文章,对响应式Web设计的概念及实践方式进行深入了解:

移动优先的设计

之前的话题主要偏向于页面的视觉设计。其实,“好脾气”的设计思路同样可以体现在产品设计、用户体验、信息架构等诸多方面。接下来让我们来看看产品设计当中的移动优先策略。

在这个概念里,我们会从移动的角度入手开始产品设计工作,并始终围绕着移动平台的软硬件特性来打造最符合移动设备上下文环境的产品基本功能。正如Luke Wroblewski在《移动优先》一书中所说:

如果一个团队以移动优先为策略原则开展设计工作,其产品最终所带来的体验将是具有高度的任务驱动性的。用户可以将注意力聚焦在需要完成的关键任务当中,而不会被传统风格的桌面版本网站产品当中过多的无关因素所干扰。这对于产品的用户体验及业务发展都是有好处的。

对这种设计策略进行扩展,使其超越移动体验的范畴,并上升到整个产品的层面,我们就可以在它身上发现很明显的“好脾气”特征。Twitter最近的一次改版当中就很好的体现出了这方面的概念。

Twitter这轮改版的一个主要目的就是在不同类型的设备当中实现具有一致性的体验模式。保持界面外观的统一只是其中的一个方面,更重要的是能否在整个产品体验的层面上实现这一目标。移动优先的设计策略可以保证相关的工作能够朝着正确的方向前进。

我们可以在Twitter的这次改版当中很明显的感受到移动化的体验模式对于整个产品设计方案的影响作用。例如其客户端底部的“Home”、“Connect”、“Discover”、“Me”这四个导航标签,从数量上来说正好适用于移动设备的小尺寸屏幕规格,这正体现出了产品的信息架构针对移动环境所进行的优化调整。而同样的导航结构也出现在了Twitter桌面版的网站当中。我们可以在上面的截图当中看到,虽然桌面环境相对于移动设备来说拥有更大的界面显示空间,但这些导航元素的尺寸及外观效果却几乎与客户端当中的完全一致,只是在整体布局方面进行了调整。可以说,整个桌面版的设计方案在某种程度上就是为了能够保持与移动版本的体验一致性而刻意受限的。

当心狼

在巴赫平均律之前的自然律体系中,那些不在当前调式当中的音符被弹奏出来的时候,通常会产生一种非常刺耳的效果。当时的音乐家们喜欢将这种情况比喻成狼叫。

借鉴这个凶残的概念,我们可以将用户界面当中那些在某些平台当中适用,但在其他环境中就会破坏产品体验的视觉或交互元素称之为“狼”。当你使用手机浏览Web页面的时候,那些本是为了鼠标指针而设计的难以通过手指准确触摸到的链接,那些微小到几乎无法辨识形状的文字,那些依赖鼠标悬停而触发显示的UI元素…这些都是移动设备上下文环境当中的Web界面之狼。

纽约时报的单篇文章页面中,正文右侧通常是一组分享链接,其中每个链接单元的高度是12像素。当我们在iPhone中浏览这个页面的时候,会发现这样的尺寸确实很容易造成误操作,你几乎难以准确地触摸到正确的目标对象。对于这些功能性质的链接单元,最好可以按照苹果在iOS人机界面设计规范当中所要求的那样,在宽度和高度上都至少给到44像素。

对于下图所示的导航结构,移动设备用户普遍表示压力很大。这种下拉菜单形式的UI组件在传统设备当中是非常常见的,但是由于它需要通过鼠标悬停的方式来触发弹出,所以在触屏移动设备当中,这种形式通常无法正常的工作。

总结

最后再次强调,虽然响应式设计或是针对指定设备进行设计的思路都可以在一定程度上帮助我们面向不同的环境调整页面的外观形式及体验方式,但不是所有的UI元素或模块都可以被赋予弹性。我们有必要将按钮或其他一些全局化的界面组件以某种折中的方案进行调整,使页面无论在整体还是细节当中都可以面向不同的设备提供最优且相对一致的体验模式。另外有一个很现实的因素是我们不可以忽视的,即使我们有足够的资源面向不同类型的设备打造具有高度针对性的设计方案,用户在更换设备进行使用的时候同样会将之前的体验转化为潜意识当中的期望而带到另外一个设备当中,所以体验一致性的问题是我们必须认真考虑到的。

  • 触控优先:在尺寸上适合手指触摸的按钮或链接同样适合于鼠标点击,但反之则不然。所以触控优先的设计思路可以确保页面在多数平台当中都能有不错的体验。
  • 响应式设计方案:响应式设计方案够帮助网站根据不同的设备平台对内容、媒体文件和布局结构进行相应的调整与优化,不过同时,我们还需要在很多局部的UI元素或模块当中权衡出一种最优的全局化解决之道
  • 移动优先:从移动的角度入手开始产品设计工作,并始终围绕着移动平台的软硬件特性来打造最符合移动设备上下文环境的产品基本功能,使其最终所带来的体验具有高度的任务驱动性的。
  • 留意细节当中的交互方式:要特别留意细节当中的那些不具备跨平台能力的交互模式。其中最常见的一个问题就是触屏设备通常无法支持传统设备当中的鼠标悬停状态。

巴赫相信人们有权利也有能力以他们认为合适的调式来演奏音乐,他通过好脾气的调律法以及基于平均律的伟大音乐集向世人证明了这一点。而我们则希望,无论人们使用哪一类设备,他们都能感知到最佳的产品体验;我们希望自己的网站产品在可用性及可访问性等方面做到最优。

本文来自Be For Web
英文原文:http://uxdesign.smashingmagazine.com/2012/01/17/de…
译者信息: C7210 – Web设计与前端玩家,现就职于大众点评网产品部用户体验设计组(UED)

小谈页面重构该从哪些方面发展?

前天在微博上看到一则招聘信息,截图如下:

招聘信息

首先,我得感谢这份较为温和的招聘帖子,感谢它给了很多人深入一线公司学习的机会。而今,页面重构师这个职位越来越火热,从“页面仔”到“页面重构工程师”,不光是职位称呼上的改变,较为可观的薪资也无疑从另外一方面说明发展前景一片大好。

七年很痒-薪资对比

图片来源:彪叔《七年很痒》

接下来,我就谈谈自己从事页面重构以来的所感所悟,也借机分享下“页面重构师该如何修炼升级”,请各位大鸟、老鸟多多指教。

反思与进取

2011—-互联网行业的反思年,反思重构未来的发展,也反思个人从业以来的种种。

I’ m bug 12:01:09
我现在比较迷茫的是,是否有必要坚持这么做…
ghostzhang 12:01:29
这个就是你对自己的要求了
ghostzhang 12:01:56
做与不做,能看到的人是不多的
ghostzhang 12:02:26
人总是挑简单容易的去做,大家都这样
ghostzhang 12:03:09
不做,只不过与大家一样 做,就是与众不同
ghostzhang 12:06:39
路没有对错,你坚信了,就是对的,你不信了,就是错的

工作,要 TM 有激情~!

我们不得不承认:枯燥、不断的重复开发、加班加到想吐、数不尽的专题页面实在让人崩溃啊。

但是,其中的乐趣与成就感又何尝不是你我坚持的原因呢?说个简单的,自己构建的页面会被上百万、上千万的用户访问,牛刀小试写几个巨牛叉的效果让那帮si产品为之喝彩,想想就有意思!

疲惫了,怎么办?找 cssplay 打鸡血啊!!

对自己负责

恰逢公司高速发展时期,陆陆续续面试了很多同学,感触最深的就是:基础太差、方法不当。正如克军所说:我们还有太多观念没有扭转过来,我们过分的追求技巧而忽视了技巧之外的基本原理。

Web标准的精髓(结构、表现、行为三者相分离),相信大家都能倒背如流。但如果我们去codereview就会发现:基于表现类的代码比比皆是。也许,有太多的历史原因,也或者从业人员本身素质就层次不齐,再有可能就是公司体系建设就不足够健全、难以花费时间和财力去聘请更为专业的人才。但我觉得,这不是我们对自己妥协的借口,逝去的青春是无法再挽回的,我们有办法让自己足够强大。

两抓一深入!(抓基础、抓原理,深入了解页面重构的前世今生)

有句老话:磨刀不误砍柴工!

也有人说:读史使人明智,读诗使人灵秀,数学使人周密,科学使人深刻,伦理学使人庄重,逻辑修辞之学使人善辩:凡有所学,皆成性格。

读书吧,筒子们!

  • 《网站重构》的起源
  • 《禅意花园》的蜕变
  • 《html与xhtml权威指南》《html 5设计原理》的坎坷。
  • 《css权威指南》的缤纷多彩;
  • 熟悉常见浏览器Bug,知其作祟的具体场景及伏魔大法;
存在的都是合理的。但进化,是谁也无法阻挡的!

八卦一下:电视剧里的情节一般都是单亲子女对生父苦大仇深,然后经过种种的波折、获悉父辈的感情纠葛、再被生父舍身感化后冰释前嫌。那么,我们所面对的又何尝不是如此呢?ie6虽遭人唾弃,但它也曾建功立业。怪癖模式的出现也并不是你所了解的那么万恶,毕竟向后兼容也为我们做了很多贡献。

无所不用,打磨页面重构的思想:

保证各浏览器的兼容性已经是一个很落后的话题。

  • 《无懈可击的web设计》
  • 《精通css web高级解决方案》
  • 《超越css》
  • 《css那些事儿》
  • 《javascript权威指南》
  • 《javascript dom编程艺术》
  • 《高性能网站建设指南》
  • 《高性能网站建设进阶指南》
  • 浏览器工作原理;
  • 辅助性开发工具:firebug、yslow、pagespeed、css usage…;
  • 关注开源社区的优秀设计模式;
  • 订阅大牛技术博客;
  • 了解前端MVC;
关注页面的可访问性、提升良好的用户体验:
  • 不管页面是否有样式,都要保证内容具备良好的阅读性;
  • 关键性操作的可访问性,避免以图换字背景无法加载导致重要功能丧失;
  • 保证重要内容优先展示;
  • 增大页面元素的可点击区域,减少用户操作成本。
  • 结合具体项目,考虑跨平台访问的响应性设计;
  • 剩余字符数的提示;
  • 对于操作的及时反馈;
与同事并肩作战:
  • 沟通、沟通、再沟通;
  • 合理化的代码注释,起始、结束位置的标注;
  • 标注不同状态的触发开关;
  • 功能模块使用方法及相互依赖关系;
  • 共同探索更好的规范与流程;
  • 寻找、开发更为高效的自动化工具;
  • 总结分享更为高效的解决方案;
  • 所有的修改做到有案可查;
提升预知问题的能力
  • 常见新闻列表单行文本字符数过长导致溢出如何处理?后端控制字符数?还是依靠css截取并加以省略号提升用户体验?
  • 图片尺寸不规整,如何保证页面的美观性?
  • 如果页面内容很少,不足以填充一屏的窗口区域,底部过于靠上显示,如何应对这一尴尬局面?
不断的技术尝新与展示,落地实际业务
  • 实践并分享新知识,积极换位思考,为产品设计提供更多有效的交互效果演示;
  • 对于前瞻性、短期内不能大范围应用的新技术视项目状况用之,并做好应对尝新所带来的事故应急方案。

落地为王

以上,皆为一个过来人的小小总结,欢迎拍砖。

重构网站,重构未来!心怀感恩,继续向前!

css 3 target选择器初体验

html 5 & css 3 在当下已经是大家谈论较多的话题。对于前端工程师来说,虽然它不是全新的技术,但它的出现无疑给了我们另外一片广阔的天地。css 3全新的属性和特性赋予web设计更为美好的愿景和更多可能性的同时,也极大的提高了web设计的效率。

最近在搞组件化的相关工作,其中有些交互效果的实现(例如手风琴FAQ)对于像我这样只会html、css的页面重构师来说的确不易,我们不得不依靠于强大的js支撑方能做到!

哪里有压迫,哪里就有反抗!借助于Css 3中强大的E:target 选择器我们就可以打破常规的束缚,实现很多赏心悦目的效果。

语法

W3C中对于该属性是这样定义的:

Some URIs refer to a location within a resource. This kind of URI ends with a “number sign” (#) followed by an anchor identifier (called the fragment identifier).

这段定义中有几个关键词:”URL“、”#“。
于是乎,我们可以得知:它是一个目标伪类选择器。选择匹配E的所有元素,且匹配的元素被相关的URL指向。

注意:该选择器是动态选择器,只有存在URL指向该匹配元素时,样式效果才生效。

例如,在以下结构中,我们在浏览器里输入URL,并附加“#red”,以锚点的方式链接到id为red的div,则该元素即显示为红色背景。
html

盒子01
盒子02

css

div:target{
background:red;
}

Demo-1 is here(CSS3 target选择器演示)

CSS3 target选择器演示
哎呦,小试牛刀显神威,忍不住要称赞一把!!不甘平庸的你,肯定会问:能不能实现更为复杂的交互呢?当然可以!接下来我们就实现一个手风琴效果。

css 3 target 实战

Demo-2 is here(手风琴效果)

Html

这里是我们所要使用的Html 5代码,这里有一些section元素、用于点击的标题标签H2:


css

首先,我们来给外层标签article设置样式:

.accordion
{
display: block;
width: 43em;
margin: 0 auto;
background-color: #666;
overflow: auto;
border-radius: 5px;
box-shadow: 0 3px 3px rgba(0,0,0,0.3);
}

每一个区块刚开始时都是处于关闭状态。给他们设置向左浮动,并且保持宽度为2em.通过设置overflow:hidden;达到溢出隐藏的目的。我们同样设置文本的颜色和背景色保持一致,以此看起来区块好像没有内容。

article.accordion section
{
position: relative;
display: block;
float: left;
width: 2em;
height: 12em;
margin: 0.5em 0 0.5em 0.5em;
color: #333;
background-color: #333;
overflow: hidden;
border-radius: 3px;
}

此时我们需要设置一些令人讨厌的css 3 私有前缀。每一个 h2标题利用 transform和绝对定位逆时针旋转90度悬浮于关闭层section的上方。

.accordion section h2
{
position: absolute;
font-size: 1em;
font-weight: bold;
width: 12em;
height: 2em;
top: 12em;
left: 0;
text-indent: 1em;
padding: 0;
margin: 0;
color: #ddd;
-webkit-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-ms-transform-origin: 0 0;
-o-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
-ms-transform: rotate(-90deg);
-o-transform: rotate(-90deg);
transform: rotate(-90deg);
}
.accordion section h2 a
{
display: block;
width: 100%;
line-height: 2em;
text-decoration: none;
color: inherit;
outline: 0 none;
}

现在我们可以利用 :target 选择器”显示”当前项。当前项的宽度和文本颜色将被更换,标题将被放置于顶部:

.accordion section:target
{
width: 30em;
padding: 0 1em;
color: #333;
background-color: #fff;
}
.accordion section:target h2
{
position: static;
font-size: 1.3em;
text-indent: 0;
color: #333;
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}

Ok, 收工,css 3 transiton的加入将会使他更加迷人:

.accordion section,
.accordion section h2
{
-webkit-transition: all 1s ease;
-moz-transition: all 1s ease;
-ms-transition: all 1s ease;
-o-transition: all 1s ease;
transition: all 1s ease;
}

Demo-2 is here

很可惜的是,ie6、7、8无法使用此效果,Ie9用户同样无法看到动画效果。

OK,我们再来看看两个基于 css 3 target 的精彩案例吧!

demo-3 is here (纵向手风琴)

demo-4 is here (选项卡)

尽情享受css 3的魔力吧!

友情提示

有两点不得不说:

  • 此方案不提供传统的浏览器支持。IE浏览器用户将不知道他们缺少了什么,如果这里没有重要的网页内容,你可以选择忽略他们。
  • 在享受css 3带来的福利同时,请记得选择一个“渐进增强的方案”。

使用DD_belatedPNG的一些注意事项

DD_belatedPNG是一个解决IE6下PNG图片问题的一个JS文件,详情和用法这里就不说了,去官网地址:http://www.dillerdesign.com/experiment/DD_belatedPNG/

问题1: 为什么在iframe页面里使用了DD_belatedPNG后,页面显示空白?

办法:找到以下代码:

if (el.currentStyle.position == 'static') {
         el.style.position = 'relative'
 }

改成:

if (el.currentStyle.position == 'static') {
      if(el.nodeName.toLowerCase()!='html'){
           el.style.position = 'relative'
      }
}

从代码上可以看出来,是因为没有排除html节点,所以整个页面飘了。

注意:修改后有可能会引起别的问题!

问题2: 为什么在有些页面里使用了DD_belatedPNG后,图片显示不全,只显示一部分?

办法:找到以下代码:

el.vml.image.fill.type = 'tile';

改成:

el.vml.image.fill.type = 'frame';

原因:比如有些图片(png格式),原来是100px×100px的,你想用样式或者标签的属性来缩放它到50px长宽,那么这个图片在IE6中不会被缩放,而是被剪切,只显示图片左上角的50px长宽,其它部分隐藏,而且也不是必现的,好像跟加载图片速度有关系,慢的话容易出现。据说这个BUG在新版中被解决,但是我试过了,确实解决了,但是又引起了别的问题,就是在JS控制DIV的显示隐藏,以及在DIV里插入别的DIV等情况下有可能会样式错乱。所以修改或升级还是需要谨慎。

问题3: 为什么在页面里使用了DD_belatedPNG后,我的图片延迟加载(比如取_src的值,赋值给src)的功能失效?或者类似的动态修改图片属性失败的问题?又或者我在图片上的一些点击事件等都失效?

首先说明一下为什么动态修改图片属性会失效(png图片)

因为一开始页面初始化之后,所有png图片都被fix了一遍,即DD_belatedPNG会对已经fix之后的图片设置一个私有属性,具体就是VML的一些相关知识了吧,反正你不能再对他进行一些设置src属性的一些操作了,包括点击事件。但是如果你的图片一开始是gif或别的,就没事,不会受到影响,还可以继续设置src属性。

图片延迟加载失效的分析

这样图片延迟加载失效,很好理解了。图片延迟加载的原理就是,一开始图片的src值是一个空白图片, 比如他是一个gif图片,当然如果一开始的空白图片也是png,那就彻底悲催了,后续也无法被再次设置src。他初始化会对这个空白图片fix,然后你后 来再重新设置src,可以被设置成功,但是你会发现,重新设置后的png图片还是有灰色背景,没有被再次正确fix,这是因为他认为你已经被fix了,有 了他自己的私有属性,不能再次fix。

解决办法:

知道了原因,就能找到解决办法了,既然不能识别已经被fix的,那么我可以再次innerHTML一个图片出来不就可以了么?一个全新的图片!注意:你不能拿原来的图片用,或者通过clone原始的图片,生成一个新图片,那样也是不行的,因为你还不能去掉被fix后的私有属性。

以下是实现的方法:

var replaceImg = (function(){
	var div = document.createElement('div');
	return function (oldImg, newImgHtml){
		div.innerHTML = newImgHtml;
		oldImg.parentNode.insertBefore(div.firstChild, oldImg);
		oldImg.removeNode(true);
	}
}());
var nextImg = dom.getElementsByTagName('img')[0];
replaceImg(nextImg,"<img src='"+nextImg.getAttribute('_src')+"'/>");

可以看出,确实是重新弄一个图片出来,这样DD_belatedPNG就可以识别了。

原文链接:使用DD_belatedPNG的一些注意事项

作者:天山凌雪

20套高质量响应性wordpress皮肤

响应性站点肯定是当前最热门的话题,几乎每一个非表格布局的站点都在尝试着重新设计使其能够适应不同浏览器和媒介的尺寸。响应性设计同样也在进军wordpress市场,很多最新的设计也因此把响应性作为一个新的规范来遵守。今天我们给大家带来20套高质量响应性布局的wordpress皮肤。

Buro ($70)

Buro

【查看详情】

【皮肤展示】

Good Minimal ($35)

Good Minimal

【查看详情】

【皮肤展示】

Tisa ($39)

Tisa

【查看详情】

【皮肤展示】

Suco ($39)

Suco

【查看详情】

【皮肤展示】

Elemin ($39)

Elemin

【查看详情】

【皮肤展示】

Funki ($39)

Funki

【查看详情】

【皮肤展示】

Minblr ($39)

Minblr

【查看详情】

【皮肤展示】

Wumblr ($39)

Wumblr

【查看详情】

【皮肤展示】

iTheme2 (Free!)

iTheme2

【查看详情】

【皮肤展示】

Grido ($39)

Grido

【查看详情】

【皮肤展示】

Reveal ($49)

Reveal

【查看详情】

【皮肤展示】

Easy ($37)

Easy

【查看详情】

【皮肤展示】

Nilmini (€10)

Nilmini

【查看详情】

【皮肤展示】

Bugis (€10)

Bugis

【查看详情】

【皮肤展示】

Yoko (Free!)

Yoko

【查看详情】

【皮肤展示】

Ari (Free!)

Ari

【查看详情】

【皮肤展示】

Skeleton (Free!)

Skeleton

【查看详情】

【皮肤展示】

Renova (Free!)

Renova

【查看详情】

【皮肤展示】

Xi ($50)

Xi

【查看详情】

【皮肤展示】

转载自:《20 High Quality Responsive WordPress Themes》
中文原文:20套高质量响应性wordpress皮肤

如何使CSS渲染更高效

我承认我并不经常想这个问题……我们写的css的效率是怎么样的呢,浏览器渲染的速度又如何呢?

这是应该是浏览器开发者应该关心的(页面加载更快,用户就会更愉快)。Mozilla有一篇文章:about best practices. Google 当然也很关心这个问题,他们也有这样一篇文章:Optimize browser rendering

让我们了解下他们主要倡导的东东,然后讨论他们的实用性。

从右到左

浏览器如何读取你的CSS选择器有一个很重要的原则,那就是它们从右到左读取。这意味这像 ul > li a[title="home"] 这样的选择器,a[title="home"] 将是最先被读取的。这一部分通常被称为 “key selector” (可否称为“目标选择器” -_-!)选择器的最后一部分,也是被选择的标签。

ID’s 是最有效率的,通用符是最慢的

有四种目标选择器:ID, class, tag和通用符。看下他们各自的效率如何:
#main-navigation { } /* ID (最快) */
body.home #page-wrap { } /* ID */
.main-navigation { } /* Class */
ul li a.current { } /* Class *
ul { } /* Tag */
ul li a { } /* Tag */
* { } /* Universal (最慢) */
#content [title='home'] /* Universal */ 然后我们结合从右到左和目标选择器的概念,我们可以知道下面这个选择器并不高效:
#main-nav > li { } /* 看着很快实则很慢 */
尽管这让人有点费解……因为ID’s是最高效的,浏览器可以通过ID迅速的找到 li。但事实是,li 标签是被先读取的。

不要用标签修饰

死也不要像下面这样干:
ul#main-navigation { }
ID’s 是唯一的,所以不需要用标签修饰,这只会让它更低效。
如果你可以避免的话,也不要用它修饰 class 。class 不是唯一的,所以理论上你可以把它用在不同的标签。如果你愿意的话,你可以用标签控制不同的样式,这样你可能需要标签修饰(比如:li.first),但这样做的人很少,所以,don’t .

绝对没有比用后代选择器更糟糕的做法了

David Hyatt:
后代选择器是CSS里最昂贵的选择器,昂贵得可怕——特别是当它放在标签和通用符后面时。
就如下面这个东东一样,绝对的效率毒瘤:
html body ul li a { }

一个选择器渲染失败比这个选择器被渲染更高效

我不是很确定是否有更好的证据去证明这一点,因为如果你有大量的选择器在CSS样式表里无法找到,这样的事情貌似很离奇,但一点必需注意的是,从右到左的解释一个选择器来说,一旦它找不到,那它就会停止尝试。然而如果它找到了,那它就需要花更多精力去解释了。

试想一下为何你这样写选择器

思考下这东东:
#main-navigation li a { font-family: Georgia, Serif; }
你可能不需要从 a 选择器开始(如果你只是想换个字体)。下面这个可能更高效些:
#main-navigation { font-family: Georgia, Serif; }

实用性

还记得之前提到的Mozilla的一篇文章?已经有十年了。事实是:计算机比十年前变慢了(不是我理解错了,还是作者想说现在的WEB越来越复杂了)。我感觉这东东在当年似乎还更受重视。十年前我还是个21岁的英俊小生,当然我不觉得那里我会认识css这东东。所以我也无法跟你讲以前的情况……但我觉得渲染效率的问题之所以没被重视是因为这从来就不是一个大问题。
这是我的一些看法:不管怎样上面提到的东东都是有意义的,你可以按照上面的方法去做,因为它并不会限制你的CSS制作。但你也没必要太教条主义。如果你是个完美主义者,而之前又没有考虑过那东东,那是时候去重新看一下你之前写的一些样式是否有改进的地方了。如果你没发现你的网站明显的渲染缓慢,那大可别太在意,在以后的工作中多注意就行了。

超级快速,零实用性

我们知道ID’s 是最高效的选择器。当你想让渲染速度最高效时,你可能会给每个独立的标签配置一个ID,然后用这些ID写样式。那会超级快,也超级荒唐。这样的结果是语义极差,维护难到了极点。即使在核心部分你也不应该见过这样做的。我认为这个可以提醒我们不要为了高效的CSS放弃语义和可维护性。

Thanks to Jason Beaudoin for emailing me about the idea. If anyone knows more about this stuff, or if you have additional tips that you use in this same vein, let’s hear it!

顺便提一下,因为CSS选择器被很多javascript库使用,上面提到的东东仍然适用,ID选择器还是最快的,后代选择器和类似的东东比较慢。

转载自:蓝色理想 如何使CSS渲染更高效
原文:Efficiently Rendering CSS