Files
workbuddy_skills/open-design/design-systems/vercel/DESIGN-zh.md
T

313 lines
19 KiB
Markdown
Raw Normal View History

# Design System Inspired by Vercel
> Category: 开发者工具
> 前端部署。黑白精准,Geist 字体。
## 1. Visual Theme & Atmosphere
Vercel 的网站是开发者基础设施"隐于无形"这一命题的视觉论文——一套克制到近乎哲学境界的设计体系。页面以大面积白色(`#ffffff`)配近黑色(`#171717`)文字为主调,营造出画廊般的空旷感,每一个元素都以像素为代价争得一席之地。这不是装饰性的极简主义,而是工程原则意义上的极简主义。Geist 设计体系对待界面的方式,如同编译器对待代码——剔除所有多余的标记,直到只剩结构。
定制字体家族 Geist 是整套体系的王冠。Geist Sans 在展示尺寸下采用极强的负字间距(-2.4px 至 -2.88px),所呈现的标题感觉紧凑、急迫、充满工程感——仿佛经过压缩优化的生产代码。在正文尺寸下,字间距有所放松,但几何精准感依然贯穿始终。Geist Mono 作为等宽配套字体,专为代码、终端输出和技术标签而生。两款字体均在全局启用 OpenType `"liga"`(连字),为排版增添了一层经得起细读的精致感。
Vercel 区别于其他单色设计体系的关键,在于其"阴影即边框"的理念。它并不使用传统 CSS 边框,而是采用 `box-shadow: 0px 0px 0px 1px rgba(0,0,0,0.08)`——零偏移、零模糊、1px 扩散的阴影,在不影响盒模型的前提下实现类边框效果。这一技术让边框存在于阴影层,从而实现更平滑的过渡、不会被裁剪的圆角,以及比传统边框更轻盈的视觉重量。整个深度体系建立在多值阴影叠加上,每一层各司其职:一层作边框,一层提供柔和的层次感,一层营造环境深度。
**关键特征:**
- Geist Sans 在展示尺寸下使用极强负字间距(-2.4px 至 -2.88px)——文字即压缩后的基础设施
- Geist Mono 用于代码和技术标签,全局启用 OpenType `"liga"`
- 阴影即边框技术:`box-shadow 0px 0px 0px 1px` 取代全局传统边框
- 多层阴影叠加实现细腻深度(单次声明包含边框 + 层次 + 环境三层)
- 近纯白画布搭配 `#171717` 文字——并非纯黑,形成微妙的对比柔和感
- 工作流专属强调色:Ship 红(`#ff5b4f`)、Preview 粉(`#de1d8d`)、Develop 蓝(`#0a72ef`)
- 焦点环系统使用 `hsla(212, 100%, 48%, 1)`——饱和蓝色,确保无障碍可访问性
- 胶囊徽章(9999px 圆角)配色调背景,用于状态指示
## 2. Color Palette & Roles
### Primary
- **Vercel 黑**(`#171717`):主要文字、标题、深色表面背景。并非纯黑——微微的暖调防止视觉刺激。
- **纯白**(`#ffffff`):页面背景、卡片表面、深色背景上的按钮文字。
- **真黑**(`#000000`):次要用途,`--geist-console-text-color-default`,用于特定控制台/代码场景。
### Workflow Accent Colors
- **Ship 红**(`#ff5b4f`):`--ship-text`,"发布到生产"工作流步骤——温暖、紧迫的珊瑚红。
- **Preview 粉**(`#de1d8d`):`--preview-text`,预览部署工作流——鲜艳的洋红粉。
- **Develop 蓝**(`#0a72ef`):`--develop-text`,开发工作流——明亮、聚焦的蓝色。
### Console / Code Colors
- **控制台蓝**(`#0070f3`):`--geist-console-text-color-blue`,语法高亮蓝色。
- **控制台紫**(`#7928ca`):`--geist-console-text-color-purple`,语法高亮紫色。
- **控制台粉**(`#eb367f`):`--geist-console-text-color-pink`,语法高亮粉色。
### Interactive
- **链接蓝**(`#0072f5`):主要链接颜色,带下划线装饰。
- **焦点蓝**(`hsla(212, 100%, 48%, 1)`):`--ds-focus-color`,交互元素焦点环。
- **环蓝**(`rgba(147, 197, 253, 0.5)`):`--tw-ring-color`,Tailwind 环工具类。
### Neutral Scale
- **灰 900**(`#171717`):主要文字、标题、导航文字。
- **灰 600**(`#4d4d4d`):次要文字、说明文案。
- **灰 500**(`#666666`):三级文字、静音链接。
- **灰 400**(`#808080`):占位符文字、禁用状态。
- **灰 100**(`#ebebeb`):边框、卡片轮廓、分隔线。
- **灰 50**(`#fafafa`):微妙表面色调、内阴影高光。
### Surface & Overlay
- **遮罩背景**(`hsla(0, 0%, 98%, 1)`):`--ds-overlay-backdrop-color`,模态框/对话框背景。
- **选中文字**(`hsla(0, 0%, 95%, 1)`):`--geist-selection-text-color`,文字选中高亮。
- **徽章蓝背景**(`#ebf5ff`):胶囊徽章背景,带色调的蓝色表面。
- **徽章蓝文字**(`#0068d6`):胶囊徽章文字,更深的蓝色以保证可读性。
### Shadows & Depth
- **边框阴影**(`rgba(0, 0, 0, 0.08) 0px 0px 0px 1px`):标志性技法——取代传统边框。
- **微浮层**(`rgba(0, 0, 0, 0.04) 0px 2px 2px`):卡片的最小悬浮感。
- **卡片叠层**(`rgba(0,0,0,0.08) 0px 0px 0px 1px, rgba(0,0,0,0.04) 0px 2px 2px, rgba(0,0,0,0.04) 0px 8px 8px -8px, #fafafa 0px 0px 0px 1px`):完整多层卡片阴影。
- **环形边框**(`rgb(235, 235, 235) 0px 0px 0px 1px`):标签页和图片的浅灰环形边框。
## 3. Typography Rules
### Font Family
- **主字体**:`Geist`,备用字体:`Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol`
- **等宽字体**:`Geist Mono`,备用字体:`ui-monospace, SFMono-Regular, Roboto Mono, Menlo, Monaco, Liberation Mono, DejaVu Sans Mono, Courier New`
- **OpenType 特性**:所有 Geist 文字全局启用 `"liga"`;特定说明文字启用 `"tnum"` 以对齐数字。
### Hierarchy
| 角色 | 字体 | 字号 | 字重 | 行高 | 字间距 | 备注 |
|------|------|------|--------|-------------|----------------|-------|
| 展示大标 | Geist | 48px (3.00rem) | 600 | 1.00–1.17(紧凑) | -2.4px 至 -2.88px | 最大压缩,视觉冲击力强 |
| 区块标题 | Geist | 40px (2.50rem) | 600 | 1.20(紧凑) | -2.4px | 功能区块标题 |
| 大号副标题 | Geist | 32px (2.00rem) | 600 | 1.25(紧凑) | -1.28px | 卡片标题、子区块 |
| 副标题 | Geist | 32px (2.00rem) | 400 | 1.50 | -1.28px | 较轻的副标题 |
| 卡片标题 | Geist | 24px (1.50rem) | 600 | 1.33 | -0.96px | 功能卡片 |
| 卡片标题(轻) | Geist | 24px (1.50rem) | 500 | 1.33 | -0.96px | 次要卡片标题 |
| 大号正文 | Geist | 20px (1.25rem) | 400 | 1.80(宽松) | normal | 介绍性文字、功能描述 |
| 正文 | Geist | 18px (1.13rem) | 400 | 1.56 | normal | 标准阅读文字 |
| 小号正文 | Geist | 16px (1.00rem) | 400 | 1.50 | normal | 标准 UI 文字 |
| 中号正文 | Geist | 16px (1.00rem) | 500 | 1.50 | normal | 导航、强调文字 |
| 半粗正文 | Geist | 16px (1.00rem) | 600 | 1.50 | -0.32px | 强调标签、激活状态 |
| 按钮/链接 | Geist | 14px (0.88rem) | 500 | 1.43 | normal | 按钮、链接、说明文字 |
| 小号按钮 | Geist | 14px (0.88rem) | 400 | 1.00(紧凑) | normal | 紧凑型按钮 |
| 说明文字 | Geist | 12px (0.75rem) | 400–500 | 1.33 | normal | 元数据、标签 |
| 等宽正文 | Geist Mono | 16px (1.00rem) | 400 | 1.50 | normal | 代码块 |
| 等宽说明 | Geist Mono | 13px (0.81rem) | 500 | 1.54 | normal | 代码标签 |
| 等宽小号 | Geist Mono | 12px (0.75rem) | 500 | 1.00(紧凑) | normal | `text-transform: uppercase`,技术标签 |
| 微型徽章 | Geist | 7px (0.44rem) | 700 | 1.00(紧凑) | normal | `text-transform: uppercase`,极小徽章 |
### Principles
- **压缩即身份**:Geist Sans 在展示尺寸下使用 -2.4px 至 -2.88px 的字间距——是所有主流设计体系中负字间距最激进的。这使文字呈现出_压缩_感,仿佛为生产环境优化过的代码。字间距随字号减小而逐渐放松:32px 时 -1.28px,24px 时 -0.96px,16px 时 -0.32px,14px 时恢复正常。
- **连字无处不在**:每一处 Geist 文字均启用 OpenType `"liga"`。连字并非装饰——它是结构性的,创造出更紧密、更高效的字形组合。
- **三种字重,严格分工**:400(正文/阅读)、500(UI/交互)、600(标题/强调)。除极小徽章外不使用粗体(700)。这种窄字重范围通过字号和字间距构建层次感,而非依赖字重。
- **等宽即身份**:大写的 Geist Mono 搭配 `"tnum"` 或 `"liga"`,充当"开发者控制台"的声音——紧凑的技术标签将营销站与产品连接起来。
## 4. Component Stylings
### Buttons
**主要白色按钮(阴影边框)**
- Background: `#ffffff`
- Text: `#171717`
- Padding: 0px 6px(极小——由内容决定宽度)
- Radius: 6px(轻微圆角)
- Shadow: `rgb(235, 235, 235) 0px 0px 0px 1px`(环形边框)
- Hover: 背景切换为 `var(--ds-gray-1000)`(深色)
- Focus: `2px solid var(--ds-focus-color)` 外轮廓 + `var(--ds-focus-ring)` 阴影
- 用途:标准次要按钮
**主要深色按钮(源自 Geist 体系推断)**
- Background: `#171717`
- Text: `#ffffff`
- Padding: 8px 16px
- Radius: 6px
- 用途:主要行动按钮("Start Deploying"、"Get Started")
**胶囊按钮/徽章**
- Background: `#ebf5ff`(带色调的蓝色)
- Text: `#0068d6`
- Padding: 0px 10px
- Radius: 9999px(完整胶囊)
- Font: 12px 字重 500
- 用途:状态徽章、标签、功能标注
**大号胶囊(导航)**
- Background: 透明或 `#171717`
- Radius: 64px–100px
- 用途:标签页导航、区块选择器
### Cards & Containers
- Background: `#ffffff`
- 边框:通过阴影实现——`rgba(0, 0, 0, 0.08) 0px 0px 0px 1px`
- Radius: 8px(标准),12px(特色/图片卡片)
- 阴影叠层:`rgba(0,0,0,0.08) 0px 0px 0px 1px, rgba(0,0,0,0.04) 0px 2px 2px, #fafafa 0px 0px 0px 1px`
- 图片卡片:`1px solid #ebebeb`,顶部 12px 圆角
- Hover:阴影轻微加深
### Inputs & Forms
- 单选框:标准样式,焦点时 `var(--ds-gray-200)` 背景
- 焦点阴影:`1px 0 0 0 var(--ds-gray-alpha-600)`
- 焦点外轮廓:`2px solid var(--ds-focus-color)`——统一的蓝色焦点环
- 边框:通过阴影技术实现,而非传统边框
### Navigation
- 白色背景上的简洁水平导航,吸顶固定
- Vercel 字标左对齐,262x52px
- 链接:Geist 14px 字重 500,`#171717` 文字
- 激活状态:字重 600 或下划线
- 行动按钮:深色胶囊按钮("Start Deploying"、"Contact Sales")
- 移动端:汉堡菜单折叠
- 产品下拉菜单支持多级展开
### Image Treatment
- 产品截图带 `1px solid #ebebeb` 边框
- 顶部圆角图片:`12px 12px 0px 0px` 圆角
- 仪表板/代码预览截图主导功能区块
- 英雄图片后方带柔和渐变背景(多色粉彩)
### Distinctive Components
**工作流管线**
- 三步水平管线:Develop(开发)→ Preview(预览)→ Ship(发布)
- 每个步骤有专属强调色:蓝色 → 粉色 → 红色
- 通过线条/箭头连接
- Vercel 核心价值主张的视觉隐喻
**信任栏/Logo 网格**
- 合作公司 Logo(Perplexity、ChatGPT、Cursor 等)以灰度展示
- 横向滚动或网格布局
- 用 `#ebebeb` 边框轻微分隔
**指标卡片**
- 大号数字展示(如"10x faster")
- Geist 48px 字重 600 展示指标
- 下方配灰色正文描述
- 阴影边框卡片容器
## 5. Layout Principles
### Spacing System
- 基础单位:8px
- 刻度:1px、2px、3px、4px、5px、6px、8px、10px、12px、14px、16px、32px、36px、40px
- 显著跳跃:从 16px 直接跳到 32px——主刻度中没有 20px 或 24px
### Grid & Container
- 内容最大宽度:约 1200px
- 英雄区:居中单列,顶部留有充足 padding
- 功能区:卡片采用 2–3 列网格
- 全宽分隔线使用 `border-bottom: 1px solid #171717`
- 代码/仪表板截图以全宽或带边框的方式展示
### Whitespace Philosophy
- **画廊式空旷感**:区块间有大量垂直留白(80px–120px+)。留白本身即设计——它传达出 Vercel 无需证明、无需掩饰的从容。
- **文字紧凑,空间宽阔**:标题上极强的负字间距与周围充裕的留白形成对位关系。文字密集,而环绕的空间辽阔。
- **区块节奏**:白色区块与白色区块交替——区块间没有颜色变化。分隔依靠边框(阴影边框)和间距来实现。
### Border Radius Scale
- 微型(2px):行内代码片段、小号标签
- 细微(4px):小型容器
- 标准(6px):按钮、链接、功能元素
- 舒适(8px):卡片、列表项
- 图片(12px):特色卡片、图片容器(顶部圆角)
- 大号(64px):标签页导航胶囊
- 超大(100px):大号导航链接
- 完整胶囊(9999px):徽章、状态胶囊、标签
- 圆形(50%):菜单切换按钮、头像容器
## 6. Depth & Elevation
| 层级 | 处理方式 | 用途 |
|-------|-----------|-----|
| 平面(Level 0) | 无阴影 | 页面背景、文字块 |
| 环形(Level 1) | `rgba(0,0,0,0.08) 0px 0px 0px 1px` | 大多数元素的阴影即边框 |
| 浅色环形(Level 1b) | `rgb(235,235,235) 0px 0px 0px 1px` | 标签页和图片的较浅环形 |
| 微卡片(Level 2) | 环形 + `rgba(0,0,0,0.04) 0px 2px 2px` | 带最小浮起感的标准卡片 |
| 完整卡片(Level 3) | 环形 + 微浮 + `rgba(0,0,0,0.04) 0px 8px 8px -8px` + 内层 `#fafafa` 环 | 特色卡片、高亮面板 |
| 焦点(无障碍) | `2px solid hsla(212, 100%, 48%, 1)` 外轮廓 | 所有交互元素的键盘焦点 |
**阴影哲学**:Vercel 拥有现代 Web 设计中可以说是最精妙的阴影体系。它并非以 Material Design 的传统方式用阴影表达高度,而是通过多值阴影叠加,让每一层承担独特的架构职能:一层制造"边框"(0px 扩散,1px),一层添加环境柔和感(2px 模糊),一层处理远距深度(8px 模糊带负扩散),还有一层内层环(`#fafafa`)形成微妙的高光,让卡片"由内而外地发光"。这种层叠方式使卡片呈现出被精心构建的质感,而非漂浮感。
### Decorative Depth
- 英雄渐变:英雄内容后方柔和的多色粉彩渐变(几乎不可见,营造氛围)
- 区块边框:主要区块之间用 `1px solid #171717`(完整深色线)分隔
- 无背景色变化——深度完全来自阴影叠加与边框对比
## 7. Do's and Don'ts
### Do
- 在展示尺寸使用带强负字间距的 Geist Sans(48px 时 -2.4px 至 -2.88px)
- 使用阴影即边框(`0px 0px 0px 1px rgba(0,0,0,0.08)`)而非传统 CSS 边框
- 在所有 Geist 文字上启用 `"liga"`——连字是结构性的,不可省略
- 使用三字重体系:400(正文)、500(UI)、600(标题)
- 仅在对应的工作流场景中使用工作流强调色(红/粉/蓝)
- 为卡片使用多层阴影叠加(边框 + 层次 + 环境 + 内层高光)
- 保持色板的消色差调——从 `#171717` 到 `#ffffff` 的灰色系就是整个体系
- 主要文字用 `#171717` 而非 `#000000`——微弱的暖调至关重要
### Don't
- 不要在 Geist Sans 上使用正字间距——永远是负值或零
- 不要在正文使用字重 700(粗体)——600 是上限,仅用于标题
- 不要在卡片上使用传统 CSS `border`——使用阴影边框技术
- 不要在 UI 主体中引入暖色(橙色、黄色、绿色)
- 不要将工作流强调色(Ship 红、Preview 粉、Develop 蓝)用于装饰目的
- 不要使用过重的阴影(不透明度 > 0.1)——该阴影体系的基调是耳语级别
- 不要增大正文字间距——Geist 本就设计为紧排
- 不要在主要行动按钮上使用胶囊圆角(9999px)——胶囊只用于徽章/标签
- 不要省略卡片阴影中的内层 `#fafafa` 环——正是它造就了整套体系的内发光效果
## 8. Responsive Behavior
### Breakpoints
| 名称 | 宽度 | 关键变化 |
|------|-------|-------------|
| 小屏手机 | <400px | 紧凑单列,最小 padding |
| 手机 | 400–600px | 标准移动端,堆叠布局 |
| 小平板 | 600–768px | 开始出现两列网格 |
| 平板 | 768–1024px | 完整卡片网格,扩展 padding |
| 小桌面 | 1024–1200px | 标准桌面布局 |
| 桌面 | 1200–1400px | 完整布局,最大内容宽度 |
| 大屏桌面 | >1400px | 居中,充裕边距 |
### Touch Targets
- 按钮使用舒适的 padding(垂直 8px–16px)
- 导航链接 14px,间距充足
- 胶囊徽章水平 padding 10px,满足点击目标需求
- 移动端菜单切换按钮使用 50% 圆角圆形按钮
### Collapsing Strategy
- 英雄区:展示字号 48px → 按比例缩小,负字间距等比保持
- 导航:水平链接 + 行动按钮 → 汉堡菜单
- 功能卡片:三列 → 两列 → 单列堆叠
- 代码截图:保持宽高比,可能出现横向滚动
- 信任栏 Logo:网格 → 横向滚动
- 页脚:多列 → 单列堆叠
- 区块间距:80px+ → 移动端缩减至 48px
### Image Behavior
- 仪表板截图在各尺寸下保持边框处理
- 英雄渐变在移动端变得更柔和/简化
- 产品截图使用响应式图片,保持一致圆角
- 全宽区块在各端保持边到边的处理方式
## 9. Agent Prompt Guide
### Quick Color Reference
- 主要行动按钮:Vercel 黑(`#171717`)
- 背景:纯白(`#ffffff`)
- 标题文字:Vercel 黑(`#171717`)
- 正文:灰 600(`#4d4d4d`)
- 边框(阴影):`rgba(0, 0, 0, 0.08) 0px 0px 0px 1px`
- 链接:链接蓝(`#0072f5`)
- 焦点环:焦点蓝(`hsla(212, 100%, 48%, 1)`)
### Example Component Prompts
- "在白色背景上创建英雄区。标题 48px Geist 字重 600,行高 1.00,字间距 -2.4px,颜色 #171717。副标题 20px Geist 字重 400,行高 1.80,颜色 #4d4d4d。深色行动按钮(#171717,6px 圆角,8px 16px padding)和幽灵按钮(白色,阴影边框 rgba(0,0,0,0.08) 0px 0px 0px 1px,6px 圆角)。"
- "设计一张卡片:白色背景,不使用 CSS border。使用阴影叠层:rgba(0,0,0,0.08) 0px 0px 0px 1px, rgba(0,0,0,0.04) 0px 2px 2px, #fafafa 0px 0px 0px 1px。圆角 8px。标题 24px Geist 字重 600,字间距 -0.96px。正文 16px 字重 400,#4d4d4d。"
- "创建胶囊徽章:#ebf5ff 背景,#0068d6 文字,9999px 圆角,0px 10px padding,12px Geist 字重 500。"
- "创建导航:白色吸顶头部。Geist 14px 字重 500 的链接,#171717 文字。右对齐深色胶囊行动按钮 'Start Deploying'。底部阴影边框:rgba(0,0,0,0.08) 0px 0px 0px 1px。"
- "设计一个展示三步骤的工作流区块:Develop(文字颜色 #0a72ef)、Preview(#de1d8d)、Ship(#ff5b4f)。每个步骤:14px Geist Mono 大写标签 + 24px Geist 字重 600 标题 + 16px 字重 400 描述,颜色 #4d4d4d。"
### Iteration Guide
1. 始终用阴影即边框代替 CSS border——`0px 0px 0px 1px rgba(0,0,0,0.08)` 是基础
2. 字间距随字号变化:48px 时 -2.4px,32px 时 -1.28px,24px 时 -0.96px,14px 时恢复正常
3. 仅使用三种字重:400(阅读)、500(交互)、600(强调)
4. 颜色是功能性的,非装饰性的——工作流颜色(红/粉/蓝)仅标记管线阶段
5. 卡片阴影中的内层 `#fafafa` 环是赋予 Vercel 卡片微妙内发光的关键
6. 技术标签用 Geist Mono 大写,其余一律用 Geist Sans