【青训营】- 给开发看的UI设计

1,397 阅读11分钟

前言

前端为何要学习基本的UI设计原则和实践套路?

1、没有专业UI

你的团队里可能会有UI角色,但不一定专业,UI给出的设计稿,许多时候只是静态的、仅见某一交互切面的;

很多交互体验细节,只有在前端摆弄一个Button的位置和多场景状态时,才能被捕捉到。

在大厂里,许多B端产品时没有专职UI的角色的;前端可能要对产品最终呈现出的形态负责。

2、做好作品

入行前端的同学,有不少是被其【所见即所得】的开发体验所吸引此外,就是能够开发一款自己有用、爱用的反方出来,并分享给其他人使用。

现在市面上,已经足够多的课程,能够让前端以「全栈」的姿态独立开发一款能用的产品出来。但当页面模块变得复杂起来时,仅仅依赖一些UI组件库,已经不能让产品维持在「好用」的状态。追求极致的「全栈」定义,或许应当包含「设计」的角色。


基于以上的几点原因,现在就开始吧!

功能导向

功能导向,设计中最重要的事情。

简约设计

先不介绍什么设计原则。又或许这才是最重要的「设计原则」,那就是

  • 把功能做好。

示例

如以下谷歌登录页,它最主要的功能就是搜索,所以页面主要呈现的就是搜索框,让用户可以快速的直达功能。

image-20210815234813802

有了功能基础,就可以画原型了。在我们开始介绍设计原则之前,有几个简单的技巧可以帮助你快速开始。

用简单的创作工具像纸、笔,或者excalidraw.com/ 这样可以立刻上手的工具最好。

糙一点设计笔触可以让你不会过于追求完美,或者说是过于「追求设计」迅速把框架搭好了,设计细节可以后面再补充。说白了,功能优先 始终贯穿在设计&开发流程中。

你可以使用如figma之类的更专业的原型设计工具。但作为开发,建议先使用最基本的笔触和组件,克制使用颜色

设计简单的、完整的功能 说白了,就是先以MVP版本功能,来作为设计目标。

  • MVP: Minimum Viable Product,最简化可实行产品

  • 一个联系人列表,是否要考虑超过2000人的展示情况?如何优化交互?数据不存在时,根据不同的错误情况,应该如何准备错误信息展示,和用户引导?
  • 一个图片上传模块,其复制粘贴、拖拽、点击选择文件上传,这些路径是否MVP版本都要做,是否都要先做好布局和引,导设计?

在开局期间,时刻提醒自己,优先把用户关键路径上的主流场景设计完成,迅速迭代能力。先让游戏开始。

设计步骤

  • 第一步:交付功能

设计原则

层级

层级可能是你唯一需要关心的原则,层级区分,就是你最需要掌握的原则和技巧。

  • 一个产品要好用,就要让用户很容易地,抓产品重点。
  • 在重点里,用户能自在地进入沉浸式阅读、和使用的状态;
  • 当用户想探索其他内容时,ta能轻松地识别网站的次要板块还有哪些,焦点能迅速转移,并迅速沉浸;
  • 辅助提示信息,精确而又不会打扰各主要模块的呈现。

一致性

一致性指的是:用户在站点的各个角落,观察到颜色、间距、阴影、位置、字体和字重的运用,都在一套有限的框架里,一套能迅速建立亲切感的框架内。

能否克制,且重复、精确地运用着拟定好的设计体系,会在方方面面上影响着一个站点的质感,也是体现专业性的考量。

资料推荐

推荐书籍《写给大家看的设计书》

image-20210816000912685

这里简单介绍下《写给大家看的设计书》四原则:

  • 对比:如果两个元素内涵不同,请让它们截然不同
  • 重复:设计的视觉要素应当在整个作品中重复出现
  • 亲密性:彼此关联的元素应当靠近放置在一起
  • 对齐:任何元素都不能随意安放,应当总与至少一个元素有视觉上的关联

层级,就是亲密性+对比的目标。让用户抓重点、切视线,又快又稳。
一致性,就是对齐+重复,克制用户视线所感受的尺度,迅速与网站设计语言建立熟悉感。

设计体系

布局

居中放

先介绍一个最基本的布局技巧,那就是:内容居中放。

  • 如果你是遵循「功能导向」,边开发基础能力边设计迭代的开发过程,那么前期你的功能应当是比较简单的。单列式的居中布局,应该能满足你的需求。

  • 很多场景下,居中放也是很有意义的。除非大屏浏览是你的核心场景,不然一般来说,你的内容宽度应该在600 ~ 800px之间,类似一-本书的宽度。

多列布局

  • 多列布局的核心也是保持内容的一个合适宽度,维持可读性。
  • 一般规则是:主要内容列弹性收缩(可以有最小宽度) ;次要列固定宽度

间距

保证元素间有基本的间距,是最基本的设计技巧。

选项

我们基于4px的倍数,设计了十数种间距选项

image-20210816002034294

关于设计选项的说明

  • 设计体系,除了满足「一致性」原则,另外也是帮设计者提前设计好选项。
  • 有了这些选项,我们在具体场景中可以逐个尝试,来试出最优解。
  • 比起每次都拍脑门决策,在选项里调优能大大加快设计的步伐。

观察这十数种间距选项,我们可以发现这是一个类似指数增长的图表。这是因为两个相邻间距,在大尺度上,要比小尺度里拉的更开,才能在视线里体现出间距差距。

小尺度里,4px 的差距就是20%的增幅;右图500px的尺度中,20px 的增长只有提升4%的

image-20210816002539368

多些留白

