企业产品设计 · 新资源

Volvo Cars Web 设计系统.

通过完整的行李规划示例,检查 Volvo Cars 以 HTML 为先的 Web 基础、实际的浅色模式令牌和原生可选卡片样式;支持独立选择、主题切换和重置。

OpenDesign 指南6 个章节34 条参考条目原始应用指南
01

Volvo Cars Web 设计系统 界面预览

选择一个方案,添加彼此独立的额外选项,并在浅色和深色模式下查看相同的选择。

规划周末行李打开完整示例
采用 Volvo Cars 已发布的 CSS 2.5.1 可选卡片样式;使用原生 HTML 输入控件和原创清单逻辑。· 实现参考
02

Volvo Cars Web 设计系统 设计参考

使用实际公开的 @volvo-cars/css 2.5.1 设计令牌,并与文档所述的可选卡片标记相匹配。此处展示默认浅色模式的值;深色模式由同一份样式表提供。

默认浅色模式角色

来源
名称 / 规则值 / 配置用途
--v-color-foreground-primary#0002.5.1 中浅色模式的首组声明;原生深色主题会覆盖这些角色值。
--v-color-foreground-secondary#5e5e5e 2.5.1 中浅色模式的首组声明;原生深色主题会覆盖这些角色值。
--v-color-foreground-tertiary#787878 2.5.1 中浅色模式的首组声明;原生深色主题会覆盖这些角色值。
--v-color-foreground-inverted#fff2.5.1 中浅色模式的首组声明;原生深色主题会覆盖这些角色值。
--v-color-foreground-accent-blue#0b2ded 2.5.1 中浅色模式的首组声明;原生深色主题会覆盖这些角色值。
--v-color-background-primary#fff2.5.1 中浅色模式的首组声明;原生深色主题会覆盖这些角色值。
--v-color-background-secondary#fafafa 2.5.1 中浅色模式的首组声明;原生深色主题会覆盖这些角色值。
--v-color-background-feedback-green#d7f9df 2.5.1 中浅色模式的首组声明;原生深色主题会覆盖这些角色值。
--v-color-background-feedback-red#fce5e3 2.5.1 中浅色模式的首组声明;原生深色主题会覆盖这些角色值。
--v-color-surface-gray#e3e3e3 2.5.1 中浅色模式的首组声明;原生深色主题会覆盖这些角色值。

固定间距与形状

来源
名称 / 规则值 / 配置用途
--v-space-2.125rem已发布的固定尺度。请将这些值与流动式页面间距令牌区分开来。
--v-space-4.25rem已发布的固定尺度。请将这些值与流动式页面间距令牌区分开来。
--v-space-8.5rem已发布的固定尺度。请将这些值与流动式页面间距令牌区分开来。
--v-space-12.75rem已发布的固定尺度。请将这些值与流动式页面间距令牌区分开来。
--v-space-161rem已发布的固定尺度。请将这些值与流动式页面间距令牌区分开来。
--v-space-241.5rem已发布的固定尺度。请将这些值与流动式页面间距令牌区分开来。
--v-space-322rem已发布的固定尺度。请将这些值与流动式页面间距令牌区分开来。
--v-space-483rem已发布的固定尺度。请将这些值与流动式页面间距令牌区分开来。
--v-space-644rem已发布的固定尺度。请将这些值与流动式页面间距令牌区分开来。
--v-radius-sm.25rem已发布的固定尺度。请将这些值与流动式页面间距令牌区分开来。
--v-radius-md.5rem已发布的固定尺度。请将这些值与流动式页面间距令牌区分开来。
--v-radius-lg1rem已发布的固定尺度。请将这些值与流动式页面间距令牌区分开来。
--v-radius-full9999px已发布的固定尺度。请将这些值与流动式页面间距令牌区分开来。

文本与边框规则

