OpenDesign 设计系统实战:BMW M 汽车运动子品牌的黑场视觉规范与组件实现指南
【免费下载链接】open-design🎨 Best DeepSeek Harness Design Plugin. The open-source Claude Design alternative. 🖥️ Local-first desktop app. 🖼️ Your coding agent becomes the design engine: prototypes, landing pages, dashboards, slides, images & video — real files, HTML/PDF/PPTX/MP4 export. 🤖 Claude Code / Codex / Cursor / DeepSeek Harness / OpenCode & 20+ CLIs via BYOK.项目地址: https://gitcode.com/gh_mirrors/opend/open-design
导读
本文以 OpenDesign 仓库内置的 design-systems/bmw-m/DESIGN.md 为核心,系统拆解 BMW M 这一「汽车运动性能子品牌」的设计系统包:从近纯黑画布、M 三色条纹、BMW Type Next 拉丁字体的排版纪律,到零圆角工业按钮、全出血汽车摄影、96px 节拍间距等组件与布局规则。读完本文,你将掌握如何用{token.refs}引用体系落地一套完整的暗色汽车运动风格界面,并了解仓库内 tokens.css、components.html、design-tokens.json 与 components.manifest.json 等实现文件如何与设计规范一一对应、互相校验。
1. 包结构与阅读路径
在设计系统 2.0 的包约定(见 manifest.json)中,bmw-m是一个od-design-system-project/v1规范下的 bundled 包,属于 Automotive(汽车)分类。包内文件及其职责如下:
| 文件 | 职责 |
|---|---|
| DESIGN.md | 视觉意图、约束与反模式(本文主体) |
| USAGE.md | 包的使用契约与阅读顺序 |
| tokens.css | 结构化 token 绑定,首个 artifact 的<style>起点 |
| design-tokens.json | 56 个 token 的契约化 JSON 输出 |
| tailwind-v4.css | Tailwind v4 适配层 |
| components.html | 组件参考夹具(reference fixture) |
| components.manifest.json | 组件清单与 token 引用统计 |
| source/evidence.md | 审计证据说明 |
| preview/ | colors / typography / spacing 三页视觉预览 |
| system/ | index.html、kit.html、kit.dark.html、tokens.default.json 等系统级产出 |
USAGE.md 给出的推荐阅读顺序是:先读 USAGE.md 理解包契约 → 再读 DESIGN.md 掌握视觉意图与反模式 → 把tokens.css粘贴进第一个 artifact 的<style>块 → 用components.manifest.json做组件清单速查,需要精确选择器时打开components.html→ 需要视觉抽查时看preview/页面。值得注意,source/evidence.md 明确声明该包源自 OpenDesign 精选的 bundled fixture,并不主张对上游官网做过重新抓取,因此设计文档中的量化结论应视为基于已分析页面集的观察证据。
2. 视觉主题与氛围:摄影即品牌电压
BMW M 的分析对象是官方编辑与营销页面,其核心氛围一句话概括:近纯黑画布({colors.canvas}— #000)承载白色 BMW Type Next Latin 大标题,品牌能量全部来自全出血(full-bleed)汽车摄影,UI 镀铬件保持极简。
关键特征包括:
- 近纯黑画布 + 白字贯穿所有已分析的编辑与营销页面;配置器、账户、结算、订单管理等流程未解析,可能引入浅色表面;
- 展示级标题默认使用 UPPERCASE 的 BMW Type Next Latin Light;更重的粗体大写仅保留给标签、按钮、卡片标题和观察到的 M 专属强调;
- M 三色条纹(
{colors.m-blue-light}#0066b1 →{colors.m-blue-dark}#1c69d4 →{colors.m-red}#e22718)只作为 4px 品牌条、M 字标点缀和赛车镀铬出现,绝不做按钮或填充; - 摄影铺满整个 band,车辆永远是视觉主体,UI 镀铬退让为叠加在摄影上的小号白色标签;
- 按钮扁平、0px 圆角、全大写加字距标签——「工业精密的矩形轮廓」本身就是品牌;
- 全系统圆角基本为零,少数例外是圆形图标按钮(如轮播箭头)与已确认的小号 toggle 药丸;
- 间距慷慨且对齐网格:
{spacing.section}(96px)分隔主要 band,{spacing.xxl}(64px)用于 hero 摄影 band 内部,{spacing.xl}(40px)用于内容卡片内部。
从源码结构看,tokens.css 与 components.html 提供的是归一化后的浅色参考实现(--bg: #f7f8fa、--surface: #ffffff),而 DESIGN.md 描述的是目标黑场视觉规范;二者是「意图规范」与「可复用夹具」的分工关系,在落地暗色 BMW M 界面时应以 DESIGN.md 的颜色与排版语义为准,同时复用 tokens.css 的 token 命名骨架。
3. 色彩体系与角色分工
品牌与强调色
| Token | 色值 | 角色 |
|---|---|---|
{colors.primary} | #ffffff | 主类型与 CTA 颜色:h1/h2/h3 展示字、暗底正文、主按钮文字(按钮本体透明或画布色,白字+描边即按钮) |
{colors.m-blue-light} | #0066b1 | M 三色条纹第一段;M 徽章点缀与赛车镀铬 |
{colors.m-blue-dark} | #1c69d4 | 三色条纹中段,BMW 传承蓝,被复用为 M 条纹中带 |
{colors.m-red} | #e22718 | 第三段,标志性 M-Power 红,用于条纹与赛车节奏标注 |
{colors.electric-blue} | #0653b6 | 独立电动车强调色,用于 M xDrive 电动车型页面,比传承蓝更冷、更数码 |
表面色
| Token | 色值 | 角色 |
|---|---|---|
{colors.canvas} | #000000 | 默认页面地板,真黑 |
{colors.surface-soft} | #0d0d0d | 与黑几乎无差的表面,用于规格表单元格与页脚相邻条 |
{colors.surface-card} | #1a1a1a | 卡片、次级按钮、图标按钮背景 |
{colors.surface-elevated} | #262626 | 再亮一档,用于暗色 band 内的嵌套卡片 |
{colors.carbon-gray} | #2b2b2b | 碳纤维质感表面,用于技术规格卡 |
发丝线与边框
{colors.hairline}#3c3c3c:暗底上的 1px 分隔色,用于正文分区、表格行、卡片轮廓;{colors.hairline-strong}#262626:与surface-elevated同值,边框更像「升一阶的表面」而非墨线。
文字色
{colors.on-dark}#ffffff:暗画布上的全部标题与主文字;{colors.body}#bbbbbb:默认正文(比纯白略冷),正文段落与次级元数据;{colors.body-strong}#e6e6e6:强调正文 / 导语段;{colors.muted}#7e7e7e:页脚链接、面包屑、图注。
语义色
{colors.warning}#f4b400:极少用于技术警告标注;{colors.success}#0fa336:订单确认态(营销面少见)。
对照归一化实现,tokens.css 的--accent: #0066b1与--meta: #0066b1正好对应 M Blue Light,--danger: #e4002b接近 M Red 的强调应用,--success: #16a34a承担语义成功色;而 design-tokens.json 的 token 契约报告显示 56 个 token 全部具备tokens.css源码行级背书(sourceBackedTokens: 56,评分 100,等级 excellent),--accent-hover与--accent-active使用color-mix(in oklab, var(--accent), black 8%/14%)派生,无需手工维护深浅变体。
4. 字体规则:克制对比,而非硬性 700/300 二分
字体家族与回退
BMW Type Next Latin 是 BMW 的授权展示 + 正文字体。回退链建议对齐既有 BMW 设计系统:展示优先BMWTypeNextLatin Light,正文/UI 用BMWTypeNextLatin,最后回退到Helvetica, Arial, Hiragino Kaku Gothic ProN, Hiragino Sans, Meiryo, sans-serif(覆盖日文环境)。归一化实现中 tokens.css 提供了--font-display与--font-body("BMWTypeNext", "Helvetica Neue", Arial, sans-serif)及等宽--font-mono。
字重基线:
- 展示:Light(300)用于大号 h1/h2 编辑头条(除非抓取的 M 页面明显用了更重的静态字重);
- 正文/UI:regular(400)用于段落、描述性文案与常驻导航;
- 强调:700 用于按钮、分类标签、卡片标题;900 仅在明确观察到导航强调时使用。
核心原则是对比与克制,而不是硬性的 700/300 二分:大号展示用 Light、阅读文字用 regular、更重的字重只给短 UI 标签或 M 专属强调,避免「中粗字重糊成一片」。
层级表(完整 token 规格)
| Token | 字号 | 字重 | 行高 | 字距 | 用途 |
|---|---|---|---|---|---|
{typography.display-xl} | 80px | 300 Light | 1.0 | 0 | Hero h1("THE ULTIMATE"、"MORE BMW M.") |
{typography.display-lg} | 56px | 300 Light | 1.05 | 0 | 章节头("MORE FROM BMW M MAGAZINE.") |
{typography.display-md} | 40px | 300/400 | 1.1 | 0 | 子章节头、车型名 |
{typography.display-sm} | 32px | 400 | 1.15 | 0 | CTA band 头、分类页标题 |
{typography.title-lg} | 24px | 700 | 1.3 | 0 | 三列网格的卡片标题 |
{typography.title-md} | 20px | 400 | 1.4 | 0 | 卡片副标题、导语段 |
{typography.title-sm} | 18px | 400 | 1.4 | 0 | 规格标注、引言段 |
{typography.label-uppercase} | 14px | 700 | 1.3 | 1.5px | 分类 tab、"VIEW MORE" 行内标签 |
{typography.body-md} | 16px | 400 | 1.5 | 0 | 默认正文 |
{typography.body-sm} | 14px | 400 | 1.5 | 0 | 页脚正文、Cookie 同意、小字 |
{typography.caption} | 12px | 400 | 1.4 | 0.5px | 图注、图片来源行 |
{typography.button} | 14px | 700 | 1.0 | 1.5px | 全部按钮标签(大写、加字距) |
{typography.nav-link} | 14px | 400 | 1.4 | 0.5px | 顶部导航菜单项 |
排版原则与字体替代
系统的气质是「轻量的建筑感展示字 + 清爽的常规正文」,重字重只服务于短标签与动作镀铬。字距是非平凡的:按钮标签与分类标签的 1.5px tracking 让文字有「机械加工」而非「打字」的质感;展示标题保持 0 字距,让 BMW Type 自身的字高在放大后自然处理间距。h1/h2 的 UPPERCASE 是默认语态——句首大写只出现在正文与引言段,很少出现在标题上;全大写是品牌语态信号而非风格选择。
若 BMW Type Next Latin 不可用,Inter(可变字体)300/400/700 是最接近的开源替代,展示字距保持 0(除非所选回退字体在大字号下显得松散);Saira Condensed可作为短赛车标签的压缩感备选。归一化实现里 components.html 将标题设为letter-spacing: var(--tracking-display)(-0.025em),并规定 h1/h2/h3 用font-family: var(--font-display)、line-height: var(--leading-tight)(1.02),h1上限 820px 宽、--text-4xl78px、字重 700。
5. 组件样式清单
顶部导航
top-nav—— 每页顶部固定的黑色导航栏,高 64px,{colors.canvas}背景。左侧为 BMW M 徽标(M 三色 + BMW 圆标 + "M" 字标),中间横向主菜单(Models、Topics、Magazine、Configurator、Fastlane),右侧为语言选择器、搜索图标、账户图标。菜单项用{typography.nav-link}渲染,句首大写标签。
按钮体系
| 组件 | 规格 |
|---|---|
button-primary | 标志性主 CTA:背景{colors.canvas}(或摄影上透明),文字{colors.on-dark}白,1px 白色描边,0px 圆角,内边距 16px×32px,高 48px;类型{typography.button}(14px / 700 / 1.5px tracking)。矩形轮廓 + 大写加字距标签即品牌按钮 |
button-primary-outline | 与主按钮同形,仅透明背景 + 白描边,用于叠在摄影上、填充按钮会与图片冲突的场景 |
button-on-light | 未解析浅色上下文(配置器、账户、结算、订单弹窗)的暂定模式:黑底白字,与暗底默认反转。落地前需对照具体流程确认 |
button-icon | 圆形图标按钮(轮播控制、分享、收藏):48×48px,{colors.surface-card}背景,白色图标居中,全圆角——系统内唯一的非矩形按钮 |
carousel-arrow | 照片轮播中 48×48 圆形箭头,形状同button-icon,带 chevron 字形 |
text-link | 行内大写加字距链接("VIEW ALL MODELS"、"READ MORE"):{typography.label-uppercase},暗底白字无下划线,多数链接旁带 → 箭头字形 |
归一化夹具的.btn基类(components.html)给出可参考实现:最小高度 44px、--radius-md圆角、700 字重--text-sm、transition使用--motion-fast(130ms)+--ease-standard;.btn-primary填充--accent、文字--accent-on,hover 用--accent-hover并上移 1px;.btn-secondary白底、--elev-ring1px 描边,hover 描边与文字转向--accent;:focus-visible使用--focus-ring(0 0 0 4px rgba(0, 102, 177, 0.24))——这与 DESIGN.md「2px 白描边 + 2px electric-blue 偏移环」的暗底焦点策略在不同实现层各司其职。
卡片与容器
hero-photo-band:全宽黑 band,全出血汽车摄影占满大部分画面;h1 用{typography.display-xl}左对齐叠在照片上,下方常有{typography.body-md}小副标题;垂直内边距{spacing.xxl}(64px);无卡片边框——照片即 band。feature-photo-card:用于"MORE FROM BMW M MAGAZINE"等编辑区块的三列网格。背景{colors.surface-card},0px 圆角,内边距{spacing.lg}(24px);上半为 16:9 照片(卡片内全出血),下方依次是{typography.label-uppercase}分类标签、{typography.title-lg}标题、短正文描述。model-card:用于"MORE NEW M MODELS"三列网格。背景{colors.canvas}(无卡片表面,纯照片压在黑上),0px 圆角;顶部 16:10 车型主图,下方为{typography.display-md}车型名、{typography.body-sm}短规格行、text-link("EXPLORE THIS MODEL")。magazine-article-card:杂志总览页的偏文字卡片变体。背景{colors.canvas}+ 发丝线边框,0px 圆角;顶部小缩略图、{typography.label-uppercase}分类标签、{typography.title-lg}标题、正文摘要。spec-cell:车型详情页技术规格单元格(发动机规格、重量、极速、0-100 时间)。背景{colors.surface-soft}(#0d0d0d),0px 圆角,内边距{spacing.lg}(24px);上方{typography.display-sm}数值,下方{typography.label-uppercase}标签。motorsport-photo-card:赛车团队/赛车运动区使用的无边照片卡。无卡片表面——仅全出血照片 + 左下角小号白字叠加图注。摄影即品牌。chatbot-launcher:首页右侧卡片式入口("BMW M CHATBOT")。背景{colors.surface-card},0px 圆角,内边距{spacing.lg}(24px);含 h3 标题、短提示语与启动button-primary。category-tab/category-tab-active:杂志与话题页的分类选择器("ALL · MAGAZINE · MODELS · LIFESTYLE · MOTORSPORT")。纯文字{typography.label-uppercase}标签;激活态文字从{colors.body}变{colors.on-dark}并加 2px 白色下划线;无背景填充、无圆角。
输入与表单
text-input:暗底标准文本输入。背景{colors.surface-card},文字{colors.on-dark},类型{typography.body-md},0px 圆角,内边距 12px×16px,高 48px,1px 发丝线边框;聚焦时边框增粗为白色。cookie-consent-card:首页右侧 Cookie 横幅卡。背景{colors.canvas}+ 1px 发丝线,0px 圆角,内边距{spacing.lg}(24px);正文{typography.body-sm};底部竖排两按钮:主描边按钮 + text-link。
签名组件
m-stripe-divider:承载 M 三色({colors.m-blue-light}→{colors.m-blue-dark}→{colors.m-red})的 4px 横向条纹。用作赛车镀铬上的分隔、品牌身份区块之间、分类 tab 的 hover 指示。是全系统最具辨识度的非排版元素。cta-band-photo:页脚前"Drive an M"CTA band,承载赛车弯道全出血摄影,居中{typography.display-md}标题 + 下方button-primary-outline;垂直内边距 80px。CTA 靠全出血摄影继承页面编辑级重力,而非镀铬。
页脚
footer—— 已分析营销页面的黑色页脚:{colors.canvas}背景、{colors.body}文字,桌面端 4 列链接(BMW M Models / BMW M Lifestyle / Owners / Company),垂直内边距 64px;底行承载{typography.caption}的 BMW 企业免责声明与语言选择器。黑色页脚行为仅对编辑/营销页确认,不适用于未解析的账户或结算流程。
6. 布局原则:4px 网格与 1440px 容器
间距系统
- 基础单位:4px;
- Token 阶梯:
{spacing.xxs}4px ·{spacing.xs}8px ·{spacing.sm}12px ·{spacing.md}16px ·{spacing.lg}24px ·{spacing.xl}40px ·{spacing.xxl}64px ·{spacing.section}96px; - 区块纵向留白:主编辑 band 之间
{spacing.section}(96px); - Hero 摄影 band:hero h1 + 副标题组合四周
{spacing.xxl}(64px); - 卡片内边距:内容卡/车型卡
{spacing.lg}(24px);spec-cell 表{spacing.xl}(40px); - 排水沟(gutter):三列网格卡片间
{spacing.lg}(24px);页脚列内{spacing.md}(16px)。
归一化实现的间距 token 略有差异(--space-1到--space-12,48px 封顶),并额外提供响应式区块纵向间距:--section-y-desktop: 104px、--section-y-tablet: 76px、--section-y-phone: 52px,由 components.html 的媒体查询按1023px与639px断点切换——这为 DESIGN.md 的 96px 节拍提供了可落地的三档自适应版本。
网格与容器
- 营销页最大内容宽度约1440px居中——比典型 SaaS 更宽,给摄影留呼吸空间(归一化实现
--container-max: 1220px,居中且margin-inline: auto); - 编辑正文:单 12 列网格;摄影 band 全出血(不受最大宽度限制);
- 卡片网格:桌面 3 列 → 平板 2 列 → 移动 1 列;
- 页脚:桌面 4 列 → 平板 2 列 → 移动 1 列。
留白哲学
BMW M 信任摄影完成视觉工作:摄影周围的留白是克制的——车填满画面,文案以紧贴对齐的列落在照片下方或侧边。出现留白处(正文区块之间、CTA 周围)一律统一为{spacing.section}(96px)。系统应避免装饰性氛围背景与装饰渐变;当照片裁切会导致白字对比度不足时,允许功能性对比 scrim。
7. 层级与纵深:无投影,深度来自摄影
| 层级 | 处理 | 用途 |
|---|---|---|
| Flat | 无阴影无边框 | 正文区块、顶部导航、页脚、照片 band |
| Soft hairline | 1px{colors.hairline}边框 | 区块分隔、卡片轮廓、表格行 |
| Card surface | {colors.surface-card}叠在 canvas 上——无阴影 | 特性照片卡、杂志卡、聊天机器人启动器 |
| Photographic depth | 全出血摄影、无边裁切 | Hero band、赛车运动特性——深度靠主体而非镀铬 |
系统不使用投影,也不做分层镀铬。深度完全来自摄影(主体 + 镜头 + 光线)以及黑画布与略高一阶的{colors.surface-card}之间的对比。
装饰性深度
- M 条纹分隔(
m-stripe-divider):4px 高横向分隔条,承载 M 三色。用于赛车镀铬、车型详情页头、品牌身份时刻。这是系统唯一的真正「装饰」元素——克制使用以标记重要性; - 碳纤维表面:技术规格页使用
{colors.carbon-gray}(#2b2b2b)单元格叠加细微纹理。这是单页处理,不是全系统模式; - 摄影深度:全出血的车就是深度。摄影中的光线(赛道灯、落日轮廓光)完成了 SaaS 系统中投影承担的高度工作。
归一化实现保留了对应的 elevation 阶梯 token:--elev-flat: none、--elev-ring: 0 0 0 1px var(--border)(发丝线级)、--elev-raised: 0 22px 56px rgba(17, 24, 39, 0.12)(面板级),可在 tokens.css 中查看。
8. Do's and Don'ts
Do
- 每个页面都以全出血汽车摄影锚定——车是品牌电压,镀铬退让;
- 展示标题用
{typography.display-xl}或{typography.display-lg}的 UPPERCASE;句首大写的展示字读起来不像这个品牌; - 排版保持纪律:Light 展示字、regular 正文、更重的字重只给短标签、按钮、卡片标题或观察到的 M 专属强调;
- M 三色条纹只用于品牌身份时刻——字标点缀、赛车镀铬、车型徽章,绝不做按钮填充或表面;
- 默认 0px 圆角;全圆几何仅保留给圆形图标按钮;
- 全大写标签统一 1.5px 字距——「机械加工」感不可妥协;
- 主编辑 band 之间用
{spacing.section}(96px)保持网格对齐的纵向节奏。
Don't
- 不要在 M 三色(
{colors.m-blue-light}/{colors.m-blue-dark}/{colors.m-red})与已记录的 electric-blue 强调色之外引入品牌色; - 不要让正文用 Light 而牺牲可读性——正文通常保持 regular 400,Light 只留给大号展示与次级编辑时刻;
- 不要用圆角按钮——矩形轮廓就是品牌,圆角读起来像消费科技而非赛车运动;
- 不要在 hero 字后放装饰渐变背景——若裁切导致对比度失败,加功能性黑 scrim、重排裁切、或把文字移入实心黑面板;
- 不要连续两个 band 用同一种表面模式——节奏应为「照片 band → 规格表 → 照片 band → 杂志网格 → 照片 band」,连续两个纯文字 band 会读起来像企业官网;
- 不要把 M 条纹当按钮填充——条纹是分隔/点缀,绝不是动作表面;
- 按钮标签的字距不要低于 1.5px——正是字距让它们有「机械加工」感。
9. 响应式行为
断点
| 名称 | 宽度 | 关键变化 |
|---|---|---|
| Mobile | < 768px | 汉堡导航;hero h1 从 80→48px;演示网格 1 列;照片卡全宽堆叠;页脚 4 列→1 |
| Tablet | 768–1024px | 顶栏保持横向但收紧;卡片网格 2 列;规格表 2 列 |
| Desktop | 1024–1440px | 完整顶栏;卡片网格 3 列;规格表 4 列 |
| Wide | > 1440px | 与桌面相同但呼吸感更强;内容最大 1440px |
触控目标
button-primary尽量保持 48×48px 最小尺寸,绝不低于 44×44px 指针目标;button-icon与carousel-arrow恰好 48×48px——稳超 44×44px 下限;text-input高 48px;- 分类 tab 为纯文字标签,至少 12px 垂直内边距与足够横向间距,形成 44px 最小有效点击区。
摄影上文字与焦点
- 摄影上的白字正文对比度至少4.5:1;大号展示文字与图标描边至少3:1;
- 首选裁切纪律:把文字放在暗赛道、阴影、座舱或黑色车身区域;避免放在天空、车灯、白漆、混凝土或反光高光上;
- 裁切不够时使用功能性黑 scrim(
rgba(0,0,0,0.45)~rgba(0,0,0,0.70))垫在文字区后;左→右渐变 scrim 仅可作为无障碍层,不作装饰; - scrim 仍不达标时,把文案移入
{colors.canvas}实心面板,最小内边距 24px; - 黑底或照片背景上的焦点可见性:2px 白描边 + 2px
{colors.electric-blue}偏移环;未解析的浅色表面则反转为 2px electric-blue 描边 + 可见偏移。
折叠策略
- 顶栏 < 768px 折叠为汉堡菜单,展开为全屏黑色遮罩,顶部带 M 三色条纹;
- 摄影在所有断点保持全出血——绝不收进带边距的容器;
- 卡片网格减少列数而非缩放卡片;摄影保持原生宽高比;
- 规格表从 4 列 → 2 列 → 1 列折叠;规格数值无论列数多少都保持
{typography.display-sm}; - M 条纹分隔在所有断点保持 4px 高。
图片行为
- Hero 摄影响应式裁切——桌面更宽的裁切,移动端竖向裁切;
- 生活方式与赛车摄影保持原生宽高比;系统从不 letterbox 或 pillarbox;
- M 字标 + 三色徽标随视口宽度等比缩放。
10. Agent Prompt Guide:给编码 Agent 的使用准则
这份指南同样服务于在 OpenDesign 工作流中调用该设计系统的 Agent 与 LLM:
- 一次只聚焦一个组件,引用其组件名(
hero-photo-band、spec-cell); - 新组件默认 0px 圆角,只有圆形图标按钮可用全圆几何;
- 变体(
-active、-disabled)作为组件名旁的独立散文条目存在; - 处处使用
{token.refs},绝不内联 hex; - 永不记录 hover 态,只记录 Default 与 Active/Pressed;
- 展示标题默认 UPPERCASE + Light/建筑感;正文保持句首大写 regular;700 只用于短强调与 UI 标签;
- M 三色仅限品牌身份——绝不扩展为「主操作」的系统 token;
- 白字叠照片每次都需要对比度策略:先裁切、再 scrim、必要时实心面板;
- 对强调没把握时:更大的摄影优先于更大的字号。
已知缺口(诚实边界)
- 色彩频率分析器把白字(计数 955)记为最高频 token;黑画布是从截图推断的——body 背景采样未将其列为顶部调色板条目,但页面无疑为黑底白字;
- 精确的 M 三色断点取自 BMW 公开品牌指南;截图中条纹是小元素,此分辨率下的像素采样无法可靠区分 #0066b1 与 #1c69d4。文档断点以 BMW Design Works 发布的品牌规范为准;
- BMW Type Next Latin 字重证据不完整:BMW 家族系统记录 Light(300)展示与 regular(400)正文/UI;BMW M 更重的标签用法应视为观察到的强调,而非对 BMW 家族排版的全局替换;
- 动画与过渡时长(轮播过渡、hover 揭示、配置器交互)不在范围内;
- 除
text-input默认态外的表单校验态未提取——错误/成功输入变体需要配置器或订单流程确认; - 配置器表面(带颜色/轮毂/内饰选择器的车辆定制页)不在已分析 URL 集内,其色板网格、对比面板、价格摘要卡未记录于此;
- Cookie 同意遮罩遮挡了截图中的部分首页 hero;次级 hero 处理(不同车型轮播)可能有未捕获的变体。
11. 与包内实现文件的校验闭环
DESIGN.md 不是孤立文档,它与包内其余文件构成可审计的校验闭环:
- tokens.css 是 token 的唯一事实源,design-tokens.json 记录 56 个 token 全部有
tokens.css行级背书(如--accent指向tokens.css:17),评分 100 / excellent; - components.manifest.json 统计了 48 个选择器、26 个类、19 个元素,并按组列出 token 引用:按钮组引用
--accent/--accent-on/--elev-ring/--radius-md等 12 个 token,输入组引用--border/--radius-sm/--space-*,卡片组引用--elev-raised/--radius-lg/--surface——这与 DESIGN.md 的组件语义一一对应; - system/tokens.default.json 提供 Tailwind 接入所需的默认映射(
colorPrimary: #0066b1、borderRadius: 8); - preview/ 的 colors / typography / spacing 三页可做视觉抽查;
- USAGE.md 同时给出约束:保留 schema token 名称以保证跨品牌切换可靠;用
--accent承担主操作/链接/焦点;优先复用components.manifest.json的组件组;不在tokens.css的:root块之外写裸 hex;design-tokens.json与tailwind-v4.css是派生产物,应由报告与 token 样式表再生成而非手工编辑。
12. 落地建议:如何基于本包产出 BMW M 风格界面
- 建底:把 tokens.css 的
:root块整体复制进首屏 artifact 的<style>,组件 CSS 只引用 token,不写裸值; - 定画布:按 DESIGN.md 的暗场语义覆写表面 token(canvas #000、surface-card #1a1a1a、hairline #3c3c3c),保持 token 命名不变以维持跨品牌切换契约;
- 排组件:对照 components.manifest.json 的组件组(buttons / inputs / cards / badges / links / typography / layout)逐组实现,需要精确选择器时参考 components.html;
- 验对比度:每处白字叠照片按「先裁切 → 再 scrim → 最后实心面板」的顺序处理,正文 4.5:1、大号展示 3:1;
- 查反模式:逐条对照第 8 节 Do's and Don'ts,重点检查 0px 圆角、1.5px 字距、96px 节拍、M 条纹仅作身份标记;
- 抽检预览:用 preview/ 页面做颜色、字体、间距三方面的视觉快检,再决定是否进入 craft/ 中的 color 与 accessibility-baseline 基线复核(manifest 的
craft.suggested正是这两项)。
【免费下载链接】open-design🎨 Best DeepSeek Harness Design Plugin. The open-source Claude Design alternative. 🖥️ Local-first desktop app. 🖼️ Your coding agent becomes the design engine: prototypes, landing pages, dashboards, slides, images & video — real files, HTML/PDF/PPTX/MP4 export. 🤖 Claude Code / Codex / Cursor / DeepSeek Harness / OpenCode & 20+ CLIs via BYOK.项目地址: https://gitcode.com/gh_mirrors/opend/open-design
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考