响应式页面设计(responsive web design)的概念几年前就火了,到今天势头丝毫未减。不过我却对它越来越无感,下面说说理由。
不是必需
响应式设计能火,因为它给开发者带来了便利:只开发一套页面,就可以适应多种屏幕尺寸。
这个便利对用户来说是看不到的,仅对开发者是便利。对用户来说,在手机和用电脑上输入同一个网址,打开同一个网站,看到的页面是能够适配各自的屏幕尺寸,这是再正常不过的了。早在响应式设计问世之前,就已经做到了。
当时是如何做到的呢?服务端会根据来访客户端的 User Agent 来识别是哪种类型的浏览器,于是就能够区分用户的设备是 phone / pad / desktop 中的哪一种了。判断出是哪一种设备之后,就重定向到 phone / pad / desktop 专属的那个页面。于是用户看到的网页,就恰好能够适配所使用的浏览器。
节省了什么
响应式设计的另一个目标,是为了节省开发人员的时间。这听起来不错,但实际效果怎样,工作量真的减少了吗?
Write once, run anywhere 是所有程序员的梦想,因为大家都懂得写适配是什么样的脏活累活。响应式设计乍看也是奔着 write once, run anywhere 的目标去,但实际上却跑偏了 —— 仍旧要写代码为每一种屏幕尺寸做适配,还要额外去处理把所有这些搅合在一起的复杂性。
写响应式代码,就像手工制作了一个万用插头转换器,在各种场合都拿出来用。没错,它的确能适配各种各样的插孔,但是在插孔已经明确的情况下,万能万用反倒浪费,小巧的功能单一的插头才是合适之选。
最终页面呈现出来,用户以为只是一个插头,但实际上却下载了一大坨万用转换器。呃,这件事最好别让用户知道。
按下葫芦起来瓢
不同的屏幕宽度有不同的页面布局,是响应式设计的核心。以 Bootstrap 为例,当屏幕宽度高于 1200px 属于最大的一类,小于 1200px 就要归到中等大小一类,那么在 1200px 这个临界点上,页面布局会发生跳变。可不止有 1200px 这一个临界点,还有 992px、768px,作为开发者,要照顾到所有临界点的跳变。有时候为了适配一种屏宽而影响到了另一种,按下葫芦起来瓢。
还有一个痛点,就是费大量的口舌跟 UI 设计师解释什么是响应式;它有什么好处;为什么栅格有12列;为什么要设计四套 UI;为什么划分这四套 UI 的三个临界点是 768、992 和 1200;为什么不能做黄金分割(0.618 = ?/12);为什么设计师要受这么多条条框框的约束。
对心态的影响
一旦你用了响应式设计,就容易走向一种偏执,即代码的简洁比界面的美观更重要。为什么?因为你要在一份代码里适配多种情况,代码肯定会变臃肿、可维护性差,从而导致开发效率降低、工程师出现抵触情绪。为了缓解这种情况,其他人只好让步,才能让处于火山爆发边缘的工程师冷却下来。
换回到以前,假如你的页面就是只为 phone 写的,或者只为 desktop 写的,首先心理负担就会小很多。压在心口的大石头没有了,便可以轻快地为 phone 和 desktop 分别写页面,各自达到极致。