Web设计思想——渐进增强

最近在拜读一本Web体验相关的书《渐进增强——跨平台用户体验设计 》,阅读后做些总结,消化一下书中的精髓。

在阅读本文前,可以先思考下面几个问题。

1. 浏览网页的目的是什么?

2. 浏览网页的时候会碰到哪些问题?

3. 用什么方法来解决这些问题?

4. 这些方法具体的实施步骤有哪些?

一、契机

1)内容

  内容是Web页面的核心,也是用户浏览页面的目的。内容可以是某些信息或某个功能,用户浏览网页就是为了获得它们。接下来所做的一切都是为了让内容脱颖而出,向用户传达更清晰明确的意义,传递更准确、更具表现力的信息,让内容适应更多、更新的设备。内容是用户体验的核心,结构清晰、文字晓畅、组织得当的内容,是一个网页的基础。没有内容,你的网页从技术上相当于不存在。

2)遇到的问题

  虽然所有用户访问的页面是同一份,但在浏览的时候,经常会碰到各种奇葩问题,例如页面打不开,内容看不到,功能不能用,错乱的排版等。这是由于目前设备和浏览器碎片化,用户使用环境和交互习惯多样化导致的。

3)渐进增强

  在Web开发的时候,需要考虑的细节越来越多,设备的屏幕尺寸,内存,CPU,像素密度,操作系统,浏览器,网络,代理等,用户的文化水平,认知障碍,上网目的,习惯,需求等。要做一个每个人体验都一致的网站,几乎不可能。但还是得确保Web的可访问性,保证用户在任何环境、使用任何设备,都能正常访问核心内容或使用基本功能,并为他们提供当前条件下最好的体验,这正是渐进增强的核心思想。

  渐进增强是一种兼容未知设备、平衡各种设备间交互可用性的思想,并不要求技术追新,但能让用户脱离设备制约,极大提升Web可用性。采用渐进增强在项目开始之前需要多花些时间去思考,但会为后来的设计开发节省大量的时间,资源,从而在单位时间内产出更多价值。

4)分层设计

  实施渐进增强,可分为文档结构化,完善视觉设计和丰富交互设计这3个层面,从而实现从基本到复杂的体验。

5)容错性

HTML的容错性:浏览器在渲染页面的时候,会忽略不认识的元素和属性,而文档中的内容则会保留下来。得益于这种设计,HTML的发展并不会伤害过时的浏览器。

CSS的容错性:浏览器遇到不认识的CSS规则或属性,浏览器就会忽略解析错误出现之处周围的代码。

JavaScript的容错性:与HTML和CSS不同,JavaScript没有那么强的容错性,一旦程序中有一部分语义不明,这个程序就无法执行。

二、文档结构化

  如果我们能够提供结构清晰、易于检索的内容,无论对于搜素引擎的抓取,还是对某些数据结构化工具的内容识别都是相当有用的,同时让你的内容适应更多、更新的浏览器。

1)按照Web标准开发

  语义化元素组织HTML结构、使用CSS级联样式表来布局、压缩图片、优化DOM,使用脚本增强交互体验等,实现结构和样式、逻辑分离。过去人们喜欢用table布局,究其原因有二:第一,兼容性不错,不会出现特别显眼的问题;第二,大多数从业者尚未形成可访问性优化的意识。但随后,Google率先采取了HTML语义化分析的方法,来判断一个网页的内容和关键词意义的相关程度,各大搜索引擎也开始搜寻语义化的标签,开发出类似的排名技术。很多网站的流量都是从搜索引擎带入,这使得语义化标记和CSS样式布局的方法逐渐被大家接受。

2)使用合适的标签

  当你在合适的地方使用一个语义恰当的标签的时候,内容的意义也会被强化,页面的内容结构变得更加清晰。如果使用不同的HTML元素来模拟某个控件,在浏览器中,会体现出不同的特征。就算我们可以实现从样式到行为的全面模拟,得到的也只是一个不稳定、代码臃肿、难以维护的组件。在页面中合理运用布局元素(section、article、header等),将页面划分为各个语义明确的区块,使网页的内容信息更好地传递给用户。

3)class和id的命名

  一些常用的class和id的命名对HTML起到了一定的补充和建议作用,例如#header、#nav和.article等。最后慢慢演变成了HTML标准元素,header、nav和article等。

4)微格式

  微格式通过定义HTML的属性(rel或class)来实现Web语义化的扩展,rel用来描述通过href属性链接起来的两个网页或文档之间的关系,用class的名称来实现数据格式化。RDFa是另外一种数据格式化技术,但语法比微格式严格。

5)避免冗余标签

  额外的HTML结构因为被写死在了页面中,会让页面产生潜在的可用性或可维护性方面的问题。既然交互行为是由JavaScript支持的,那么这些交互行为所依赖的HTML结构当然也应该由JavaScript动态按需生成。

