【Cloudscape云景】React框架的使用-文档细读-云景的视觉基础 .
cloudscape.design/ 这是框架的官网
官网首页homepage
An open source design system for the cloud适用于云计算的开源设计系统
Cloudscape offers user interface guidelines, front-end components, design resources, and development tools for building intuitive, engaging, and inclusive user experiences at scale.
提供了用户页面指南, 前端组件, 设计资源和开发工具, 用于构建直观, 吸引人的, 具有包容性的大规模用户体验
官方文档分成四个部分:
Foundation部分-云景的视觉基础
A great user experience is comprised of more than components and individual patterns. Cloudscape visual foundation includes our color palettes, iconography, use of spacing, motion, and more.
出色的用户体验不仅仅是由组件和单个图案组成的。云景的视觉基础包括我们的调色板、图标、间距的使用、动作等。
这一节又分为下面13小节
- Colors颜色
- Content density 内容密度
- Data visualization colors数据可视化颜色
- Design tokens 设计代币
- Iconography 图标
- Layout布局
- Motion动效
- Spacing间距
- Theming主题化
- Typography 版式
- Visual context 视觉语境
- Visual modes视觉模式
- Visual style视觉风格
1.颜色:
这部分实际列出了, 在这个框架中, 每部分是按照怎样的设计要求和思想设计的颜色.
这部分提到了design token 设计令牌, 主要是为了实现视觉模式(暗色主题/浅色主题切换)
- 突出显示和强调:
蓝色
主要用于引起人们对页面上主要操作的注意。它还应该用于辅助操作、链接,并强调交互元素。 - 编码 和关联:
红色
和绿色
状态颜色应主要用于指示资源的状态,以便用户可以采取行动,并确信其他资源运行正常。
2.内容密度
内容密度部分主要是改变组件之间间距来实现的.
一致性: 所有的组件基本都适配这两种模式
灵活性:可以选择用户喜欢的密度级别(4px为增量)
可读性: 帮助面板,警报,闪存条, 表单验证信息是不受控制的.
互动性: 对有额外互动的组件进行了设置. 仪表盘, 资源列表,资源详细信息
3.数据可视化颜色
这部分主要关于数据可视化组件的颜色的配置的.分成以下几部分
饼图: piechart
使用的叫做: Status and severity palette 状态和严重性调色板
和颜色部分一样, 这部分是记录了每个颜色的使用方式和使用原则. 以及sass和js两种引用方法.
折线图 linechart
使用的是: Generic categorical palette通用分类调色板
要求是, 每个类之间没有联系, 没有程度划分, 但是要有视觉冲击, 就使用这个. 代表就是柱状图和折线图.
Threshold colors阈值颜色
这里放一下自定义调色板的源码, 这是一个算法, 主要原理就是尽可能的不选择相邻的值, 如果要选择也会选择尽可能远的
// The function takes an array of color scales, with each scale being an array of color values (or token names)
function makeChevronPalette(scales) {
const scaleCount = scales.length;
const colorsPerScale = scales[0].length;
const finalColors = new Array(scaleCount * colorsPerScale);
for (let i = 0; i < scaleCount * colorsPerScale; i++) {
const round = Math.floor(i / scaleCount);
const scaleIndex = i % scaleCount;
const colorIndex = ((scaleIndex % 2 === 0 ? 0 : 2) + ((3 * round) % colorsPerScale)) % colorsPerScale;
finalColors[i] = scales[scaleIndex][colorIndex];
}
return finalColors;
}
// Example usage
import * as awsui from '@cloudscape-design/design-tokens.js';
const colors = makeChevronPalette([
// Receives a total of 30 color values from three different scales, returns the 30 color values in a new order.
[awsui.colorChartsRed300, awsui.colorChartsRed400, /* ... */ awsui.colorChartsRed1200],
[awsui.colorChartsTeal300, awsui.colorChartsTeal400, /* ... */ awsui.colorChartsTeal1200],
[awsui.colorChartsOrange300, awsui.colorChartsOrange400, /* ... */ awsui.colorChartsOrange1200],
]);
4.设计代币design token
这里涉及到原子设计.如果组件是充当系统基本构建块的原子,那么设计令牌就是用于构建组件的亚原子粒子。bradfrost.com/blog/post/e…
这主要的目的就是, 设计系统不断地变化, 我们只需要只用key, 而不需要关注于value值. (可定制)
比如上述的例子: 颜色>背景>输入>禁用
代表的就是. 输入组件 在 禁用状态时 的 背景颜色
这样的话我们就可以在一个地方, 写满整个项目中我们会用到的颜色.
这里是两种使用方式, 一个是sass, 另一个就是js变量,但是里面还是用的sass变量.
5.图标
这部分内置了一些图标
6.布局
这部分直接提供了几个布局组件
网格, 应用程序布局和列布局.
7动效motion
动效有助于将用户的注意力吸引到页面上的关键元素和交互上,而不会干扰他们对整个任务的注意力。
提供了, Scale, Fade, Slides的动效
8.间距
可以使用三个选项来控制间距。
盒子模型的padding,margin,浮动属性
组件之间的间距选项, 比如: 操作条按钮之间的间距,表单字段的间距, 容器之间的空间.
9. 主题化
主题化是为了将组件轻松的满足自己公司的设计要求. 可以配置自己公司的dark和light模式
这部分提供了两种方式实现主题化: 构建时主题化Build-time theming和运行时Runtime theming主题化
运行时就相当于css内联样式, 在程序执行时候让浏览器加载一个新的css文件, 将其全部覆盖.
构建时主题化就是直接更改内部组件主题.
buildtime
import { join } from 'path';
import { buildThemedComponents } from '@cloudscape-design/components-themeable/theming';
const theme = {...};
buildThemedComponents({
theme,
outputDir: join(__dirname, './themed'),
});
这个部分是预处理的
执行后,该/themed
文件夹将包含:
/components
使用您的自定义主题导出 Cloudscape 组件的文件夹/design-tokens
导出设计标记的文件夹
有了这个文件后只用webpack的别名alias功能, 将程序所有导入的组件和设计令牌重定向自己的路径而不是npm中的.
这里使用了"装饰器模式"的设计模式. 它允许你在运行时动态地修改对象的行为,而不改变其源代码
主题系统通过生成一套新的组件(装饰器),来修改原始组件的行为(在这里是视觉样式),而不改变原始组件的源代码
// webpack.config.js
const path = require('path');
module.exports = {
//...
resolve: {
alias: {
'@cloudscape-design/components': '[outputDir]/components',
'@cloudscape-design/design-tokens': '[outputDir]/design-tokens',
},
},
};
运行时 runtime
import { Theme, applyTheme } from '@cloudscape-design/components/theming';
const theme: Theme = {...};
const { reset } = applyTheme({ theme });
// Use the reset method to remove the custom theme
10.Typography版式
一般包含字体, 段落样式,代码风格,列表样式等. 主要涉及到文字的显示
这部分使用md的会好理解一些.
11.视觉语境
视觉语境context的意思就是全局样式和局部样式.
全局字体颜色是黑色, 在警告里可能就是红色.
然后文档里还提到了, 还会根据主题进行相应的变化, 比如: 在一个深色主题的背景下,一个按钮可能会使用浅色的文字和边框,以确保其可见性;而在浅色主题的背景下,同一个按钮可能会使用深色的文字和边框。
还涉及到了密度模式和主题.
12.视觉模式
主要就是亮色和暗色风格
13.视觉风格
这里主要提到的就是阴影. 边框和分割线, 轮廓和填充.