来源
名称 / 规则值 / 配置用途
--v-font-sans-family"Volvo Centum", "Helvetica Neue", "Helvetica", "Noto Sans", "Segoe UI", "Arial", sans-serif实际公开的 2.5.1 值。此示例未打包 Volvo 字体文件,因此使用字体栈回退。
--v-font-regular-weight400实际公开的 2.5.1 值。此示例未打包 Volvo 字体文件,因此使用字体栈回退。
--v-font-emphasis-weight600实际公开的 2.5.1 值。此示例未打包 Volvo 字体文件,因此使用字体栈回退。
--v-font-14-size.875rem实际公开的 2.5.1 值。此示例未打包 Volvo 字体文件,因此使用字体栈回退。
--v-font-14-lineheight1.572实际公开的 2.5.1 值。此示例未打包 Volvo 字体文件,因此使用字体栈回退。
--v-font-16-size1rem实际公开的 2.5.1 值。此示例未打包 Volvo 字体文件,因此使用字体栈回退。
--v-font-16-lineheight1.5实际公开的 2.5.1 值。此示例未打包 Volvo 字体文件,因此使用字体栈回退。
--v-font-20-size1.25rem实际公开的 2.5.1 值。此示例未打包 Volvo 字体文件,因此使用字体栈回退。
--v-font-20-lineheight1.4实际公开的 2.5.1 值。此示例未打包 Volvo 字体文件,因此使用字体栈回退。
--v-border-width-default1px实际公开的 2.5.1 值。此示例未打包 Volvo 字体文件,因此使用字体栈回退。
--v-border-width-selected2px实际公开的 2.5.1 值。此示例未打包 Volvo 字体文件,因此使用字体栈回退。
03

Volvo Cars Web 设计系统 完整指南

实用指南,介绍如何为真实界面选择、应用和评审此系统。

DESIGN-volvo-cars.md

完整指导、实现起点和源代码链接。

下载指南

Volvo Cars Web 设计系统 HTML 优先的 Foundation与版本选择

固定使用与该模式匹配的样式表

此示例使用 @volvo-cars/css 2.5.1,与实现所参照的可选卡片一致。版本 3 的使用约定不同,因此如果不检查标记就安装最新版本,可能导致模式无法完整呈现。设置和指南中都应注明版本:组件类名并不保证每个版本都会以相同方式应用样式。

摘自本 OpenDesign 指南

有选择地使用公开的 Web 层

本示例直接导入公开的 Web 设计令牌和 all-media 样式表,不依赖单独的内部 EDLS 包。应用使用原生 HTML,并仅用少量 JavaScript 实现清单功能。已安装的 CSS负责可选卡片外观、控件样式和色彩模式角色;应用负责提供内容和状态。

Volvo Cars Web 设计系统 中性色角色、字体与间距

保持浅色与深色模式角色相互对应

表格记录了默认浅色模式下的声明,而 data-color-mode 会选择对应的原生深色模式值。此布局使用背景和前景角色,而不是为每张卡片都硬编码白色文字。切换主题时应保留已选方案和额外选项;更改配色不应影响清单。

区分固定间距步长与流动的页面节奏

所选参考中的固定间距值从 2px 到 64px 不等。其他公开页面令牌使用 clamp 和 round,因此会随视口变化。示例中的双列布局和 40px 间距是围绕原生卡片设计的布局选择。保留了已发布的字体栈,但未捆绑 Volvo 字体资源;渲染时会使用系统中可用的备用字体。

Volvo Cars Web 设计系统 可选卡片语义

使用单选按钮选择一个方案

两个方案卡片包含同名原生单选按钮,并置于带有图例的 fieldset 中。每张卡片都是一个 label,包含标题、辅助信息和描述插槽。点击卡片即可选中对应的单选按钮,同时保留单选按钮原有的键盘操作方式。因此,选中的方案是真正的表单状态,而不是单独管理的装饰性边框。

使用复选框选择互不关联的附加项

饮用水和额外衣物可以分别选择,因此使用复选框。卡片中不包含嵌套的链接或按钮:在 label 内放置交互元素会导致激活行为相互冲突。摘要操作位于卡片之外。若设计确实需要更复杂的卡片交互内容,可使用已发布的 React forms 层作为替代方案。

  • 在同一个 fieldset 和图例中保留一个单选按钮组。
  • 使用复选框选择互不关联的附加项。
  • 将链接和按钮放在仅含 CSS 的 label 卡片之外。

Volvo Cars Web 设计系统 派生清单与确认

根据相同的控件生成摘要

摘要由所选方案的基础物品和已选附加项组成。更改单选项会更新方案标题和基础物品,同时保留独立选择的附加项。物品数量根据最终列表生成。所有示例中的打包内容均为原创,并刻意避免涉及车辆规格、价格或实际 Volvo 购车配置相关的描述。

选项变更时清除过期的确认提示

Volvo Cars Web 设计系统 颜色模式与响应式布局

将主题与清单状态分开管理

颜色模式选择器会更改文档上的 data-color-mode 属性,不会重新创建单选按钮、复选框或摘要。原生样式表会为部分界面表面添加过渡效果,因此应检查主题变化完成后的状态,而不是在变化过程中截取的画面。应同时检查文本、控件状态和界面表面的对比度。

在窄屏下按阅读顺序纵向排列

文档顺序中,打包选项位于摘要之前。在手机屏幕宽度下,双列网格会变为单列,同时保持原有顺序和所有操作。为 fieldset 设置 min-width:0,避免其默认尺寸导致水平溢出。较长的卡片内容会在所选卡片布局内换行,不会溢出父级容器。

Volvo Cars Web 设计系统 完整源码与本地验证

使用匹配的软件包运行两个源文件

JavaScript 包含完整的原创内容和所有交互处理程序。CSS 仅包含应用布局以及本地复选框勾选标记的备用实现。使用提供的 HTML shell,保存两个源文件,并安装固定版本的 CSS。仅导入样式表只能为控件添加样式,无法实现清单计数或本地确认功能。

  1. 创建 vanilla 应用并安装 @volvo-cars/css 2.5.1。
  2. 保存 main.js、volvo.css 和提供的根目录 HTML shell。
  3. 运行应用并比较单选按钮和复选框的行为。
  4. 检查稳定后的浅色和深色主题,以及重置状态。

同时检查选择、主题与恢复操作

选择海岸方案,添加饮用水,并确认显示四件物品。保留该方案后添加一件衣物,并检查旧的确认提示是否消失。在不丢失已选内容的情况下切换到深色模式,然后重置为第一个方案且不选择任何附加项。验证单选按钮的键盘选择方式和窄屏下的换行表现,并检查稳定后的浅色和深色界面表面。

Volvo Cars Web 设计系统组件示例

main.js — 完整的方案选择功能

包含所有选项、派生摘要、本地确认、主题和重置功能。

javascript
import '@volvo-cars/css/tokens.css';
import '@volvo-cars/css/styles_all-media.css';
import './volvo.css';
document.querySelector('#root').innerHTML=`<main><header><p class="eyebrow">OpenDesign · Original planning study</p><h1>A little room for the weekend.</h1><p class="intro">Build a simple packing plan with selectable cards. These sample choices are not vehicle options or product specifications.</p><label class="mode">Color mode <select id="mode"><option value="light">Light</option><option value="dark">Dark</option></select></label></header><div class="composition"><div><fieldset class="stack-16"><legend>Choose your plan</legend><label class="selectable-card"><input type="radio" name="plan" value="city" checked><span slot="title">A day in the city</span><span slot="meta">Travel light</span><span slot="description">Space for a day bag and the things you use most.</span></label><label class="selectable-card"><input type="radio" name="plan" value="coast"><span slot="title">A quiet coastal break</span><span slot="meta">Stay a little longer</span><span slot="description">Bring layers, a weekend bag and time to pause.</span></label></fieldset><fieldset class="stack-16 extras"><legend>Add to your checklist</legend><label class="selectable-card"><input type="checkbox" value="water"><span slot="title">Water and a reusable cup</span><span slot="description">Keep everyday essentials close at hand.</span></label><label class="selectable-card"><input type="checkbox" value="layers"><span slot="title">An extra layer</span><span slot="description">Prepare for a change in the weather.</span></label></fieldset></div><aside class="summary bg-secondary p-24 shape-default"><p class="eyebrow">Your local checklist</p><h2 id="plan-title">A day in the city</h2><ul id="items"></ul><p id="count" role="status"></p><button type="button" class="button-filled" id="save">Keep this plan</button><button type="button" class="button-text" id="reset">Start again</button><p id="saved" role="status" hidden></p></aside></div><p class="note">Published Volvo Cars CSS 2.5.1 selectable-card styling with original packing content and local behavior. The preview uses the stylesheet’s system-font fallback; Volvo font assets are not bundled. Nothing is booked, purchased or sent.</p></main>`;
const plans={city:{title:'A day in the city',items:['Day bag','Comfortable shoes']},coast:{title:'A quiet coastal break',items:['Weekend bag','Route notes','A good book']}};const extras={water:'Water and a reusable cup',layers:'An extra layer'};let current='city';
function render(){current=document.querySelector('[name=plan]:checked').value;let list=[...plans[current].items,...[...document.querySelectorAll('.extras input:checked')].map(e=>extras[e.value])];document.querySelector('#plan-title').textContent=plans[current].title;const ul=document.querySelector('#items');ul.replaceChildren(...list.map(x=>{let li=document.createElement('li');li.textContent=x;return li}));document.querySelector('#count').textContent=`${list.length} things on your checklist`;document.querySelector('#saved').hidden=true;}
document.querySelectorAll('fieldset input').forEach(e=>e.addEventListener('change',render));document.querySelector('#mode').addEventListener('change',e=>document.documentElement.dataset.colorMode=e.target.value);document.querySelector('#save').addEventListener('click',()=>{let p=document.querySelector('#saved');p.hidden=false;p.textContent='Plan kept in this page. Changing a choice will clear this confirmation.';});document.querySelector('#reset').addEventListener('click',()=>{document.querySelector('[value=city]').checked=true;document.querySelectorAll('.extras input').forEach(e=>e.checked=false);render();document.querySelector('[value=city]').focus();});render();