这是一个间距设计技巧

  • 安排元素时建议先大大的留空,也就是「从松到紧」来调试间距。

由紧到松

这图是由紧到松,你的思维是「尝试把无关的元素拉开」,而且是「从整体到局部」的方向,不好操作

image-20210816002934267

举个例子

你想先拉开每个段落间距10px,再调段落内标题与内容的间距4px,但发现拉的不够开,这时要回过头将段落间间距拉到20px,这样段落内才好安排10px的间距;

由松到紧

这就简单一些:关注的是「哪些元素相关」,把它们拉在一起,然后是「从局部到整体」调优。

一般来说,偏松也比偏紧好。从一开始就留些空间吧。

image-20210816003241112

表达关联关系

除了方便阅读,间距也是最合适表达关联关系的工具。 图中的间距差异设计,表明了每个章节的起点,以及标题与段落的关联性。

image-20210816003513314

暧昧的行高和列表项间距,会让用户难以判断阅读时的停顿点在哪,当前列表项是否已结束。

image-20210816003834200

间距是远比色块、边框、分界线之类的更适合用来表达关联关系的工具。值得多加练习运用。

文字

文本是站点的主要内容载体;字体设计自然也是重中之重。

既然我们在讲设计体系,以一致性为目标。同样地,我们要把站点所使用的字号、字重等范围框定在十数个选项中。

十数个是个magic number,大部分情况下应该都能满足。只要场景够特殊,特殊字体完全可以再加。

选项设计

相比于间距设计,字号大小我们有一个明显的适合阅读的字号范围,如12 ~ 20px。那么我们会更多在这个范围内设置字体选项。

image-20210816004130357

仅通过字号来设置层级,很快就会捉襟见肘。结合字重&颜色(灰度),你会更游刃有余。

字重(字体加粗)是css自带的,用好常用的3、4个尺度就好

image-20210816004310643

image-20210816004337235

对齐

不同字号大小的字体间如何对齐呢?基于baseline 对齐,就是文本的下边缘。

baseline是一个字符的重心;重心对齐了,用户在移动视线时就能有平稳的阅读体验。

行高

基本所有的文本设计意图都是为了保持良好的阅读体验,行高也不例外。

具体到设计哲学,就是:

  • 行高和字号大小大致成反比,目标是用户在视线换行时有稳定的下移体验。

image-20210816004709864

色彩

颜色选项

  • 灰色
  • 主题色(大部分站点都少不了一两个贯穿全局的主题色;它出现在按钮、logo、 背景、各种修饰元素之上,是品牌的记忆元素。)
  • 功能色(有一些常见的颜色,被广泛地用来表达某些固定的语义信息。)
    • 红色,传达错误信息,或提示危险操作。
    • 黄色,表示警告。
    • 绿色,表示一些积极的变化,以示成功或增长的信息。

使用色盘 准备好颜色这么多由深到浅的变种,如何使用呢? 刚刚提过的一种,是作为前景和背景色。

  • 主要标题可以用最亮的白色;
  • 次要标题挑一个背景颜色的浅色版本。

浅色背景深色前景的用法。

浅色色块相较于白色背景对比度不大,适合不用过于抢夺眼球的场景。

使用颜色的注意事项

  • 颜色虽好,使用不当容易打破页面层级平衡。

下图,虽然每个按钮都是按功能填色,但是会让人找不到功能重点

image-20210816005409537

以下,直接把最主要的按钮,用主题色体现,删除功能最次要的,则不加颜色

image-20210816005526334

色盲的用户消费不了颜色;颜色在不同的文化中可能表示不同的含义。(最好是没有颜色的情况下就能很好的表达功能意图,在适当的去加颜色)

深度

制造深度的技巧,八成与阴影设计有关。

深度补充了间距,从另一个维度上体现了层级。

这是为什么?

这种深度的感官来自日常生活。

平时我们是怎么感受平面上的深度的?

答案是:自上而下的光照打在平面上所造成的阴影。模拟这个现象,我们便可以实现网页元素的「深度」体验

阴影选项

  • 小的阴影可以使元素略微突出,但不至于抢夺眼球。

  • 中等阴影适用于小型弹出的模块,如下拉框。

  • 最深的阴影则用于彻底地将模块与页面区分开来的场景。

    image-20210816010231613

实用技巧

图片上的层级

图片上的色块斑驳不一,难以找到合适的前景色。怎么办?

  • 增加蒙层。对比度就上来了
  • 还可以给文字加上阴影。css可以让你轻松做到,只增加文字部分的对比度,而不影响整张图片。

用户头像

这里也包含任何由用户上传图片的场景。如何在任何情况下都能清晰地展示内容会是个问题。

image-20210816011107227

加个border呢,差强人意,不一定能搭配好。

image-20210816011148029

有个好方法是,加点内阴影。相当于圈用户头像的外层做边框。非常精巧了。

image-20210816011234663

干掉分界线

如果每个地方都用分界线分割,会显得很不美观

image-20210816011340185

阴影可以替代边框;不同的背景色块也可以。

间距清晰的话,也就不需要分界线了。

image-20210816011603849

资源

想深入了解可以看

给开发看的UI设计.语雀

书籍推荐

写给大家看的设计书(第4版) (豆瓣)

image.png

其他

  • tailwind 的 utility class设计深度实践了本文所讲的设计体系。
  • taildinwcss 设计框架,官网里面还有很多设计资源。
  • Refactoring UI,来自tailwind作者的著作,本文的基础。

结语

字节青训营

讲师:沈扬东

如以上有错误的地方,请在评论区中指出!


小可爱看完点个赞再走吧!😗