Material Design 为一种设计UI的思路,由Google推出,看了之后觉得此UI用户体验不错,特自行总结一小下。
Materail基本原则
- Material Design 仅仅只是一个设计原则。只要按照设计原则的实现都可以称自己有Material思想在里面。
- 跨平台之间,跨不同的设备之间,可以统一设计标准。
- 以自然科学为设计思想,比如物理学,光学等等,接近人本身对事物的感知。
- 实现设计的思路主要是以颜色,大小,边缘,规模,空间关系等等,通过在视觉效果上的绝佳配合来指引用户,为用户提供前进路线。
- 设计时,应该有一些想象中的环境,做为你设计元素的容器其约束。一个运动只发生在一个对应的环境。
- UI设计上的运动需要保持连贯性
- 不为用户的输入类型评级:所有的输入是第一级别。包括、鼠标、触控、感应、声音等等任何输入。
当然目前Material设计思想并不是100%合理,目前的一些规范还在持续修改中。建议如果是设计UI的话,不要太死板100%去参照原则。想想之前的Metro,则出的时候也很炫,但最终普及的程序也不咋样。
上面说到设计理念上有一条是跨不同设备,个人认为只是设计理念上的跨设备,而不是实现上的跨设备,比如在一些规范方面也有定义一些间距大小,排列组合等,各种设计规范如Logo,图标的设计规范等都有。对于设计师来说并不是说出一个psd就可用在所有端,对于程序员来说也并不是说一套代码各端通用。但设计上的理念一致,可以减少很多不同之处的处理。
从目前来看,考虑到的设备有电脑、笔记本、手机、平板、手表、电视、车载。如果有其它的设备应该也可以适用。现在自家的应用应该就是Android5,Chrome OS,以及一些官方的手机APP。
设计原理
总的来说,Material设计取材于大自然,对于设计里面的元素讲究一个“遵循自然法则”。让用户体验也接近于“自然”,学习成本达到最低。
Material是以一个三维世界的设计思想构造的,和以前平面设计的思想不同,之前平面设计时只x,y轴,使用Material设计时要考虑一条z轴,这点很不好理解,尤其对web设计者而言。官方给出的解释是Z轴在web里面表示分层(z-index)
设计时要考虑光照与阴影的情况,由于是一个3d的世界,所以有光照就会有阴影。一般会有单个光源,多个光源等情况,阴影会随着光源与运动变换。
3D特性
和普通设计思想最大的区别就是,在Material的世界里,元素是立体的,除了有宽度和高度外,还有厚度(参考大自然)。对于一些三维的设计来说,有个参考,但我们大多数用的软件(特别是Web)UI都是平面的,特别是网页来说,要怎么把厚度表达出来呢?
一个元素是由x,y组成的一个平面图形,厚度为 (且仅为)1dp。
即两个元素不能重叠,要么元素A放在元素B上面,要么下面,(当然还可以旁边,但不能有重叠)。两个元素不能同时点用一个容量(甚至不允许有交集!)
如果有阴影,那么放在上面的图形的阴影会投到下面的图形上。参考现实世界的光照。
想像一下:如果你的UI上自上而下有A,B,C三个纸片,想像一下,自然光照时,就应该是这样,A的阴影有一部分在B上,也可能有一部分在C上,有一部分在地上,B的阴影有一部分在C上一部分在地上,C虽然紧贴地面,但C有一个单位的厚度,所以应该可以看到以的边上有极细的阴影。
另现实世界的光照,可以是阳光,也是以是霓虹灯、无影灯等任何光源,光源和你的元素都可以被移动,移动时要注意阴影的变化,同样参考自然中的变化。
内容放在元素上,内容是没有厚度的,一个内容可以是任何形状、颜色、文本、图像、多媒体等。
在我们实际编程中,内容和元素都是一个一个的元素,这里就要注意设计规则了,对开发人员的考验就是哪些是元素,哪些是元素上的内容。
内容整个显示在元素上,也可以裁切后做为一部分显示在元素上
按照我个人的理解,直接HTML版:元素就是容器,overflow:hidden,超出元素个的内容都不会显示。可内容,可以以任何形态(放大、缩小、偏移、居中、隐藏)等等显示在元素上,只要考虑一点,在设计规则上,这个内容是属于这个元素的!
输入事件只发生在事件元素上,比如在B元素的输入事件,不能在A元素输入产生
只能说在A输入可以带动B,不能说A能操控B
元素不能凭空穿越
比如以前流行的愿望贴纸系统,点一个贴纸就神奇的出现在最顶了,这种体验在Material里面是不允许的,只能“撕开上面的贴纸,才能看见下面的贴纸”
元素可以变换形状,但只允许平面变换不允许立体变换,如各种折纸,翻页效果是不允许的
一个元素可以拆分,多个元素也可以合并
元素可以凭空取来,或者凭空销毁
元素可以在平面内任意移动
用户主动交互时,使用z轴运动是一个较好的方法。(比如一般一个按钮用户摸了一下就有种“弹起来了”的感觉即为Z轴运动的一种体现方式)
当然上面是平面化的3D规范,Material 对实际的 3D 的 UI 规范也做了相应规范,但接触的少,就没关注了,有兴趣做3D的UI的同学可以自己去看Material 3D的相关规范。
运动
总的一条,考虑自然运动。比如上抛,下落,滑动时要想像一下,给的力度有多大,元素的重量,大小等,要接近自然。
- 所有的用户输入同等重要,如鼠标、声音、触摸、键盘等,都要对用户做出响应
- 用户只要有输入,就应该马上响应,让用户感受到输入已经成功
- 从哪里输入,就从哪里响应
- 即使不需要执行动作的输入,也可以响应,比如划过,拖拽的过程中间,做出较淡的响应。(如蒙层等)
层过渡
两个视觉的过渡应该清晰、光滑,看上去毫不费力,这样的话视觉会自然的跟着焦点走。
新的层的创建过程要有一个介绍性的过渡过程,不要“闪现”出来,旧的元素也可以慢慢过渡至不显示,过渡过程时有“过渡元素”
- 从用户输入的地方开始过渡
- 视觉切换时使用过渡连接,不能“闪”
- 过渡过程要符合物理运动定理,比如匀速,加速等,有规律的
- 过渡过程应该有序,不要太随意分散,避免空间冲突重叠
- 避免线性空间路径,除非运动限制为一个轴或向/从一个点与其他元素。
- 避免较深的元素运动,最好只运动最上面层上的元素
- 运动不是一个元素的事,利用界面上的其它元素的位置尺寸关系,一起动起来,看起来才能匀称无缝
- icon 变化的时候最好有个形状变化的过程
其它
当然内容有点多,本人太懒,不可能全部写完,Material Design规范还定义了颜色,图标,Layout等等相当多的规范,而且还提供了最佳体验一些建议的值及DEMO等。
- 颜色规范
柔和的环境上配置大胆的色调、明亮的下面有阴影。选色彩时通常以当代较moden的建筑、路标、市集、等等现实元素。具体颜色的选取应该是出乎意料的,朝气蓬勃的。
这里 Google 推荐了500多种颜色,可根据自己UI的主题直接选用,可以参考Color
- 图标规范
Material对图标的设计极为讲究,分别为产品Icon与系统Icon,可以参考Icon
- 布局规范
在Matreial设计里面,布局是非常讲究的,文字大小间距标题间隔,空白大小都有非常精确的定义,一至七级标题的字体大小也都有定义,开发者只需要把基础布局好,后续是文字是标题还是段落只要按格式输出就行了,不用特意考虑每一个元素的样式 。
在Google的描述里面,重点描述了在手机上的布局
更多
对于组件的设计,也有很详细的标准。由于内容太多所以不具体说明了,可以去网页上参考,这里只整理个列表
- 内容元件
- 底部弹出的表格(如分享到、菜单等等 )
- 按钮
- 浮动的按钮
- 碎块
- Chips
- 数据表
- 窗口
- 分割线
- 栅格
- 普通列表
- 用于控制的列表
- 彩单
- 选取
- 进度
- 下拉控制
- 滑块
- Snack Bars & toasts
- 头
- Tabs
- 文本输入
- 工具栏
- 操作提示
- 组成部分
- APP结构
- 数据
- 错误
- 手势
- 图片加载
- 滑出导航
- 切换导航
- 滚动
- 搜索
- 选择
- 设置
- 滑动切换