Skip to content

《Web UI 框架设计(一):从按钮说起》 #6

Open
@cssmagic

Description

@cssmagic
发布时间 2014-02-17
所在公司 百姓网
演讲类型 技术分享
角色 讲师

概述

跳出技术层面,把目光扩展到 “设计” 层面和 “硬件” 层面,思考一个 UI 框架应该怎样实现按钮的样式和交互。作为一个前端工程师,如果你关注 UI,那么这两个层面不可忽略。

这是我在百姓网做的第一场面向全员的演讲。虽然年代久远,但仍有分享价值。

幻灯片

p00m


p01


p02

CMUI:一个简单粗暴的移动端 Web UI 框架。


p05m


p06m

注:后来 CMUI 也应用到了百姓网手机站。


p07m


p08


p09

近两年,UI 设计潮流逐渐从 “拟物化” 转向 “扁平化”。


p10m

iOS 从 7 开始全面转向扁平化视觉风格。

扁平本身没有对错,但 iOS 7 的扁平设计比较 “扯淡”。


常见的三种 UI 元素看起来通常是这样的:

p11


那么 iOS 7 的按钮设计成什么样子了呢?

p12

一句话:什么都像,就是不像按钮。


按钮在界面中是这样的:

p13


为什么我认为这不是一个好设计?

p14


因为 UI 设计需要遵从 “用户友好” 原则。

p15

而 iOS 7 的按钮在这三方面都没有做好。


p16


在 iOS 7 的视觉风格下,App 的标题栏可能会设计成这样:

p17


p18

注:我当时看到媒体爆料 iOS 7.1 的截图,发现按钮样式与 iOS 7.0 明显不同(有些显示为块状,有些显示为链接)。我还以为苹果的设计师迷途知返,开始改进按钮的设计。但实际上爆料人是在开启了某个辅助功能之后截图的,导致界面与默认状态不一致。

尽管我理解错误,以下对比也仍然很有价值。可以看出苹果也自知这种视觉风格会对用户带来不便,于是给用户留了后路。


标题栏返回按钮的差异:

p19 src


标题栏 “取消” 按钮和输入框 “发送” 按钮的差异:

p20 src


底部 Tab 栏按钮的差异:

p21m src


顶部搜索栏 “取消” 按钮的差异:

p22 src


p23


p24

我从 iPhone 4 换到 iPhone 5s 后,经常遇到短信发送没反应的情况。

是软件 bug,还是触控不灵?


p25

果然从 iPhone 5 开始就有触控方面的负面评论。


我翻出已经退役的 iPhone 4,做了一个对比测试。

为记录触控轨迹,两台手机都切换到手写输入法界面。我用一把直尺和一支触控笔,在屏幕上画一条斜线。结果如下(左图 iPhone 4,右图 iPhone 5s):

p26 src

可以看到两条线都是连续的,说明两台手机从屏幕中心到边缘都可以连续响应触摸操作,排除屏幕 “断触” 的可能性。

但两台手机的表现还是有区别的。在 iPhone 4 上画出的线整体较直,而 iPhone 5s 的线在靠近屏幕边缘部位有明显的弯曲,仿佛屏幕边缘有一股神秘力量在拉扯。


在继续分析之前,我们需要了解关于触控的一个真相。

p27

不论是按压也好,划动也好,屏幕对触控的响应都是坐标点或坐标点的连续变化,而不是一个模糊的面。

因此,一个 UI 元素有没有被点中,就看我们的触摸面积在被触控算法汇聚为一个点之后,在不在 UI 元素的响应范围内。


好,接下来我们仔细看看 iPhone 5s 的笔迹图。

我们把实际的笔迹用红色虚线标出来,而黑色实线是屏幕的触控传感器认为我们画出的笔迹。两者是有一定差异的。这两条线也可以认为是触摸屏的 “理想特性曲线” 和 “实际特性曲线”。

p28,35 src

根据这两条曲线,可以得出,如果我们触摸在蓝线位置,手机会认为我们在触摸在红线位置。误差明显。


油管上有一段视频,清晰呈现了这种误差。垂直方向上的误差尤为严重。

总之是实锤了 iPhone 的 “质量问题”。

p29 src


那么,一贯给人感觉 “精密可靠” “纵享丝滑” 的 iPhone 为什么会存在这种质量问题呢?我猜测这源于苹果对(还未完全成熟的)新技术的应用。苹果为了控制 iPhone 5 的机身厚度,采用了 “in-cell” 触摸屏技术。

p30m

有没有可能是苹果被供应商坑了?我觉得不是。我更愿意相信这在当时就是技术瓶颈,否则不至于连续两代产品都有同样的问题。


这个 “质量问题” 到底有多大?有媒体进行了 iPhone 与竞品的对比测试。

p31 src


测试方法简单粗暴,把屏幕划分为上千个测试区块,再用机械手逐个点击这些区块,观察屏幕的实际响应坐标是否漂移。

绿色表示该区块的触控精度可接受,红色表示触控漂移超出了合理范围。

p32 src


p33 src

这一次 iPhone 竟然被友商吊打。


这个瓜确实吃得很开心,但你可能会问:

p34m

这跟短信发不出去有什么关系?


我们再来看看这张笔迹图:

p28,35 src

这张图其实就是短信发送界面。此时如果我写好短信准备发送,准确点中 “发送” 按钮的 “送” 字(蓝线位置),但屏幕会认为我点中的是红线位置,完美避开了按钮,从而导致 “短信发不出去” 的假象。

而且由于这个按钮在视觉上就是两个字,我很难看清楚按钮的激活样式,也就很难意识到自己根本没有点中按钮。

有些朋友可能会想:“如果我手指很粗,是不是就能避免这个问题?” 不要忘了我们上面讲到的触控真相——触摸面积再大,反映到界面上也只是一个坐标点。所以这是一个由软硬件共同导致的、无差别的体验缺陷。


那这个问题就无解了吗?

这里需要引出 UI 设计的另一项重要原则(或者说 “技巧”):元素的可响应区域不一定就是它的可视区域;或者说,很多时候,可响应区域不能只局限于可视区域。

p36m

而这个 “发送” 按钮刚好在这一点上也翻车了。我们稍加测试就会发现,这个 “发送” 按钮的可响应区域就是 “发送” 这两个字的字面区域。我们稍微偏出一点点都不行,不提供任何容错空间,最终导致悲剧的发生。


不过 iOS 7 也不是全军覆没,标题栏的按钮倒是做了超大的可响应区域,以方便大拇指的操作。

p37


p38


CMUI 充分考虑到 “可响应区域” 原则,提出了 “按钮容器” 的概念——你可以在按钮外面套一层容器,整个容器都可以响应绑定在按钮身上的点击事件。

而且,如果你使用了 CMUI 内置的标题栏组件,标题栏上的按钮天生就具备了超大的可响应区域,如图所示。

p39 src

注:遗憾的是,CMUI 的后续版本受限于各方因素,未能延续 “按钮容器” 特性。


p40

今天的分享就到这里,如果觉得有趣或有用,别忘了点右上角的 Star 哦!


相关链接

  • 技术分享:
  • 开源项目:
    • CMUI —— 一款专攻 Mobile Web 的 UI 框架。它提供了丰富的组件和简洁的接口,开箱即用;帮助开发者摆脱样式细节和兼容性困扰,从而腾出更多精力投入到业务开发中。CMUI 被百姓网、薇姿官方商城等网站采纳为 UI 层解决方案,每日承受数千万 PV 的考验。

© 经验分享 · 日拱一卒   |   Star = 收藏   |   Watch = 订阅

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions