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

Orange OUDS Web デザインシステム.

Orange OUDS 1.4の実際のセマンティックトークン、テーマパッケージ、ネイティブのOffcanvasの挙動を、レスポンシブ対応の比較調査一式で確認できます。

OpenDesign ガイド7 章37 件のリファレンス項目オリジナルアプリケーションガイド
01

Orange OUDS Web デザインシステムのインターフェースプレビュー

各ネイティブドロワーを確認し、選択をローカルに保持して、外観を切り替えます。

架空のデータバンドルを比較完全な例を開く
OUDS Web 1.4.0のネイティブCSSとOffcanvas JavaScript、オリジナルのコンテンツと選択状態。 · 実装リファレンス
02

Orange OUDS Web デザインシステムのデザインリファレンス

固定バージョンの@ouds/web-orangeおよび@ouds/web-common 1.4.0のソースを参照し、オリジナルのレイアウト上の判断は別途明記しています。

ライトテーマのセマンティックカラーの役割

ソース
名前 / ルール値 / 設定用途
--bs-color-action-enabled#000Orange 1.4プリセットの最初のライトテーマ用宣言です。ダークテーマではdata-bs-themeを通じて専用の値が適用されるため、この表の値をそのまま色として使うわけではありません。
--bs-color-action-selected#f15e00 Orange 1.4プリセットの最初のライトテーマ用宣言です。ダークテーマではdata-bs-themeを通じて専用の値が適用されるため、この表の値をそのまま色として使うわけではありません。
--bs-color-action-hoverrgba(0, 0, 0, 0.68)Orange 1.4プリセットの最初のライトテーマ用宣言です。ダークテーマではdata-bs-themeを通じて専用の値が適用されるため、この表の値をそのまま色として使うわけではありません。
--bs-color-action-pressed#f15e00 Orange 1.4プリセットの最初のライトテーマ用宣言です。ダークテーマではdata-bs-themeを通じて専用の値が適用されるため、この表の値をそのまま色として使うわけではありません。
--bs-color-bg-primary#fffOrange 1.4プリセットの最初のライトテーマ用宣言です。ダークテーマではdata-bs-themeを通じて専用の値が適用されるため、この表の値をそのまま色として使うわけではありません。
--bs-color-bg-secondary#f4f4f4 Orange 1.4プリセットの最初のライトテーマ用宣言です。ダークテーマではdata-bs-themeを通じて専用の値が適用されるため、この表の値をそのまま色として使うわけではありません。
--bs-color-border-defaultrgba(0, 0, 0, 0.2)Orange 1.4プリセットの最初のライトテーマ用宣言です。ダークテーマではdata-bs-themeを通じて専用の値が適用されるため、この表の値をそのまま色として使うわけではありません。
--bs-color-always-black#000Orange 1.4プリセットの最初のライトテーマ用宣言です。ダークテーマではdata-bs-themeを通じて専用の値が適用されるため、この表の値をそのまま色として使うわけではありません。
--bs-color-always-white#fffOrange 1.4プリセットの最初のライトテーマ用宣言です。ダークテーマではdata-bs-themeを通じて専用の値が適用されるため、この表の値をそのまま色として使うわけではありません。

段階的な余白

ソース
名前 / ルール値 / 設定用途
--bs-space-scaled-none0px実際にエクスポートされる余白のスケールです。オリジナルの比較レイアウトでは、これらの値を使って24pxの間隔を設定しています。
--bs-space-scaled-3xsmall2px実際にエクスポートされる余白のスケールです。オリジナルの比較レイアウトでは、これらの値を使って24pxの間隔を設定しています。
--bs-space-scaled-2xsmall4px実際にエクスポートされる余白のスケールです。オリジナルの比較レイアウトでは、これらの値を使って24pxの間隔を設定しています。
--bs-space-scaled-xsmall8px実際にエクスポートされる余白のスケールです。オリジナルの比較レイアウトでは、これらの値を使って24pxの間隔を設定しています。
--bs-space-scaled-small12px実際にエクスポートされる余白のスケールです。オリジナルの比較レイアウトでは、これらの値を使って24pxの間隔を設定しています。
--bs-space-scaled-medium16px実際にエクスポートされる余白のスケールです。オリジナルの比較レイアウトでは、これらの値を使って24pxの間隔を設定しています。
--bs-space-scaled-large24px実際にエクスポートされる余白のスケールです。オリジナルの比較レイアウトでは、これらの値を使って24pxの間隔を設定しています。
--bs-space-scaled-xlarge32px実際にエクスポートされる余白のスケールです。オリジナルの比較レイアウトでは、これらの値を使って24pxの間隔を設定しています。
--bs-space-scaled-2xlarge40px実際にエクスポートされる余白のスケールです。オリジナルの比較レイアウトでは、これらの値を使って24pxの間隔を設定しています。
--bs-space-scaled-3xlarge48px実際にエクスポートされる余白のスケールです。オリジナルの比較レイアウトでは、これらの値を使って24pxの間隔を設定しています。

タイポグラフィの役割

ソース
名前 / ルール値 / 設定用途
--bs-font-sans-serif"HelvNeueOrange", "Helvetica Neue", Helvetica, "SF Pro", Roboto, Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"公開されているフォントとタイポグラフィの宣言です。埋め込みの考察では、ブランドフォントのHelvNeueOrangeファイルではなく、Arialをフォールバックフォントとして明示的に指定しています。
--bs-font-size-display-large2.5rem公開されているフォントとタイポグラフィの宣言です。埋め込みの考察では、ブランドフォントのHelvNeueOrangeファイルではなく、Arialをフォールバックフォントとして明示的に指定しています。
--bs-font-size-heading-large1.5rem公開されているフォントとタイポグラフィの宣言です。埋め込みの考察では、ブランドフォントのHelvNeueOrangeファイルではなく、Arialをフォールバックフォントとして明示的に指定しています。
--bs-font-size-body-large1rem公開されているフォントとタイポグラフィの宣言です。埋め込みの考察では、ブランドフォントのHelvNeueOrangeファイルではなく、Arialをフォールバックフォントとして明示的に指定しています。
--bs-font-size-body-medium0.875rem公開されているフォントとタイポグラフィの宣言です。埋め込みの考察では、ブランドフォントのHelvNeueOrangeファイルではなく、Arialをフォールバックフォントとして明示的に指定しています。
--bs-font-size-body-small0.75rem公開されているフォントとタイポグラフィの宣言です。埋め込みの考察では、ブランドフォントのHelvNeueOrangeファイルではなく、Arialをフォールバックフォントとして明示的に指定しています。
--bs-font-line-height-body-large1.5公開されているフォントとタイポグラフィの宣言です。埋め込みの考察では、ブランドフォントのHelvNeueOrangeファイルではなく、Arialをフォールバックフォントとして明示的に指定しています。
--bs-font-line-height-body-medium1.4285714286公開されているフォントとタイポグラフィの宣言です。埋め込みの考察では、ブランドフォントのHelvNeueOrangeファイルではなく、Arialをフォールバックフォントとして明示的に指定しています。

Offcanvasの既定値

ソース
名前 / ルール値 / 設定用途
--bs-offcanvas-zindex1045ネイティブコンポーネントのデフォルト設定。元のドロワーでは幅を440pxに上書きし、ネイティブのmax-widthルールでビューポート内に収めています。
--bs-offcanvas-width400pxネイティブコンポーネントのデフォルト設定。元のドロワーでは幅を440pxに上書きし、ネイティブのmax-widthルールでビューポート内に収めています。
--bs-offcanvas-height30vhネイティブコンポーネントのデフォルト設定。元のドロワーでは幅を440pxに上書きし、ネイティブのmax-widthルールでビューポート内に収めています。
--bs-offcanvas-transitiontransform 0.3s ease-in-outネイティブコンポーネントのデフォルト設定。元のドロワーでは幅を440pxに上書きし、ネイティブのmax-widthルールでビューポート内に収めています。

ネイティブのドロワーとボタンの仕様

ソース
名前 / ルール値 / 設定用途
Brand action.btn.btn-brand実際のOrangeバリアントです。上流のBootstrap .btn-primaryが同じ意味だと決めつけないでください。
Default action.btn.btn-defaultローカルでの選択と、その選択の解除に使われている実際のセカンダリ/デフォルトスタイルです。
Open triggerdata-bs-toggle="offcanvas" / data-bs-targetネイティブのdata APIを使い、元の各プランボタンから共通のドロワーを開きます。
Content eventshow.bs.offcanvas / event.relatedTargetドロワーの内容を表示する前に、トリガーからクリックされたプランを読み取ります。
Close APIoudsWeb.Offcanvas.getInstance(element).hide()ローカルで選択した後、既存のネイティブインスタンスを閉じます。
Themedata-bs-theme="light" or "dark"比較の状態を再構築せずに、実際のテーマ変数を変更します。
03

Orange OUDS Webデザインシステム完全ガイド

実際のインターフェースで、このデザインシステムを選び、適用し、レビューするための実践ガイドです。

DESIGN-orange-ouds.md

詳しいガイダンス、実装の出発点、ソースへのリンクをまとめています。

ガイドをダウンロード

Orange OUDS Webデザインシステム:Orange OUDSのパッケージとテーマ構成

共通パッケージとOrangeパッケージを一緒にインストールする

OUDS Web 1.4.0では、共通の動作とブランドテーマが分離されています。この例では、@ouds/web-commonと@ouds/web-orangeを同じバージョンでインストールします。Orangeパッケージにはコンパイル済みのCSSが含まれ、共通パッケージにはバンドル済みのブラウザーJavaScriptが含まれます。ルートドキュメントでは両方の明示的なパスを読み込むため、パッケージのインストールコマンドだけを示して、スタイルのない静的ページを読者に残すことはありません。

この OpenDesign ガイドから
  • @ouds/web-orangeにはOrangeテーマのCSSが含まれます。
  • @ouds/web-commonには共通のJavaScriptが含まれます。
  • この例では、両方のパッケージを1.4.0に固定しています。

OUDS独自のコンポーネント仕様として扱う

OUDSはBootstrapを基盤にしていますが、その系譜があるからといって、上流のクラスがすべてそのまま置き換えられるわけではありません。このバージョンでは、btn-brand、btn-defaultなど、名前の付いたバリアントを使用します。掲載した比較例では、実際のクラスとネイティブのOffcanvasデータ属性を使っています。移行時はスタイルシートのURLを変えるだけでなく、マークアップとテーマの値の両方を比較してください。

Orange OUDS Webデザインシステム:Orange OUDSのセマンティックカラーと文字の役割

インストール済みのセマンティック変数を使う

元のカードではcolor-bg-primaryとcolor-border-defaultを使用しています。細いヘッダーのアクセントにはcolor-action-selectedを使い、ライトテーマの宣言では#f15e00に解決されます。ルートのdata-bs-theme属性を通じて、ダークテーマではこれらの役割に別の値が設定されます。そのため、このガイドでは適用範囲とともにライトテーマの値を記録し、実行時に適切な外観が選択されるようにしています。オレンジ色の16進コードを1つ示してデザインシステム全体を説明することはありません。

タイポグラフィを明確にする

パッケージのフォントスタックでは、HelvNeueOrangeが先頭に指定されています。このローカル埋め込みの例では、未使用のfont-face宣言を取り除き、明示的な代替フォントとしてArialを使用しています。表では、公開されている実際のフォントファミリーと本文の役割も説明しています。コンポーネントCSSを読み込んだからといって、ブランド書体が読み込まれた証拠にはなりません。この書体を採用するプロジェクトでは、フォントアセットを適切に扱う必要があります。

Orange OUDS Webデザインシステム:Orange OUDSの比較カードとコンテンツ

比較に実際の意思決定の構成を持たせる

3枚のカードには、架空のデータ容量、簡潔な利用説明、詳細確認アクションを表示します。各カードには、プレースホルダーの行を並べたスクリーンショットではなく、必要なテキストをすべて含めています。これらは検討用に作成したオリジナルのコンテンツであり、Orangeの現行商品、料金、契約内容ではありません。また、このデザイン検討では料金を載せないことで、購入可能なプランや決済フローがあるかのような誤解も避けています。

繰り返し表示するカードの基準をそろえる

デスクトップでは、3つの等幅グリッド列と縦方向のフレックスカードを使い、詳細確認アクションが下端にそろうようにしています。720pxでは1列になり、高さはコンテンツに応じて変わります。ネイティブのボタンクラスが実際のアクション状態を担い、外側のグリッド、24pxのパディング、コンテンツの順序は、掲載したCSSで確認できるアプリケーション固有の設計判断です。

Orange OUDS Webデザインシステム:Orange OUDSのネイティブなOffcanvas構成

トリガーに応じてドロワーの内容を設定する

各詳細確認ボタンは同じ#details Offcanvasを指し、小さなdata-planインデックスを持ちます。show.bs.offcanvasイベントで取得できるrelatedTargetを使い、ドロワーが表示される前に、対応する元のタイトル、説明、機能リストを選択します。リストはtextContentと実際のリスト項目から構築し、データとマークアップを分離しています。ドロワーのタイトルはaria-labelledbyで関連付けています。

開閉動作はネイティブの実行環境に任せる

Orange OUDS Webデザインシステム:Orange OUDSのローカル選択と復帰動作

実際に行われた操作を説明する

「この選択を保持」では、選択された架空のプランだけを保存し、カードの下にその選択を表示します。注文は行われていないことも明示します。新たに選択すると以前の選択が置き換わり、選択を解除するとメッセージが非表示になり、最初の詳細確認ボタンにフォーカスが戻ります。アカウント、カート、決済サービスには何も送信されません。

外観の切り替えと選択状態を分ける

ライト/ダーク切り替えでは、ルートのテーマ属性と切り替えアクションのラベルを変更します。現在のローカル選択と3枚のカードの内容は維持します。テーマをテストする際、外観の変更によってユーザーの比較状態が意図せずリセットされないようにすることが重要です。この例では、どちらの外観でもネイティブのCSSを使い、外側の構成だけをアプリケーション側で用意しています。

Orange OUDS Webデザインシステム:Orange OUDSのキーボード操作と狭い画面への対応

閉じる操作と詳細確認操作に名前を付ける

各カードのアクションにはプラン名を含め、アイコンのみのネイティブな閉じるボタンには、アクセシブルなラベル「詳細を閉じる」を明示しています。ネイティブ実装でフォーカス管理が機能するよう、ドロワーにはtabindexを設定し、タイトルにもラベルを関連付けています。テストでは「Explore」ドロワーを開いてEscapeキーで閉じ、別のカードに移る前に、フォーカスがトリガーに戻ることを確認します。

実際のビューポート内にドロワーを収める

アプリケーションではドロワーの幅を440pxに設定していますが、Offcanvas標準のmax-widthルールにより、狭いビューポート内に収まります。画面幅が小さい場合はカードが縦に並び、外側の余白も縮小します。プランを選択して外観を切り替えた後の状態も含め、初期状態だけでなく、幅280px、390px、タブレット、デスクトップで動作を確認しています。

Orange OUDS Web デザインシステム Orange OUDS 完全な静的インテグレーション

3ファイルの完全なサンプルを使用する

orange-index.htmlをindex.htmlとして保存し、orange.cssとorange-app.jsを同じディレクトリに置きます。指定バージョンの2つのパッケージをインストールし、そのディレクトリを配信してください。HTMLには、ネイティブのアセットパス、すべてのカードコンテンツ、ドロワーの構造、アプリケーションスクリプトが含まれています。このブラウザー上の画面構成を再現するのに、Reactラッパーや不足したひな形、存在しないSDKは必要ありません。

  1. 提供された3つのファイルをすべて同じ場所に保存します。
  2. 対応するOUDSパッケージを2つともインストールします。
  3. フォルダーを配信し、各カードを確認します。
  4. Escapeキー、フォーカスの復帰、ローカルデータの消去、両方の外観をテストします。

コードとアセットは同じリリースのものを使用する

バージョンを変更する場合は、ボタンのバリアント、data API名前空間、イベント名、テーマ変数をまとめて確認してください。異なるリリースのCSSとスクリプトを組み合わせると、操作して不整合が明らかになるまでは正しく見えることがあります。提供したバージョンは具体的な検証済みの参照例であり、今後どのパッケージの組み合わせでも同じように動作することを保証するものではありません。

Orange OUDS Web デザインシステムのコンポーネント例

orange-index.html

完全なマークアップとネイティブのCSS/JavaScriptインポート。

html
<!doctype html><html lang="en" data-bs-theme="light"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Bundle comparison study</title><link rel="stylesheet" href="./node_modules/@ouds/web-orange/dist/css/ouds-web.min.css"><link rel="stylesheet" href="./orange.css"></head><body><main><header><div><p>OUDS WEB / ORIGINAL COMPARISON STUDY</p><h1>Choose room for your day</h1><p class="scope">Three fictional mobile-data bundles for inspecting Orange-themed cards, buttons and a native detail drawer. These are not commercial offers.</p></div><button id="theme" class="btn btn-default" type="button">Use dark appearance</button></header><div class="plans"><article class="plan"><h2>Everyday</h2><p class="amount">8 GB</p><p>For messages, maps and occasional listening.</p><button class="btn btn-brand" data-plan="0" data-bs-toggle="offcanvas" data-bs-target="#details" aria-controls="details">Inspect Everyday</button></article><article class="plan"><h2>Explore</h2><p class="amount">25 GB</p><p>More room for podcasts and a longer journey.</p><button class="btn btn-brand" data-plan="1" data-bs-toggle="offcanvas" data-bs-target="#details" aria-controls="details">Inspect Explore</button></article><article class="plan"><h2>Create</h2><p class="amount">60 GB</p><p>A larger sample allowance for sharing on the move.</p><button class="btn btn-brand" data-plan="2" data-bs-toggle="offcanvas" data-bs-target="#details" aria-controls="details">Inspect Create</button></article></div><section id="selected" hidden><p role="status" id="selection-message"></p><button id="clear" class="btn btn-default">Clear local choice</button></section><p class="fine">OUDS Web 1.4.0 native CSS and Offcanvas runtime; original sample content and local selection. Arial fallback is used instead of Orange’s branded typeface.</p></main><aside class="offcanvas offcanvas-end" tabindex="-1" id="details" aria-labelledby="drawer-title"><div class="offcanvas-header"><h2 class="offcanvas-title" id="drawer-title">Bundle details</h2><button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close details"></button></div><div class="offcanvas-body"><p id="drawer-description"></p><ul id="features"></ul><p>No account is connected. Keeping a choice changes this preview only.</p><button id="choose" class="btn btn-brand">Keep this local choice</button></div></aside><script src="./node_modules/@ouds/web-common/dist/js/ouds-web.bundle.min.js"></script><script src="./orange-app.js"></script></body></html>

コードリファレンス

  • orange-index.htmlをindex.htmlとして保存し、残りの2つのファイル名は変更しないでください。

orange.css

オリジナルのレスポンシブなカード配置と、明示的なフォントフォールバック。

