设计规范价值
制定设计规范的益处是设计一套约定设计语言,根据约定设计语言搭建一套设计框架,达到设计和开发的统一性、可复用性、可扩展性。
一致性
通过高层设计规范约束,低层依赖高层,达到页面的统一性。
可复用性
搭建设计框架,低层复用高层组件。经过项目实践、设计变得可迭代,更新后的设计框架又可以复用到项目中。
质量保障
开发和设计使用同一套语言,在开发阶段,就有依据校验设计的问题,从而规避一些设计问题。
相较于传统设计中,设计只能单人进行,若无相关约束,设计质量只能依据个人经验,质量得不到可靠保证。通过制定设计规范,设计语言经过多名设计和开发参与,相较于个人经验,质量得到极大提升,依据实际项目迭代,更新设计语言,达到可靠的设计表达。
可扩展性
制定设计语言,在开发层面上,通过在高层制定设计规范,低层依赖设高层设计,可轻松达到主题定制、样式调整等效果。
降低使用成本
制定设计语言,根据阅读设计规范,新人也能快速入手,并达到可靠的设计质量和页面效果。通过使用设计语言制定的基础组件,极大减少了由于个人原因造成的设计错误,并保证了一些极其细微的设计细节。
设计原则
清晰性 结构布局、内容消惑、及时反馈
一致性 韵律、务实、美
准确性 歪曲、遗漏、误导
有效性 重点、克制
命名规范
颜色命名规范
--property_primary
--property_secondary
// status:click、hover、disabled、activated...
--property_[status]
大小命名规范
--property_small
--property_regular
--property_medium
--property_large
多个等级命名规范
--property_neutral_rank
eg:
--font-color_neutral_1: #ffffff;
色彩
品牌色、功能色、中性色。
从一致性考虑,使用邻近色;
从重点内容考虑,使用对比色;
从用户情感考虑,使用功能色;
品牌色
常用于主要按钮和文字、重点操作状态、高亮提醒、空状态等。
:root {
--primary-color: #165dff;
--primary-color_click: #0e42d2;
--primary-color_hover: #4080ff;
--primary-color_disabled: #94bfff;
}
功能色
主要作用是向用户明确的传达成功、警告、错误、链接等信息和状态。此外色彩还是人类情感的一部分:
成功代表正面情感,表示可行、植物、安全等含义。
警告代表注意、阻止等含义。
错误代表负面情感,表示不可行、严重、危险、失败、热量等含义。
链接代表中性情感,表示提示,引导等含义。
:root {
--success-color: #009a29;
--warning-color: #d25f00;
--error-color: #cb2634;
--link-color: #0e42d2;
}
中性色
主要作用调和色彩搭配,衬托主色及其他色彩,同时拉开内容层次,使用户更专注于内容。常用于文字、背景、图标、边框和分割线等元素。
:root {
--border-color_primary: #e5e6e8;
--background-color_primary: #ffffff;
}
字体
字体、字体大小、字体权重、字体颜色。
字体
字体等宽、识别度高、混排美观、跨平台性。
引入外部扩展字体会增加数据包的容量,影响加载性能,同时需要兼顾 fallback 原则。
html, body {
font-family: Roboto,"Helvetica Neue", "Segoe UI", Tahoma,Verdana, -apple-system, BlinkMacSystemFont ,sans-serif;
font-variant-numeric: tabular-nums;
}
字体大小
:root {
--font-size_small: 12px;
--font-size_regular: 14px;
--font-size_medium: 16px;
--font-size_large: 20px;
}
字体权重
同一个字体的不同字重能传达不同的信息权重和情绪。细的字体给人以细腻、轻快的感觉,而粗体则给人着重和严肃的认知。多数情况下,采用 Regular 以及 Medium 的两种字体重量,分别对应代码中的 400 和 500;在英文或数字字体加粗的情况下会采用 semibold 的字体重量,对应代码中的 600。
:root {
--font-weight_small: 300;
--font-weight_regular: 400;
--font-weight_medium: 500;
--font-weight_large: 600;
}
字体颜色
字体颜色应当考量与背景色等关系,我们参考了 WCAG 的标准,将正文文本、标题和背景色之间保持在了 7:1 以上的 AAA 级对比度。
:root {
--font-color_primary: rgba(0,0,0,0.65);
--font-color_secondary: rgba(0,0,0,0.45);
--font-color_placeholder: rgba(0,0,0,0.2);
--font-color_disabled: rgba(0,0,0,0.25);
}
间距
间距包括行高、内边距、外边距。
行高
行高一般与字体大小有着对应关系,目前通用的建议中,西文的基本行高是字号的1.2倍左右,中文因为字符密实且高度一致,根据阅读人群划分(儿童、年轻人、老年人),可达到 1.5 至 2 倍甚至更大。
:root {
--line-height_primary: 1.4em;
}
内边距
内边距是指元素内部空出的空间,一般用来控制内容与边框的空间。
:root {
--padding_small: 8px;
--padding_regular: 16px;
--padding_medium: 24px;
--padding_large: 32px;
}
外边距
外边距是指元素与元素之间的距离。
:root {
--margin_small: 8px;
--margin_regular: 16px;
--margin_medium: 24px;
--margin_large: 32px;
}
边框
边框是元素的边界,代表着视觉的分割。一个边框由四部分组成:边框样式、边框宽度、边框颜色、边框弧度。
:root {
--border_regular: 1px;
--border_medium: 2px;
--border-radius_regular: 4px;
--border-radius_medium: 8px;
--border-radius_large: 50%;
}
效果
我们常用一些效果来辅助元素实现实现视觉效果的分层、对比。
1、阴影
不同的阴影高度可以代表不同的元素层级。
:root {
--box-shadow_neutral_1: 0px 2px 5px 0.1px #000000;
--box-shadow_neutral_2: 0px 4px 10px 0.1px #000000;
--box-shadow_neutral_3: 0px 4px 10px 0.1px #000000;
--box-shadow_neutral_4: 0px 8px 20px 0.1px #000000;
}
2、滤镜
滤镜,通常用来创建一个高级、趣味性的效果。
@mixin filter{
--bg-color: #fff;
backdrop-filter: saturate(50%) blur(4px);
background-image: radial-gradient(transparent 1px,var(--bg-color) 1px)
}
3、背景
背景,通常用来显示区分视觉元素,达到视觉效果的层级和对比增强。
:root {
--background-color_primary: #ffffff;
}
5、动画
动画是设计中常用的元素,通常用于引导和过渡,它需要遵循以下原则:自然、高效、克制。
辅助
1、空白方案
空白文案组件。
2、Loading 方案
Loading 组件。
3、动画方案
常用动画设计。
通用样式
1、文本省略
// 单行省略
@mixin ellipsis {
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
// 多行省略
@mixin line_clamp($line) {
display: -webkit-box;
-webkit-line-clamp: $line;
-webkit-box-orient: vertical;
display: -moz-box;
-moz-line-clamp: $line;
-moz-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
white-space: normal;
}
2、滚动条
$thumb-color: #f0f2f5;
$track-color: #fff;
$thumb-width: 6px;
$thumb-radius: 3px;
html,
body {
/* FireFox */
scrollbar-color: $thumb-color transparent;
scrollbar-width: thin;
/* IE */
scrollbar-face-color: $thumb-color;
scrollbar-highlight-color: #fff;
scrollbar-track-color: $track-color;
scrollbar-base-color: #fff;
}
// WebKit
::-webkit-scrollbar {
width: $thumb-width;
}
::-webkit-scrollbar-thumb {
border-radius: $thumb-radius;
background: $thumb-color;
}
::-webkit-scrollbar-track {
background: $track-color;
}
3、内容提示说明
内容省略说明、内容解释说明等。
使用指南
1、下载 VSCode 插件
下载 CSS Variable Autocomplete, 安装使用。
2、CSS 使用
3、JavaScript 操作 CSS Var
// 修改全局 var
let root = document.querySelector(':root')
root.style.setProperty('--font-color_primary', '#fff');
// 修改某元素 var
this.$el.style.setProperty('--width', '120px')
// style eg:
div {
width: var(--width);
color: var(----font-color_primary);
}
4、theme 定制
组件库样式,采用 theme/theme.scss进行覆盖
组件库组件样式覆盖,采用style/components/[component].scss进行覆盖
全局样式,采用 global.scss进行约定
全局封装样式,采用 mixin.scss进行约定
全局变量,采用var.scss进行约定
全局动画,采用tansition.scss进行约定
本文正在参加「金石计划 . 瓜分6万现金大奖」