エンタープライズ製品デザイン · 新しいリソース

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を使い、ビューポートに応じて値が変化します。この例の2カラム構成と40pxの間隔は、ネイティブカードを囲む独自のレイアウト指定です。公開されているフォントスタックは維持していますが、Volvoのフォントアセットは同梱されていないため、利用可能なシステムフォントにフォールバックします。

Volvo Cars Web デザインシステム 選択可能なカードのセマンティクス

プランの選択にはラジオ入力を使う

2つのプランカードには、同じname属性を持つネイティブのラジオボタンを配置し、fieldsetとlegendでグループ化します。各カードは、タイトル、メタ情報、説明のスロットを持つラベルです。カードをクリックすると対応するラジオボタンが選択され、通常のラジオボタンのキーボード操作も利用できます。したがって、選択中のプランは装飾的な枠線を別途管理したものではなく、実際のフォーム状態です。

個別に選べる追加項目にはチェックボックスを使う

水と追加のレイヤーはそれぞれ独立して選択できるため、チェックボックスを使います。カード内にリンクやボタンは配置しません。ラベル内に操作可能な要素を置くと、操作が競合するためです。概要の操作ボタンはカードの外に配置します。より複雑な操作可能コンテンツをカード内に配置する必要がある場合は、公開されているReact formsレイヤーを代替として使用できます。

  • ラジオボタングループは、1つのfieldsetとlegendでまとめます。
  • 個別に選べる追加項目にはチェックボックスを使います。
  • リンクやボタンは、CSSのみを含むラベルカードの外に配置します。

Volvo Cars Web デザインシステムから生成するチェックリストと確認メッセージ

同じコントロールから概要を生成する

概要には、選択したプランの基本項目と選択した追加項目をまとめて表示します。ラジオボタンを変更すると、個別に選んだ追加項目は維持したまま、プラン名と基本項目が更新されます。項目数は、更新後のリストから算出します。サンプルの持ち物はすべて独自に作成したもので、車両の仕様、価格、実際のVolvo購入時の構成に関する記述は意図的に含めていません。

選択が変わったら古い確認メッセージを消す

Volvo Cars Web デザインシステムカラーモードとレスポンシブな構成

テーマとチェックリストの状態を分ける

カラーモードのセレクトを変更すると、ドキュメントのdata-color-modeが更新されます。ラジオボタン、チェックボックス、概要は作り直されません。ネイティブのスタイルシートでは一部の背景レイヤーが遷移するため、変更の途中で撮影したスクリーンショットではなく、テーマが安定した状態を確認してください。テキスト、コントロールの状態、背景とのコントラストをあわせてチェックします。

狭い画面では読み進める順序で縦に並べる

ドキュメント上では、持ち物の選択肢が概要より先に配置されています。スマートフォンの幅では2カラムのグリッドが1カラムになり、この順序とすべての操作を維持します。fieldsetにmin-width:0を指定し、デフォルトのサイズ計算による横方向のはみ出しを防ぎます。カードの長いコンテンツも、親要素からはみ出さず、選択カードのレイアウト内で折り返されます。

Volvo Cars Web デザインシステム完全なソースとローカルでの検証

対応するパッケージで2つのソースファイルを実行する

JavaScriptには、オリジナルのコンテンツ全体とすべての操作ハンドラーが含まれています。CSSにはアプリの構成と、ローカルのチェックボックス用チェックマークのフォールバックのみを記述します。用意されたHTMLシェルを使い、2つのソースファイルを保存して、バージョンを固定したCSSをインストールします。スタイルシートをインポートするだけではコントロールにスタイルは適用されますが、チェックリストの項目数や画面内の確認メッセージは実装されません。

  1. vanillaアプリを作成し、@volvo-cars/css 2.5.1をインストールします。
  2. main.js、volvo.css、用意されたルートHTMLシェルを保存します。
  3. アプリを実行し、ラジオボタンとチェックボックスの動作を比較します。
  4. ライトとダークのテーマが安定した状態、およびリセット後の状態を確認します。

選択、テーマ、復元の動作をまとめて確認する

沿岸プランを選び、水を追加して、項目が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();

コードリファレンス

  • バージョンを固定したスタイルシートの、同じname属性を持つラジオボタンとラベルスロットのパターンを使用します。

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 デザインシステムエージェントのセットアップ

実装の出発点

固定されたバージョンは、この選択可能なカードの実装に対応しています。公式フォントアセットはプレビューにバンドルされていません。

シェル
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

あなたのプロジェクト向けプロンプト

AI エージェント用プロンプト
Volvo Cars CSS 2.5.1 と付属の完全なソースを使って、オリジナルの週末パッキングスタディを構築します。ネイティブの label ベースの選択可能なカード、fieldset によるラジオグループ、個別に選択できるチェックボックスの追加項目、導出される件数、確認状態の自動解除、選択内容に依存しないテーマ状態を実装します。サンプル内容は実際の車両仕様と明確に区別してください。
05

Volvo Cars Web デザインシステム ソースと対象範囲

@volvo-cars/css 2.5.1 を使ったオリジナルの OpenDesign パッキングスタディです。車両コンフィギュレーターではありません。Volvo のフォントファイルはバンドルされていないため、ネイティブのスタイルシートで代替フォントを使用します。