CSS
*{box-sizing:border-box}body{margin:0;font-family:Arial,sans-serif}main{max-width:1080px;margin:auto;padding:32px}header{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;flex-wrap:wrap;border-bottom:4px solid var(--bs-color-action-selected);padding-bottom:24px}h1{font-size:36px;line-height:1.15;margin:12px 0}.scope{font-size:14px;line-height:1.6;max-width:75ch}.plans{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px;margin-top:32px}.plan{display:flex;flex-direction:column;border:1px solid var(--bs-color-border-default);padding:24px;background:var(--bs-color-bg-primary)}.plan h2{font-size:24px}.amount{font-size:40px;font-weight:700;line-height:1.2;margin:24px 0}.plan p{line-height:1.6}.plan .btn{margin-top:auto}.fine{font-size:13px;line-height:1.6;margin-top:24px}.offcanvas{--bs-offcanvas-width:440px}.offcanvas-header,.offcanvas-body{padding:24px}.offcanvas-header{gap:16px}.offcanvas-title{font-size:24px}.offcanvas-body p,.offcanvas-body li{line-height:1.6}.offcanvas-body ul{padding-left:24px}.offcanvas-body li{margin:12px 0}#selected{padding:24px;border:1px solid var(--bs-color-border-default);margin-top:24px}#selected p{margin:0}#selected .btn{margin-top:16px}@media(max-width:720px){main{padding:16px}.plans{grid-template-columns:1fr}.plan{padding:24px}.amount{margin:16px 0}.plan .btn{margin-top:16px}}[hidden]{display:none!important}

コードリファレンス

  • orange-index.htmlをindex.htmlとして保存し、残りの2つのファイル名は変更しないでください。

orange-app.js

ネイティブのドロワーイベント処理と、ローカルの選択状態・テーマ状態。

JavaScript
const plans=[["Everyday", "8 GB", "For messages, maps and occasional listening.", ["8 GB of fictional monthly data", "One original study profile", "No contract, order or payment"]], ["Explore", "25 GB", "More room for podcasts and a longer journey.", ["25 GB of fictional monthly data", "One original study profile", "No contract, order or payment"]], ["Create", "60 GB", "A larger sample allowance for sharing on the move.", ["60 GB of fictional monthly data", "One original study profile", "No contract, order or payment"]]];let current=0;const drawer=document.querySelector('#details');drawer.addEventListener('show.bs.offcanvas',event=>{current=Number(event.relatedTarget.dataset.plan);const[name,amount,description,features]=plans[current];document.querySelector('#drawer-title').textContent=name+' · '+amount;document.querySelector('#drawer-description').textContent=description;document.querySelector('#features').replaceChildren(...features.map(text=>{const li=document.createElement('li');li.textContent=text;return li}));});document.querySelector('#choose').addEventListener('click',()=>{document.querySelector('#selected').hidden=false;document.querySelector('#selection-message').textContent=plans[current][0]+' is your local preview choice. No order was placed.';oudsWeb.Offcanvas.getInstance(drawer).hide();});document.querySelector('#clear').addEventListener('click',()=>{document.querySelector('#selected').hidden=true;document.querySelector('[data-plan]').focus()});document.querySelector('#theme').addEventListener('click',e=>{let dark=document.documentElement.dataset.bsTheme!=='dark';document.documentElement.dataset.bsTheme=dark?'dark':'light';e.currentTarget.textContent=dark?'Use light appearance':'Use dark appearance'});

コードリファレンス

  • orange-index.htmlをindex.htmlとして保存し、残りの2つのファイル名は変更しないでください。
04

Orange OUDS Web デザインシステムのエージェント設定

実装の出発点

http://localhost:8000/を開きます。コンパイル済みのネイティブアセットを使用するため、Sassのビルドは不要です。

シェル
npm init -y
npm install @ouds/[email protected] @ouds/[email protected]
# Save index.html, orange.css and orange-app.js from the supplied examples.
python3 -m http.server 8000

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

AI エージェント用プロンプト
OUDS Web 1.4の比較スタディを完全な形で実装してください。common/Orangeパッケージを対応させ、実際のbtn-brandとbtn-defaultバリアント、ネイティブのOffcanvasイベントとAPI、ライト/ダークのトークン解決、明示的なArialフォールバックを使用します。バンドルの内容はすべて架空のものとし、選択状態はローカルに限定してください。
05

Orange OUDS Web デザインシステムの情報源と対象範囲

実際のOUDS WebのCSSとOffcanvasランタイムを使用し、オリジナルの架空のOpenDesignバンドルとローカルの選択機能を組み合わせています。Arialのフォールバックを明示しており、商用オファーや注文を示すものではありません。