v1.0.0 to v1.0.0

1 added, 1 removed. Audit A to A.

---
name: refactoring-ui-principles
description: 设计/美化界面视觉时用:层级、间距、色彩、排版、阴影决策速查(Refactoring UI 方法论)。
version: 1.0.0
- author: Hermes Agent (CC)
+ author: CC
tags: [design, ui, css, refactoring-ui, 设计原则, 视觉]
---
# Refactoring UI 视觉设计原则
> 来源:Adam Wathan & Steve Schoger《Refactoring UI》全书解析(252 页 PDF → markdown,见 references/refactoring-ui-full.md 完整版)。
> 用途:做任何界面视觉设计/审查时的**决策速查**。工程实现细节(组件、状态、无障碍)走 frontend-ui-engineering skill。
## 触发条件
- 设计/美化任何网页、HTML 原型、组件样式
- 挑选颜色、字体、间距、阴影、圆角
- 审查已有 UI 视觉质量("看起来哪里不对劲")
- 用户要求界面"更精致/更专业/不像 AI 生成"
## 核心心法(先记住这 3 条)
1. **层级即设计**(Hierarchy is Everything)——让重要的东西突出、次要的东西退后,比任何装饰都管用
2. **一切皆系统**——间距/字号/颜色/阴影预定义 8-10 档,禁止随手敲任意值
3. **减少决策疲劳**——在受限集合里用排除法选值,而不是从无限池里挑
## 设计流程(从零开始)
1. **先做功能,不是布局**——从"搜索航班"这种具体功能画起,不要先画导航栏
2. **细节后置**——先灰度设计(不用颜色),用间距/对比/大小撑起层级
3. **别过度设计**——短周期:设计简单版→实现→迭代→再设计下一个
4. **当悲观主义者**——设计里别暗示你做不出来的功能
5. **定个性**——字体(serif 优雅/圆体活泼/中性 sans 安全)× 颜色 × 圆角 × 文案语气,保持一致
## 间距与尺寸系统(Layout & Spacing)
- **先给太多留白,再删**——而不是从"不丑"的最小值往上加
- **间距尺度**:从 16px 起步,小端密集大端稀疏,**相邻值差距 ≥25%**(线性倍数不行)
实用参考:4/8/12/16/24/32/48/64/96/128
- **不用填满整个屏幕**——600px 就够就别拉宽;窄布局拆列别加宽
- **网格别当宗教**——侧边栏用固定宽度(内容驱动),主区域 flex;组件内部别用百分比
- **相对尺寸不缩放**——大元素在小屏要缩得比小元素快;按钮 padding 不要和 font-size 绑定(em 缩放)
- **避免歧义间距**——组外间距 > 组内间距;标题上方间距要大于行高,列表项间距同理
## 文字系统(Typography)
- **字号尺度(手调,勿用数学比例)**:12/14/16/18/20/24/30/36/48
- **用 px 或 rem,禁用 em 做字号尺度**(嵌套会跑出尺度外)
- **行高与字号成反比**:小字 1.5+,大标题可到 1;行高与行长成正比(宽内容 2.0)
- **行长 45-75 字符**(20-35em),图文混排时正文单独限宽
- **混合字号按基线对齐,不垂直居中**
- **两档字重够用**:400/500 正文 + 600/700 强调;<400 仅限大标题
- **链接**:几乎全是链接的界面用加粗/深色,别满屏蓝字;次要链接 hover 才变色
- **右对齐数字**(表格);两端对齐必须开 hyphenation
- **letter-spacing**:大标题收紧(-0.05em),全大写放宽(+0.05em),正文不动
## 色彩系统(Color)
- **用 HSL 不用 hex**(hue 色相/饱和度/明度,人类直觉)
- **配色三分类**:灰阶 8-10 档 + 主色 5-10 档 + 强调色(红/黄/绿等状态色)几档——5 个色值永远不够
- **预定义色阶**:选基准色(能当按钮背景)→ 最浅(背景tint)/最深(文字)→ 填中间(900/500/100 命名,先 700/300 再补 800/600/400/200)
- **饱和度陷阱**:明度偏离 50% 越远,饱和度要越高(否则发灰)
- **灰不一定是灰**:偏蓝=冷灰,偏黄=暖灰;深灰别用纯黑
- **感知亮度**:√(0.299r²+0.587g²+0.114b²)——变亮向 60°/180°/300° 转 hue,变暗向 0°/120°/240° 转,旋转 ≤20-30°
- **彩色背景上别用灰字**:用同 hue 调饱和度/明度的手挑色,比白色降透明度好看(后者发灰发虚)
- **无障碍**:正文 ≥4.5:1,大字 ≥3:1;白字彩底时常常需要翻转(深字浅底);别只靠颜色传达信息(红绿盲)
## 深度系统(Depth & Shadows)
- **光从上方来**:凸起=顶部亮边+下方小阴影;凹陷=底部亮边+顶部 inset 阴影
- **阴影=海拔**:小阴影近、大阴影远;按钮小阴影、下拉中阴影、弹窗大阴影
- **双阴影技巧**:`0 4px 6px rgba(0,0,0,.07), 0 5px 15px rgba(0,0,0,.1)` —— 大而软的模拟直射光 + 小而硬的模拟环境光;海拔越高环境光阴影越淡
- **扁平也可以有深度**:同色系浅=近深=远;无模糊的实心偏移阴影(`0 3px 0`)保扁平感
- **重叠制造层次**:卡片跨背景边界、图片给背景色"隐形边框"防撞色
## 图片处理(Images)
- 图烂毁所有——不行就上高质量图库(Unsplash)
- **背景图文字对比**:半透明黑色/白色遮罩(`hsla(0,0%,0%,.55)`)、降图对比度、单色化(降对比→去饱和→multiply 叠色)、大字模糊 text-shadow(`0 0 50px hsla(0,0%,0%,.4)`)
- **图标有设计尺寸**:16-24px 画的图标放大到 48px 会"笨重"——放大请用背景容器包裹,别硬拉
- **截图别缩小**:16px 字缩成 4px 没法看——截小尺寸布局/局部截图/画简化版
- **用户上传图**:固定容器 + `background-size: cover` 裁剪;防背景渗色用 inset 阴影(`inset 0 0 0 1px hsla(0,0%,0%,.1)`),别用边框
## 收尾细节(Finishing Touches)
- **超充默认元素**:列表圆点换图标、引言加大变色、链接自定义下划线、复选框用品牌色
- **彩色强调边框**:卡片顶边/激活导航/告警侧边/标题下短横线——零成本提质感
- **装饰背景**:换背景色、30° 内双色渐变、低对比重复图案(Hero Patterns)、角落几何图形
- **空状态是重点**:插图 + 强调 CTA;无关 UI 全隐藏
- **少用边框**:优先 box-shadow、双背景色、间距来分隔
- **跳出盒子**:下拉菜单可以分栏带图标、表格可以合并列、单选按钮可以做成可点卡片
## 设计审查清单(审已有 UI)
- [ ] 最重要的元素第一眼能看到?次级内容有没有被削弱?
- [ ] 间距/字号/颜色是否来自系统值?(有没有 13px、#7F7F7F 这种手敲值)
- [ ] 文字对比够不够(4.5:1)?彩色背景上是不是用了"白色降透明度"偷懒?
- [ ] 是不是满屏都同等醒目(没有层级)?
- [ ] 边框是不是用太多了?(试试阴影/背景色/间距替代)
- [ ] 图标是不是被放大到设计尺寸之外了?
- [ ] 空状态、加载态、错误态有没有设计?
## 相关
- 完整书全文:`references/refactoring-ui-full.md`(161KB,58 条原则带配图说明)
- 工程实现层:frontend-ui-engineering skill(组件/状态/无障碍)
- 设计系统 token:design-md skill(DESIGN.md 格式)