6)ARIA属性

  如果原生的HTML元素可以满足语义化和默认行为的需求,就不要试图通过改变ARIA属性的方法去实现相同的目的。如果合理的设置了ARIA属性,那些需要辅助设备工具支持的用户就能更快定位内容,视觉障碍的体验就会因此获得极大提升。

三、视觉设计

  目前存在着分辨率不同、设备对CSS的支持程度不一、像素密度各异等客观条件,导致了一堆和视觉设计有关的问题。为了解决问题,就需要好的设计。好的设计有三个原则:化繁为简(共同性)、化零为整(一致性)、化静为动(灵活性)。

1)设计一个系统,而非一堆页面

  花一点时间去对内容进行分析,从中挑出10到12个页面进行设计(加上一堆小组件)。我们设计的是整个系统而不是单独的页面。你会发现页面和页面之间、组件和组件之间是有内在联系的。对于用户来说,各页面之间设计的一致性降低了认知成本,对于开发者来说,组件复用性的提升降低了今后系统的维护难度。设计系统具体分为3个步骤:

1.设计清算(罗列界面清单),可以宏观的掌握整个网站的设计风格。从每个模块的角度进行考虑,更加系统的进行设计。

2.设计风格组件,将网站上可能出现的界面元素,如标题、正文、图标、按钮等最基础的设计风格罗列在一份文档中,形成网站最基本的视觉规范。一来方便网站设计的控制,二来当调整网站主题风格,会大大节省工作量。

3.建立视觉规范与组件库,视觉规范就像一份巨细无遗的风格组件库,包含具体设计标注,如文字的字号、模块的间距、图像和广告位的尺寸,在具体设计中提供准绳。组件库分类罗列了网站中常用模块的HTML结构,前端工程师摘取需要的模块代码来组成所需的页面。建立组件库好比收集一堆积木,积木越多,越能找到合适的组件,从而大大提升了网站的设计和开发速度。

2)文案内容

  设计师只有获悉了文案内容,才能运用设计方法来烘托内容、强调内容、衬托内容。文案制定者和视觉设计师坐在一起集思广益,分工设计文案。视觉设计师考虑文案的极端情况,尽早考虑极端情况,会让你的设计稿更健壮;文案制定者考虑文案是否可以被现有设计规范所满足。

3)响应式Web设计

  目前市面上有许多媒体类型,其中包括电脑屏幕、打印介质、电视、手持设备,以及辅助设备,如屏幕阅读器、盲文打印机、触摸反馈等设备。为了能在不同媒体中渲染合适的样式,呈现正确的界面,有人提出了响应式Web设计。响应式Web设计的基本方法包括流体栅格、灵活适应的媒体、媒体查询和浏览器分级。

1.流体栅格:基于百分比单位规定列宽的栅格系统。

2.灵活适应的媒体:图片、视频等媒体在Web页面中的占位宽度不允许超过其容器的宽度。

3.媒体查询:通过设置媒体查询的条件(宽度断点),在不同分辨率和屏幕尺寸下,布局应该呈现什么样的结构,以及行高、字号等样式信息。

4.浏览器分级:区分哪些是技术支持度较差的老浏览器,哪些是支持度一般的浏览器,哪些是支持度高的浏览器。

4)防守性设计

  在老的浏览器中,那些不认识的新CSS属性或值会被自动忽略掉,而新的浏览器会根据先后顺序覆盖掉旧的属性,如下代码所示。

property:basic value;
property:advanced value;

  手动编写降级或兼容代码会比较繁琐,可以使用Sass、Less等预处理器,这些工具提供了CSS语法兼容的自动化方法,可以自动生成对老浏览器降级代码和针对不同浏览器的厂商前缀。

四、交互设计

  Web的历史,是一部JavaScript的折腾史,甚至可以说是灾难史。利用JavaScript去实现渐进增强,其要求比使用CSS或HTML更严格。熟悉所有可能导致JavaScript失效或影响基于JavaScript建立的体验的所有要素。在多大程度上减轻这方面的损害,取决于你对那些影响体验的要素的熟悉程度。

1)无JavaScript

  不要把所有的用户体验都寄托在JavaScript上,会有很多情况导致浏览器不能使用JavaScript,当出现这种情况的时候,至少要让网页可访问,把风险降到最低。

2)特性检测

  JavaScript是零容错,要想代码足够健壮,特性检测是必需的。特性检测就是把代码封装在一些代码块中,针对不同兼容要求的浏览器运行不同的代码,避免报错风险。举例来说通过属性设置去观察是否达到了该特性的预期。

if(window.addEventListener) {
  //支持addEventListener的逻辑
}else if(window.attachEvent){
  //支持attachEvent的逻辑
}

