本规范是 Rhine Design 的设计基线,覆盖色彩、文字、组件状态、布局和动画,供不同产品复用。配套 React 实现为 @linhey/rhine-design;版本演进见CHANGELOG,组件契约见组件入口。
暖白背景、苔绿结构、墨色文字、细线分隔和少量橙色定位形成安静、精密的秩序。三角几何用于品牌结构,装饰不穿过正文、不遮挡操作,不制造虚假仪表状态。参考作品仅提供风格方向;标志、参数和实现是独立设计,不构成官方VI。
- 状态真实:未知不显示为零,操作完成前不宣称成功,刷新失败可保留旧数据并标明时效。
- 可读优先:系统字体、清晰层级、自然换行;200%缩放不丢失文字或操作。
- 交互连续:忙碌保留焦点,浮层有明确退出与焦点归还;快速重播和打断不留下透明遮挡。
- 组件优先:先更新规范、组件与真实展台,再由消费项目选择版本;业务流程不进入通用组件。
- 动效克制:反馈服务于状态理解,就绪不等待装饰,减少动态不削弱功能。
- 以用户任务为中心消融:先保留身份、当前动作、结果与必要后果;去掉重复状态和不影响决策的机制长文,历史按需展开。已有外层 Surface 时,只读额度与事实优先无框紧凑组合;压缩不靠缩小字号、裁数字或隐藏未知/失败。具体取舍与反例见紧凑摘要与凭证操作。
密集任务浮层的落地规则:先按用户决策划分常显/按需信息;区域标题、数量和操作集中到导航行;短内容自然撑高、默认单层滚动;可见间距与44px操作范围分别验证。详见场景与交互规范和间距组合,选择即保存仅按其适用边界使用。
侧栏已经明确当前页面的平级工作区,顶部默认不再重复“工作空间 / 当前页”面包屑或页面大标题。顶部用于导航展开、当前对象/连接状态与实际操作;正文直接呈现任务内容。保留主内容的可访问名称、一级标题(可用 rhine-sr-only)以及导航 aria-current,路由变化后仍将焦点移入正文。
移除标题不等于移除操作行:窄屏抽屉、收起侧栏后的恢复入口、刷新和必要状态必须持续可达。没有可见内容的操作容器无需为标题预留额外高度;若承载恢复入口,应按实际可见控件保留。只有存在真实父子资源层级且用户需要返回上级时才使用 Breadcrumbs,不把它作为每个页面必填的装饰。组件本身继续提供该能力。组合与验收见应用布局契约。
列表搜索与筛选优先使用共享 ListFilterBar:可选搜索、最多两个常显条件、统一的更多筛选 Drawer、活跃条件摘要、结果与刷新,再加至多一个业务操作。少条件页面不补空入口,多条件页面不靠新增控件行扩张。筛选业务状态与服务端查询仍归宿主,Drawer 内同步显示加载/错误;批量动作留在结果区。该 API 在 0.9.0 新增,消费时核对安装版本;契约、消融依据与真实展台见列表筛选栏。
公开样式接口统一使用 rhine-:主题根 .rhine-theme、变量 --rhine-*、组件类与关键帧 rhine-*、减少动态属性 data-rhine-motion="reduced"。消费项目的品牌名称只通过内容与组件参数传入,不进入共享命名空间。
健康历史使用独立的明亮图形色:--rhine-health-healthy: #19B88A、--rhine-health-recovered: #42B8C8、--rhine-health-degraded: #EFA629、--rhine-health-failed: #EF6464、--rhine-health-unknown: #C5CCD3。这些颜色只用于健康条和图例,不替换苔绿品牌色或正文/错误文字色;恢复态叠加斜纹,选中时段提供文字与可访问名称。不能把图形色用于小号文字或只凭颜色区分状态。
密集账号列表只常显身份、额度和健康条,日期、粒度、优先级机制等共享说明移至按需入口;未知/不完整/错误仍常显。StatusTimeline compact将重复时段说明改为悬停/聚焦浮层,保持44px操作区与键盘浏览,不以健康百分比替代历史证据。
| Token | 值 | 用途 |
|---|---|---|
--rhine-bg |
#F2F1E9 |
窗口底色 |
--rhine-surface |
#FCFCF8 |
卡片、输入、浮层 |
--rhine-ink |
#242B28 |
正文、主按钮 |
--rhine-muted |
#59645D |
次级文字 |
--rhine-line |
#C5CCC1 |
装饰分隔线,不独立承担控件识别 |
--rhine-control |
#78857B |
必须可识别的控件边界 |
--rhine-selected |
#E5ECE3 |
选中背景 |
--rhine-green |
#425C4B |
选中标记、成功文字、焦点环 |
--rhine-signal |
#C65C34 |
少量品牌定位色,不用于小字 |
--rhine-warning |
#8A472C |
待处理、冲突、覆盖不完整 |
--rhine-error |
#A13E35 |
操作失败、需要恢复 |
本稿测算:正文 / 底色 12.77:1,次级文字 / 底色 5.44:1;品牌橙 / 底色仅 3.72:1,因此只用于非文字标记或符合大字要求的展示文字。重要状态同时有文字。数据未知显示「— / 暂不可用」,不显示 0%,未知进度不画百分比。
完整规则见 字体与文字规范;涵盖9档文字样式、中文混排、数字单位、换行截断、内容语义和动效边界。主流系统对照与待补能力见 补齐顺序。
正文使用系统栈 -apple-system, BlinkMacSystemFont, Segoe UI, PingFang SC, Microsoft YaHei, sans-serif;数字使用 font-variant-numeric: tabular-nums;路径与编号使用系统等宽栈。首期不下载 Web Font。
| 用途 | 字号 / 行高 | 字重 |
|---|---|---|
| 登录标题 | 30 / 38px | 600 |
| 工作区分组标题 | 18 / 26px | 600 |
| 卡片身份 | 16 / 24px | 600 |
| 正文、主要操作 | 14 / 22px | 400–600 |
| 标签、时间、辅助说明 | 12 / 18px | 400–500 |
| 用量关键数字 | 26 / 32px;窄窗 20 / 26px | 600 |
正常视图不出现小于 12px 的业务信息。英文短标签可使用 0.08em 字距;中文不刻意拉大字距。大写英文只作为少量层级辅助。
行高与字号成对消费token;正文14/22、辅助说明12/18、卡片标题16/24、分区标题18/26。多行自然增高,独立正文段落默认12px间距,不用增大行高代替段间距。按钮14/22,点击高度由padding/min-height负责。完整规则及组件例外见行高规范。
- 间距序列 4/8/12/16/24/32/48px。默认卡片采用24px内边距、8px标题/说明、16px内容/操作;具体用途、组合与响应式规则见间距规范与展台
#spacing。窗口内容边距24px;既有窄窗20px边距为布局例外,不新增gap token。 - 展台内容按容器重排;卡片最小宽度按信息密度设定,不能由某个产品窗口宽度推导所有宿主布局。状态区预留文字换行空间。
- 卡片圆角 4px,按钮 3px;保留原生窗口圆角,不在 WebView 内再画一层假窗口。
- 控件最小高度 40px,主要操作 44px;移动预览/触屏按至少 44px 目标校验。
- 1px 分隔线;选中卡以 2px 深绿边界与「已选择」文字共同表达。焦点环 2px,偏移 3px。
- 400/520/880px作为展台验收宽度;消费项目按其最小容器尺寸追加验证。
- 指标与表格按容器重排;数字和说明可换行,必要时表格局部滚动,不以超小字号塞入全部列。
- 100% 与 200% 字体缩放下允许纵向增长、重排;不固定卡片高度、不裁掉报错和主要操作。
- Surface 只承载表格时使用
padding="none"取消外围内距;表头、单元格与分页仍保留自身阅读间距,不连带压缩所有卡片。该 prop 自 0.9.1 提供,见 #24,默认行为不变,示例见#spacing与间距规范。 - 窄屏按真实局部容器验收,不能只检查 document 无横向溢出。抽屉、分栏、卡片中的输入应在 200% 内容缩放后仍看清并可编辑完整值;原生 date 的日期片段和日历图标、搜索文字与清空按钮均须有实际可用宽度。先移除重复分组内距或改为单列,不缩小字体、隐藏关键图标或用 overflow 裁掉内容来通过检查。
使用组件契约、常用组合及场景与交互选型。0.4.0现有48个组件,npm 0.3.0为40个;接入时核对安装版本的实际导出。表单标签持续可见,提示与错误关联;交互元素使用原生语义或可访问基础。选择、筛选、排序和分页向宿主回传意图,宿主决定数据来源及操作结果。
错误说明发生了什么及可执行的下一步,避免内部堆栈和秘密;成功、警告、未知与空态有文字区分。通知不得依赖颜色或短暂动画才能理解。品牌、实体名、时区和业务单位由宿主定义,具体文案规则见字体与文字。
三角构架以同一SVG母版呈现;默认字标Rhine Design,可配置。几何、颜色和安全间距见Logo契约。完整深色主题仍待补齐,Logo变色不代表全套主题完成。
通用状态过渡以120–240ms为基线,按下80ms;循环只表示实际等待。具体配方、减少动态及候选边界见动效规范。启动编排展示三块旋转压缩、展开归位以及同一标志收拢的连续性,不是业务初始化门槛。
展台浏览采用左右分栏:桌面目录固定在左侧并可独立滚动,右侧一次展示一个章节;窄屏收为顶部目录按钮。目录使用普通链接与aria-current="page",保留深链接、前进/后退,切换后将焦点移到内容区。展开目录按Escape收起并归还焦点。全局动效偏好保持,章节内演示离开后卸载,避免隐藏动画或浮层继续运行。主题根不加transform、contain或裁剪,浮层继续挂载到主题根。此为preview/GalleryShell.tsx展台导航模式,未新增公共组件API。
在本仓运行npm run check,新增组件同步契约和默认/禁用/加载/错误/长文本/键盘/动效示例。展台浏览器验收400/520/880宽度、200%缩放、焦点、快速中断、重播和减少动态;独立消费构建验证CSS及SVG资源。
变化记录在CHANGELOG并按语义版本提供迁移说明。消费项目显式选择版本,不随主线自动升级。库验收不依赖某个App迁移完成;真实业务、原生平台与辅助技术由宿主按适用范围补验。剩余能力见系统对照。