Material Design 设计思想

Material Design 为一种设计UI的思路,由Google推出,看了之后觉得此UI用户体验不错,特自行总结一小下。

Materail基本原则

  1. Material Design 仅仅只是一个设计原则。只要按照设计原则的实现都可以称自己有Material思想在里面。
  2. 跨平台之间,跨不同的设备之间,可以统一设计标准。
  3. 以自然科学为设计思想,比如物理学,光学等等,接近人本身对事物的感知。
  4. 实现设计的思路主要是以颜色,大小,边缘,规模,空间关系等等,通过在视觉效果上的绝佳配合来指引用户,为用户提供前进路线。
  5. 设计时,应该有一些想象中的环境,做为你设计元素的容器其约束。一个运动只发生在一个对应的环境。
  6. UI设计上的运动需要保持连贯性
  7. 不为用户的输入类型评级:所有的输入是第一级别。包括、鼠标、触控、感应、声音等等任何输入。

当然目前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的相关规范。

运动

总的一条,考虑自然运动。比如上抛,下落,滑动时要想像一下,给的力度有多大,元素的重量,大小等,要接近自然。

  • 所有的用户输入同等重要,如鼠标、声音、触摸、键盘等,都要对用户做出响应
  • 用户只要有输入,就应该马上响应,让用户感受到输入已经成功
  • 从哪里输入,就从哪里响应
  • 即使不需要执行动作的输入,也可以响应,比如划过,拖拽的过程中间,做出较淡的响应。(如蒙层等)

层过渡

两个视觉的过渡应该清晰、光滑,看上去毫不费力,这样的话视觉会自然的跟着焦点走。

新的层的创建过程要有一个介绍性的过渡过程,不要“闪现”出来,旧的元素也可以慢慢过渡至不显示,过渡过程时有“过渡元素”

  1. 从用户输入的地方开始过渡
  2. 视觉切换时使用过渡连接,不能“闪”
  3. 过渡过程要符合物理运动定理,比如匀速,加速等,有规律的
  4. 过渡过程应该有序,不要太随意分散,避免空间冲突重叠
  5. 避免线性空间路径,除非运动限制为一个轴或向/从一个点与其他元素。
  6. 避免较深的元素运动,最好只运动最上面层上的元素
  7. 运动不是一个元素的事,利用界面上的其它元素的位置尺寸关系,一起动起来,看起来才能匀称无缝
  8. icon 变化的时候最好有个形状变化的过程

其它

当然内容有点多,本人太懒,不可能全部写完,Material Design规范还定义了颜色,图标,Layout等等相当多的规范,而且还提供了最佳体验一些建议的值及DEMO等。

  • 颜色规范

    柔和的环境上配置大胆的色调、明亮的下面有阴影。选色彩时通常以当代较moden的建筑、路标、市集、等等现实元素。具体颜色的选取应该是出乎意料的,朝气蓬勃的。

    这里 Google 推荐了500多种颜色,可根据自己UI的主题直接选用,可以参考Color

  • 图标规范

    Material对图标的设计极为讲究,分别为产品Icon与系统Icon,可以参考Icon

  • 布局规范

    在Matreial设计里面,布局是非常讲究的,文字大小间距标题间隔,空白大小都有非常精确的定义,一至七级标题的字体大小也都有定义,开发者只需要把基础布局好,后续是文字是标题还是段落只要按格式输出就行了,不用特意考虑每一个元素的样式 。

    在Google的描述里面,重点描述了在手机上的布局

更多

对于组件的设计,也有很详细的标准。由于内容太多所以不具体说明了,可以去网页上参考,这里只整理个列表

  • 内容元件
    • 底部弹出的表格(如分享到、菜单等等 )
    • 按钮
    • 浮动的按钮
    • 碎块
    • Chips
    • 数据表
    • 窗口
    • 分割线
    • 栅格
    • 普通列表
    • 用于控制的列表
    • 彩单
    • 选取
    • 进度
    • 下拉控制
    • 滑块
    • Snack Bars & toasts
    • Tabs
    • 文本输入
    • 工具栏
    • 操作提示
  • 组成部分
    • APP结构
    • 数据
    • 错误
    • 手势
    • 图片加载
    • 滑出导航
    • 切换导航
    • 滚动
    • 搜索
    • 选择
    • 设置
    • 滑动切换