代码参考

  • 采用固定版本样式表中的同名单选按钮与 label 插槽模式。

volvo.css — 原创布局

响应式布局和本地复选框勾选标记的备用实现。

css
html{color-scheme:light}html[data-color-mode=dark]{color-scheme:dark}body{margin:0}main{max-width:1100px;padding:32px;margin:auto}header{padding:16px 0 40px}.eyebrow{font-size:12px;letter-spacing:.06em}.intro{max-width:60ch;margin-top:24px}.mode{display:flex;align-items:center;gap:16px;margin-top:24px}.mode select{max-width:180px}.composition{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(240px,1fr);gap:40px}fieldset{min-width:0;border:0;padding:0;margin:0}legend{font-size:20px;margin-bottom:16px}.extras{margin-top:32px}.summary{align-self:start}#items{padding-left:20px;margin:24px 0}#items li{margin:8px 0}.summary button{display:block;width:100%;margin-top:16px}.note{font-size:14px;color:var(--v-color-foreground-secondary);border-top:1px solid var(--v-color-surface-gray);padding-top:24px;margin-top:40px;max-width:80ch}#saved{margin-top:24px}.selectable-card input[type=checkbox]:checked:before{background-image:none!important;content:'✓';color:var(--v-color-foreground-inverted);display:grid;place-items:center}[hidden]{display:none!important}@media(max-width:760px){main{padding:20px}.composition{grid-template-columns:1fr;gap:32px}.selectable-card{overflow-wrap:anywhere}.eyebrow{overflow-wrap:anywhere}}

代码参考

  • 布局为原创;卡片样式来自已安装的公开 CSS。

index.html — 根目录外壳

完整的根入口和模块入口。

html
<!doctype html>
<html lang="en" data-color-mode="light"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Weekend packing study</title></head><body><div id="root"></div><script type="module" src="/src/main.js"></script></body></html>

代码参考

  • 用此文件替换根目录中的 Vite index.html。
04

Volvo Cars Web 设计系统 Agent 设置

实现起点

固定版本与此可选择卡片实现相匹配。预览中未捆绑官方字体资源。

sh
npm create vite@latest weekend-plan -- --template vanilla
cd weekend-plan
npm install
npm install @volvo-cars/[email protected]
# Save index.html at the root; main.js and volvo.css in src.
npm run dev

适用于你项目的提示词

Agent 提示词
使用 Volvo Cars CSS 2.5.1 和提供的完整源代码,构建原创的周末行李打包示例。使用基于原生 label 的可选择卡片、fieldset 单选组、相互独立的复选框附加项、派生计数、清除过期确认状态,以及独立于选择项的主题状态。所有示例内容都应与真实车辆规格有所区别。
05

Volvo Cars Web 设计系统 来源与范围

使用 @volvo-cars/css 2.5.1 构建的原创 OpenDesign 行李打包示例。它不是车辆配置器。未捆绑 Volvo 字体文件;使用原生样式表回退字体。