Brand Mark
品牌图形
图形和名称一起出现,入口保持一致。
设计与开发指南
创易共享的设计原则、语义 token 与 Vue 组件。为设计和开发提供同一套依据,让界面保持清晰,让注意力留给创作。
用语义说明信息,用墨线表达关系。颜色、字形和密度随内容职责变化,组件结构与可访问性保持一致。
中性表面承载内容,紫墨指向行动;完成、提醒与错误使用各自的反馈色。浅色与深色使用同一组语义名称。
画布
background
页面环境
纸张
card
独立内容表面
紫墨
primary
主操作与选中
完成
success
确认成功结果
提醒
warning
需要留意的状态
危险
destructive
失败与破坏性操作
使用 bg-primary、text-primary-foreground 等成对 token。状态同时提供文字或图标,不能只由颜色传达。
font-ui 与 font-display 承担界面,font-editorial 承担作品与引文,font-data 承担参数和短标签。字体使用完整系统回退栈。
清楚的操作,安静的界面。
font-ui / 界面与控件
雨停之后,故事继续。
font-editorial / 作品正文
v2 / 2026-10-13 / 128
font-data / 数字与短标签示例
墨线表示当前位置、焦点和内容关系。用留白组织普通内容,独立对象才使用容器。
通过 data-density 设置局部环境。未指定尺寸的组件跟随容器,显式 size 保持自身尺寸;密度不缩小必要的触控区域。
紧凑
compact
信息流、排行与筛选
默认
default
账户、设置与通用表单
阅读
reading
文稿、创作与内容编辑
| 用途 / utility | 字号 / 行高 | 字重 |
|---|---|---|
| 辅助标签text-caption | 12 / 18 | 500 |
| 字段标签text-label | 14 / 20 | 500 |
| 列表摘要text-body-sm | 14 / 22 | 400 |
| 通用正文text-body | 16 / 26 | 400 |
| 局部标题text-title-sm | 20 / 28 | 600 |
| 面板标题text-title-md | 24 / 32 | 600 |
| 页面标题text-title | 32 / 40 | 600 |
中文正文使用自然换行与完整回退字体。长篇阅读单行约 28–34 个汉字,数字对比列用 tabular-nums。
间距以 4px 为基础单位。图标与文字常用 gap-2,字段和列表常用 gap-3 / gap-4,区块使用 gap-6 / gap-8。
响应式与可访问性
布局优先移动端,标题自然换行;主要触控目标至少 44px。键盘焦点始终可见,字段错误关联到控件,减少动效偏好下保留完整内容与状态。
对照真实控件的强调层级、尺寸与状态。颜色说明用途,文字说明结果;焦点、禁用、只读和错误分别表达不同含义。
主操作用 default,次要操作用 outline;destructive 表示有破坏性影响的动作。
尚未操作
精细指针下,五档高度为 28 / 32 / 36 / 40 / 48px。粗指针下主要触控目标补足 44px;未指定 size 的按钮随容器密度变化。
加载由 Spinner、文字和 aria-busy 组合。禁用要说明原因,并在任务结束后恢复操作和焦点。
示例可以继续操作
用 Tab 查看焦点,Enter 或 Space 激活。等待演示由你手动结束,不提交业务请求。
可聚焦、可选择复制。
不接收输入与键盘焦点。
错误保留输入内容与修正机会。Field 的 data-invalid、控件的 aria-invalid、关联的 FieldError 一起维护。
目录收录 68 个共享组件族。选择类别,核对真实控件的结构、状态与交互;所有演示仅在当前页面生效。
identity / 4
让创易在不同入口保持同一个面貌。
点击控件,观察状态变化
品牌图形
图形和名称一起出现,入口保持一致。
明暗主题
点击切换浅色、深色与跟随系统。
身份头像
林间来信
创作者
没有上传照片时,用姓名首字保持身份可辨。
头像容器
头像容器也能组成紧凑的协作成员列表。
组合导航、视图切换和操作反馈。翻页在边界禁用,收藏即时更新,完成与归档状态由文字和控件共同表达。
模式说明
Breadcrumb 表示位置,ToggleGroup 切换视图,Dialog 与菜单承载次级操作。主按钮表达当前文稿状态。
示例文稿
Chapter 01 / 03
雨停时,街角的钟比平时慢了两分钟。她合上手里的旧地图,决定沿着那条从未走过的路回家。
01 / Button + Button Group
翻页有边界,完成文稿才使用最明确的操作。
02 / Toggle + Toggle Group
收藏即时生效;正文与目录保留清晰的选中状态。
03 / Menu + Dialog
次要操作收进菜单,预览则在当前文稿之上展开。
交互结果仅在本页生效;完整组件见上方展厅。
Tab 可逐项体验交互
Field 组织标签与控件,修改后显示未保存状态,预览通过 Dialog 保留当前上下文。示例只在本页生效。
示例更改已记录
组合规则
Field / Input / Textarea / Button / Dialog
观察组件在条件检查、筛选和表单校验中的组合方式。示例数据不提交业务服务,也不表示已开放的产品功能。
创作态 · 阅读密度
清单告诉创作者还需要完成什么。满足条件后,操作才会变得可用。
Button / Checkbox / Progress / Alert
作品 · 城南的末班车
发布准备
1 / 3 项已完成
设计、组件和实现沿用同一份规范。基础能力由共享 UI 持有,产品数据、权限和业务流程留在应用内。
动作保留 Enter 与 Space,跳转保留新标签页和链接语义。
是否立即生效决定控件,不以外形选择。
页签切换内容面板,选项组改变一个值。
按选项数量、选择规则和搜索需求决定。
关键错误留在任务附近,短暂通知只补充结果。
预览保留上下文,确认先说明影响与取消方式。
先查阅已有组件,再按实际用途组合。共享包直接导出 Vue 与 TypeScript 源码,由应用构建。
import { Button } from '@chuangyi/ui/button';
import { Field, FieldLabel } from '@chuangyi/ui/field';
import { Input } from '@chuangyi/ui/input';styles.css 提供主题、reset 与共享组件的 utility。字体按应用需要单独加载,避免默认下载完整中文字库。
@import 'tailwindcss';
@import '@chuangyi/ui/styles.css';
/* 需要思源字体的应用单独接入。 */
@import '@chuangyi/ui/fonts.css';字体是可选入口,不做全局 preload。当前 Landing 与 Work 接入,Hub 使用系统回退字体;采用前评估字库体积与布局位移。
email 与 error 由业务层持有;错误保留用户输入,并关联到实际控件。导入 FieldError 与 FieldDescription 后组合如下。
<Field :data-invalid="Boolean(error)">
<FieldLabel for="contact-email">接收邮箱</FieldLabel>
<Input
id="contact-email"
v-model="email"
name="contact-email"
type="email"
autocomplete="email"
:aria-invalid="Boolean(error)"
:aria-describedby="error ? 'email-error' : 'email-help'"
/>
<FieldError v-if="error" id="email-error">{{ error }}</FieldError>
<FieldDescription v-else id="email-help">
用于接收作品更新。
</FieldDescription>
</Field>复用多个字段时,每组 id 必须唯一。提交失败聚焦第一个错误;请求进行时防止重复提交,失败后允许重试。
同一容器内的控件共享密度,只有确需稳定尺寸的工具栏或表单才显式指定 size。
<div data-density="compact">
<Button variant="outline">筛选作品</Button>
<Button size="lg">固定尺寸的操作</Button>
</div>布局使用 Tailwind utility,表面、文字、操作和反馈使用语义颜色。容器通过 data-density 选择密度;不在业务页面建立第二套色值与尺寸。
设计契约见 packages/ui/DESIGN.md,主题实现见 packages/ui/src/theme.css。组件 API、token 或交互变化时,同时校准规范、展厅实例与使用说明。目录完整性测试会核对每个组件族与导出名称。