3)建立最低限度的代码支持

  首先,写一部分通用的,最低限度也要支持的JavaScript(如cookie),然后通过附加特性检测的方法去引入那些增强体验的高级JavaScript代码(如localStorag)。

4)区分对待

  微软提供了一种叫做“条件注释”的私有技术。所有的IE可识别

<!--[if IE]><!-->
<link href="../../assets/css/style.css" rel="stylesheet" />
<!--<![endif]-->

5)创建页面所需的结构

  用JavaScript去生成有着强依赖关系的HTML结构,这样做既可以让页面轻量,也会降低页面维护的难度,因为HTML和JavaScript代码都在同一个地方进行管理了。换句话说,将通用或复杂的功能,封装成组件或插件。

6)自定义属性

  data属性是一种自定义属性,明晰的data属性可以通过降低开发维护成本的方式使页面的渐进增强设计变得更加容易。在表单验证插件中,将验证规则和提示直接定义在data属性内,让内容和逻辑解耦,减少JavaScript代码的文件尺寸,让界面开发更轻松。

7)鼠标事件之外

  设计者们常常会忽略那些不使用鼠标,而是用其它输入终端用户的需求,渐进增强的设计思想要求在任何可提升体验的地方要留心。

1.发挥键盘的作用,键盘依然是一个很有用的输入媒介,作为一个标准程度较高的输入工具,对于视觉障碍用户和一些计算机较为熟练的用户来说,重要性是不可取代的。

2.提升触屏体验,鼠标的移动是连续的,而触屏上面的手指移动是跳跃的,不要把基于鼠标的设计思维迁移到触摸屏幕上。

8)不要依赖网络状况

  人们的上网环境在一天之内可能会在蜂窝网络、WIFI连接、4G、3G之间随时切换,有时还会进入完全没有信号的地方,当没有网络的时候,可以做些缓存或离线处理。

1.将数据存储在客户端,将表单数据捕获为一个JSON对象,并缓存起来,然后提醒用户,当网络恢复,将数据提交给服务器。

2.丰富离线体验,如果你的网站功能性大于内容性,离线技术会让网站变得易于安装。

五、界面体验图

1)界面体验图

  渐进增强设计的最大挑战不是代码编写,而是制定一个计划。通过界面体验图(也称Ix图)来解决这一问题,这张图将展示网页遇到各种界面选择困难时的每一种适应性的解决路径,保证团队中的每一个成员都能对目标和结果有深刻的理解,从而为一个共同的工作目标而努力。

这个工具最擅长的,是展示网页遇到各种界面选择困难时候的每一种适应性的解决路径。这个图只是一些节点和箭头而已,利用它可以尝试不同的方案。这份文档简洁清晰,对于团队中的每个人都别具价值。

1.内容编辑:看到不同设备和状态下的网站显示情况,根据实际情况决定在该界面下暴露出的内容。

2.设计师:观察到每种可能的体验效果,从而根据实际情况产出不同的线框图和视觉效果。

3.工程师:在何种条件下提供哪些具体的功能,并且清楚定制各个设备的性能检测。

4.测试:在具体设备和页面上有针对性地去测试对应的功能。

2)渐进思想的受益人

  使用渐进增强思想去设计一个网站,每一个人都会从中受益。

用户:产品能够在一切情况下给用户带来最佳的访问体验。

自己:不必执着于为每一个用户提供完全相同的体验。

客户和老板:产品的可访问带动的用户量,维护的视觉和金钱成本也都降低了。

时间: 2024-10-20 14:54:12

Web设计思想——渐进增强的相关文章

渐进增强的Web设计 —— 可折叠内容

在图书馆翻到了<渐进增强的Web设计>,书中基于jQuery构建了许多组件,在此一一记录. 有一些实现思路其实很简单,我也不会把代码粘过来,只是记录一下注意事项技巧神马的,对重要的代码简单标记. 可折叠内容,其实就是点击显示和隐藏某部分区域. 1.body字体设置: body {font-size: 62.5%;} 这样基准字体被设置成百分比的形式,所以任何指定的em都会简单的转换成px,1.5em相当于15px,2.2em相当于22px. 2.先编写一般性的css,然后编写用于特定元素的增强

网页设计时的渐进增强和优雅降级原则

渐进增强和优雅降级是两种不同的网页设计思想,是两种相反的思路达到同样的效果. 优雅降级:设计网页时,首先满足主流浏览器和最新版本浏览器的所有效果和互动.然后在此基础上,对非主流浏览器 和较低版本的浏览器进行效果删减来兼容,最终完成所有浏览器均能适用的方法.一般在学习过程中,均采用 该方法. 渐进增强:顾名思义,是在网页制作过程中,首先满足能适应由低到高,非主流到主流所有浏览器都能适用的网页,再针对高版本 浏览器和主流浏览器来添加高级效果和互动,最终让网页能适应所有浏览器的方法. 两种方法各有优劣

