refactoring-ui-principles · v1.0.0 · 2026-08-27 · sha256 763e7bfa94f5b546
refactoring-ui-principles v1.0.0A
Immutable. This exact content is served forever at /api/v1/blob/763e7bfa94f5b546.
--- name: refactoring-ui-principles description: 设计/美化界面视觉时用:层级、间距、色彩、排版、阴影决策速查(Refactoring UI 方法论)。 version: 1.0.0 author: Hermes Agent (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 格式)