渐进增强&amp;优雅降级

渐进增强:是一种开发方式,更是一种设计理念.在编写web页面时,首先保证最核心的功能实现,让任何低端的浏览器都能看到站点内容,然后考虑使用高级但非必要的CSS和JavaScript等增强功能,为当前和未来的浏览器提供更好的支持,给用户带来更好的体验.不追求高端浏览器实现多酷炫的效果,最重要的是保证低端浏览器也能正常实现核心功能和效果. 渐进增强比较适合低版本浏览器用户群占的比例比较大的网站. 优雅降级:在设计的时候,主要为高端浏览器使用最新的技术来实现最可观的效果,而低端浏览器只要保证基本可用就

关于优雅降级和渐进增强

优雅降级和渐进增强在这里是指开发网页的两种不同的思想, 优雅降级,目的是阻止灾难性的失败, “优雅降级”观点认为应该针对那些最高级.最完善的浏览器来设计网站.而将那些被认为“过时”或有功能缺失的浏览器下的测试工作安排在开发周期的最后阶段,并把测试对象限定为主流浏览器(如 IE.Mozilla 等)的前一个版本. 在这种设计范例下,旧版的浏览器被认为仅能提供“简陋却无妨 (poor, but passable)” 的浏览体验.你可以做一些小的调整来适应某个特定的浏览器.但由于它们并非我们所关注的焦

CSS3—CSS3和现代Web设计

CSS3和现代Web设计 1.1 现代Web设计理念 1.1.1 可访问性第一 同样一段内容, 可以用成千上万的方法为其设计样式, 但全世界的用户应该依然可以访问它们, 不管他们用什么方式去访问Web——无论手机.键盘控制器还是屏幕阅读器. 因此关于锁定那些没有使用矫正光泽水准的设备的用户是很重要的. 1.1.2 可用性其次 当用户访问网站中的内容和服务的时候, 他们能理解并且找到他们想要的信息吗? 为什么人们不多思考:对于浏览他们网站的用户来说, 什么信息是最有用的, 然后如何展现这些信息才能

15个优秀响应Web设计测试工具

Web测试工具是非常必要的响应网页设计过程的一部分.与网页设计测试工具的使用,你会检查网站错误,很容易找到的. 当你看到一个网站,您将使用web设计测试工具来检查你的网站如何反应不同的屏幕分辨率和浏览器大小.响应web测试工具允许你的网站显示图片和内容在不同的设备上,提供良好的用户体验. 优秀的响应Web设计测试工具收集如下 在本文中,我们想收集15个最佳响应web设计测试工具,找出一个网站的响应能力 Viewport Resizer Viewport resizer 是一个基于浏览器的工具来测

响应式 Web 设计应该避免的错误

英文原文:Mistakes to Avoid With Responsive Web Design By Ramya Raju 当下,尤其是几乎人人都有一台智能手机或者平板电脑的时候,开发手机端用户体验友好的网站的重要性不言而喻.其结果是,企业所有者会因为这样的交互 网站设计能够给不同平台下(桌面端到手机端到平板电脑)的用户带来不一般的体验而去触碰交互式web设计这一想法.开发一个带有响应式交互设计的网站变得 非常有意义,因为其可以在不同的设备运行,因此,你可以节约针对不同平台开发不同网站的成本

框架源码系列一:设计模式(设计思想、设计原则、各种设计模式介绍、设计模式总结)

要分析常用框架spring.mybatis.springboot.springcloud等的源码,首先要了解各种设计模式,因为框架里面应用了各种设计模式 一.设计思想 学习设计模式最重要的是掌握设计思想和设计原则,理解了设计思想和设计原则并运用到平时的编码中是最重要的!!! 1. 我们先来看下面的问题: 天天加班编程,编程到底都做的是什么? 撸代码,加班撸代码,写接口.写类.写方法 用设计模式或做设计的作用是什么? 指导.规定该如何撸代码,如何来写接口.写类.写方法 为什么要做设计.用设计模式?

中文翻译为&quot;具象状态传输&quot;的RESTful的架构风格和设计思想

本文标签:  具象状态传输 RESTful架构 RESTful理解 REST   服务器 REST 定义了一组体系架构原则,您可以根据这些,包括使用不同语言编写的客户端如何通过 HTTP 处理和传输资源状态.所以在事实上,REST 对 Web的影响非常大,由于其使用相当方便,已经普遍地取代了基于 SOAP 和 WSDL 的接口设计.在多年以后的今天,REST的主要框架已经开始雨后春笋般的出现. REST(Representational State Transfer ),有中文翻译为"具象状态传