行政・公共サービス · 新しいリソース

Det Fælles Designsystem デザインシステム.

DKFDSのデンマーク向けテーマ、実際のSassスケール、アクセシブルなテーブルのパターンを、数値による並べ替え、検索の送信、該当なしの場合の再試行案内を含むリソース比較で確認できます。

OpenDesign ガイド6章参考項目33件オリジナルアプリケーションガイド
01

Det Fælles Designsystem デザインシステムのインターフェースプレビュー

5つのオリジナルの計画リソースを比較し、並び順を反転して、検索結果がない場合に復帰します。

リソース比較を並べ替えて検索完全な例を開く
公開版DKFDS 11.3.0 Borger.dk CSSとローカルフォントを使用。数値・テキストのオリジナルの並べ替えと、送信型検索を実装。 · 実装リファレンス
02

Det Fælles Designsystem デザインシステムのデザインリファレンス

実際のDKFDS 11.3.0 Borger.dkテーマ、間隔マップ、タイポグラフィマップ、フォーカス変数を掲載しています。表示されている名前はSassソースの参照名です。

Borger.dkのテーマとフォーカス

ソース
名前 / ルール値 / 設定用途
$borger-primary#44831E 実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。
$borger-primary-dark#3C5C22 実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。
$borger-primary-darker#233614 実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。
$header-portal-background-color#f1f1f1 実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。
$theme-focus-width3px実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。
$theme-focus-offset1px実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。
$theme-focus-stylesolid実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。
$typography-text-max-width66ch実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。
$typography-font-familyIBM Plex Sans, system-ui, system, sans-serif実際の11.3.0 Sass設定です。これらの名前はソース変数であり、CSSのカスタムプロパティではありません。

間隔マップのキー

ソース
名前 / ルール値 / 設定用途
00px公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。
12px公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。
24px公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。
38px公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。
30512px公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。
416px公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。
40520px公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。
524px公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。
50528px公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。
632px公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。
740px公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。
848px公開されている$spacersマップです。305や405のような連番ではないキーは、それぞれ12px、20pxを表します。キーをピクセル値として解釈しないでください。

フォントサイズマップ

ソース
名前 / ルール値 / 設定用途
2xs1.2rem公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。
xs1.4rem公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。
sm1.6rem公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。
md1.8rem公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。
lg2.0rem公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。
xl2.1rem公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。
2xl2.2rem公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。
3xl2.4rem公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。
4xl2.8rem公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。
5xl3.2rem公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。
6xl4.0rem公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。
7xl4.8rem公開されている$fds-font-sizesの項目です。既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%です。ブラウザーの既定値が16pxの場合、1.6remは16pxになります。
03

Det Fælles Designsystem デザインシステム完全ガイド

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

DESIGN-denmark-fds.md

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

ガイドをダウンロード

Det Fælles Designsystem デザインシステム:DKFDSのテーマと実装範囲

Borger.dkかVirkかを意図的に選ぶ

Det Fælles Designsystemでは、Borger.dkとVirkそれぞれのスタイルシートが提供されています。この例ではdkfds 11.3.0を固定し、Borger.dkのスタイルシートを使用することで、特徴的な緑のプライマリーコントロールとIBM Plex Sansのテキストを適用します。ボタンの色を1つだけ変えて、テーマ全体を切り替えたことにはしません。別のテーマを使う場合は、実装上の選択として意図的に読み込んでください。

この OpenDesign ガイドから

オリジナルの並べ替え機能をライブラリの機能として扱わない

公開されているテーブルのガイドでは、テーブルのマークアップとスタイルが提供されていますが、並べ替えと検索の動作は明示的にアプリケーション側に委ねられています。プレビューには、その両方を実装したオリジナルの機能が含まれています。この違いは重要です。DKFDS JavaScriptをインポートしただけでは、任意のテーブルが検索・並べ替え可能なデータビューになるわけではありません。

Det Fælles Designsystem デザインシステム:Sassの値と基本のリズム

ソースマップはソースマップとして読む

このリファレンスでは、架空の--token名ではなく、実際のSass値を記録しています。間隔マップは8pxを基準とし、305は12px、405は20pxを表します。開発者は、これらの数値をそのままピクセル値として扱うのではなく、ライブラリのヘルパーまたは対応するユーティリティの規約に従う必要があります。パラメーター表でマッピングを確認できます。

ルートフォントの規約を守る

既定のルートサイズは、ブラウザーのフォント設定を尊重して62.5%に設定されています。そのため、通常のブラウザー設定では、ソースのフォントサイズマップに標準の小サイズ/本文サイズとして1.6remが含まれます。ルートサイズが異なる環境でrem値をそのまま使用すると、結果が大きく変わることがあります。この例では実際のスタイルシートを読み込み、文字組みと間隔の整合性を保っています。

Det Fælles Designsystem デザインシステム:セマンティックなテーブル構造

キャプションと明確な列の役割を設ける

リソース比較テーブルにはキャプション、列見出し、通常のデータセルがあります。ユーザーが属性ごとに比較できるよう、タイトル、形式、所要時間(分)、目的をそれぞれ別の列に配置します。閲覧時間はサンプルとして設定した推定値であり、トラフィックやパフォーマンスの統計値ではありません。キャプションでそのことを明確にしつつ、テーブルの構造は変えません。

  • 有用なキャプションと列見出しを用意してください。
  • アプリケーションのモデルでは、数値データを数値として保持してください。
  • 画面幅が狭いときは、フォーカス可能なスクロール領域にラベルを付けます。

モバイルではテーブル内をスクロール

並び替え可能なテーブルは、フォーカス可能なレスポンシブスクロール領域に配置されています。最小幅を確保して列の読みやすさを保ちながら、ページ全体はビューポート内に収まります。この例では、画面幅が狭いときにテーブルを無関係なカード形式へ変更しません。その場合は、別のナビゲーションと並び替え操作の仕様が必要になるためです。キーボード利用者はスクロール領域にフォーカスできます。

Det Fælles Designsystem デザインシステムの並び替え状態と数値比較

有効な並び順は1つだけにする

タイトル列は昇順で並び替えられます。同じ見出しを有効にすると降順に切り替わり、分数列を選ぶと昇順で並び替えられます。aria-sort が設定されるのは現在の見出しだけです。また、各ボタンの非表示の説明には次の操作が示されます。表示される矢印は同じ状態を示すもので、独立した装飾ではありません。

数値は数値として比較する

Det Fælles Designsystem デザインシステム 完全な動作を備えた統合

パスを維持して配布アセットを読み込む

11.3.0 パッケージのエクスポートマップで公開されているのは JavaScript エントリーであり、任意の CSS ディープインポートではありません。セットアップでは配布ファイルを public/dkfds にコピーし、index.html からスタイルシートを読み込むことで、相対パスで指定されたフォントや画像をそのまま利用できるようにします。提供された main.js と denmark.css は、そのシェルと同じ場所に保存してください。ローカルプレビューには同じアセットを埋め込み、確実に確認できるようにしています。

  1. dkfds 11.3.0 をインストールし、配布ファイルを public/dkfds にコピーします。
  2. 提供された HTML シェルを使って Borger.dk のスタイルシートを読み込みます。
  3. 完全なエントリーと CSS を保存し、ローカルアプリを実行します。
  4. 数値の並び替え、送信検索、リセット、モバイルでのテーブル内スクロールを確認します。

比較の一連の操作を確認する

分数列を昇順と降順の両方で並び替え、一致する項目がない検索を送信してからリセットします。「Template」を検索し、現在の並び順を保ったままテンプレートの2行だけが残ることを確認してください。スマートフォン幅では、ページ全体にはみ出しが生じず、テーブル内をスクロールできることを確認します。また、バンドルされたすべてのアセットが読み込まれ、ブラウザーエラーがないことも確認します。

Det Fælles Designsystem デザインシステムのコンポーネント例

main.js — 比較機能の完全な動作

元データ全件、数値・テキストの並び替え、送信による絞り込み、リセットを実装しています。

JavaScript
// index.html loads /dkfds/css/dkfds-borgerdk.css from the copied distribution.
import './denmark.css';
const rows=[{name:'Content inventory',type:'Worksheet',minutes:25,note:'Map the purpose and owner of each section.'},{name:'Accessibility review',type:'Checklist',minutes:30,note:'Inspect keyboard use, reading order and clear labels.'},{name:'Research questions',type:'Template',minutes:15,note:'Separate assumptions from questions that need evidence.'},{name:'Decision summary',type:'Template',minutes:10,note:'Record a choice, its reason and what remains uncertain.'},{name:'Prototype walkthrough',type:'Guide',minutes:20,note:'Walk through one realistic task and note friction.'}];let key='name',direction=1,query='';document.getElementById('root').innerHTML=`<main><p class="eyebrow">DET FÆLLES DESIGNSYSTEM / ORIGINAL TABLE STUDY</p><h1>Find a planning resource</h1><p class="lead">Compare five authored resources. Search the full table or sort by title and estimated reading time.</p><form id="search-form"><label class="form-label" for="search">Search sample resources</label><div class="search-controls"><input class="form-input" id="search" type="search"><button class="button button-primary" type="submit">Search</button><button class="button button-secondary" id="reset" type="button">Reset</button></div></form><p id="count" role="status"></p><div class="table--responsive-scroll" tabindex="0" role="region" aria-label="Resource comparison table"><table class="table" id="resource-table"><caption>Original resource comparison; reading times are sample estimates</caption><thead><tr><th scope="col" id="name-head" aria-sort="ascending"><button class="button button-unstyled sort" data-key="name">Resource title <span class="arrow" aria-hidden="true">↑</span><span class="sr-only"> — sort descending</span></button></th><th scope="col">Format</th><th scope="col" id="minutes-head"><button class="button button-unstyled sort" data-key="minutes">Minutes <span class="arrow" aria-hidden="true">↕</span><span class="sr-only"> — sort ascending</span></button></th><th scope="col">Purpose</th></tr></thead><tbody id="rows"></tbody></table></div><section id="empty" hidden><h2>No matching resource</h2><p>Try a shorter word, a format such as Template, or reset the search.</p></section><aside><h2>About this table</h2><p>The Borger.dk theme and table styling are from DKFDS 11.3.0. Search and sorting are complete original JavaScript: the published table component does not implement them for you.</p><ul><li>Search is applied when you submit the form.</li><li>A selected column always has an active sort order.</li><li>On a narrow screen, scroll the table without moving the whole page.</li></ul></aside></main>`;const $=id=>document.getElementById(id);function render(){const list=rows.filter(r=>Object.values(r).join(' ').toLowerCase().includes(query)).sort((a,b)=>direction*(key==='minutes'?a.minutes-b.minutes:a.name.localeCompare(b.name)));$('rows').replaceChildren(...list.map(r=>{const tr=document.createElement('tr');[r.name,r.type,String(r.minutes),r.note].forEach(value=>{const td=document.createElement('td');td.textContent=value;tr.append(td)});return tr}));$('count').textContent=list.length+' of '+rows.length+' resources · sorted by '+(key==='name'?'title':'minutes')+' '+(direction===1?'ascending':'descending');$('empty').hidden=!!list.length;document.querySelectorAll('.sort').forEach(b=>{const active=b.dataset.key===key;active?b.parentElement.setAttribute('aria-sort',direction===1?'ascending':'descending'):b.parentElement.removeAttribute('aria-sort');b.querySelector('.arrow').textContent=active?(direction===1?'↑':'↓'):'↕';b.querySelector('.sr-only').textContent=' — sort '+(active&&direction===1?'descending':'ascending')})}$('search-form').addEventListener('submit',e=>{e.preventDefault();query=$('search').value.trim().toLowerCase();render()});$('reset').addEventListener('click',()=>{$('search').value='';query='';render();$('search').focus()});document.querySelectorAll('.sort').forEach(b=>b.addEventListener('click',()=>{direction=key===b.dataset.key?-direction:1;key=b.dataset.key;render()}));render();

コードリファレンス

  • 公開されているテーブル統合の責務範囲に従い、並び替えと検索は元のアプリケーションコードで実装しています。

denmark.css — 元ページの構成

レスポンシブ対応の検索コントロールと、キーボードでフォーカスできるテーブルのスクロール領域。

CSS
body{margin:0}main{max-width:1160px;padding:32px;margin:auto}.eyebrow{font-size:14px;font-weight:600;letter-spacing:.04em}.lead{max-width:66ch}#search-form{margin:32px 0}.search-controls{display:flex;gap:16px;align-items:center;flex-wrap:wrap}.search-controls input{flex:1;min-width:180px;max-width:480px}#count{font-weight:600}.table--responsive-scroll{position:relative;max-width:100%;overflow:auto}.table{min-width:720px;width:100%}.table caption{text-align:left;font-weight:600;margin-bottom:16px}.table th:nth-child(1){width:25%}.table th:nth-child(2){width:15%}.table th:nth-child(3){width:16%}.arrow{margin-left:8px}.sort{white-space:nowrap}aside,#empty{padding:24px;margin-top:32px;background:#f1f1f1;border-left:4px solid #44831e}aside h2,#empty h2{margin-top:0}aside li{margin:8px 0}[hidden]{display:none!important}@media(max-width:760px){main{padding:20px}.search-controls{gap:12px}.search-controls input{flex-basis:100%;max-width:none}h1{font-size:34px}}

@media(max-width:480px){.search-controls input{min-width:0;width:100%}.search-controls .button{max-width:100%;white-space:normal}h1{overflow-wrap:anywhere}}

コードリファレンス

  • 画面幅が狭いときも、スクロール領域内でテーブルの列構成を維持します。

index.html — 配布ファイルを読み込む完全なシェル

相対パスで指定されたアセットを維持して、公開済みのスタイルシートを読み込みます。

html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Planning resource comparison</title>
<link rel="stylesheet" href="/dkfds/css/dkfds-borgerdk.css">
</head>
<body><div id="root"></div><script type="module" src="/src/main.js"></script></body>
</html>

コードリファレンス

  • Vite のルートにある index.html を、このシェルに置き換えます。
04

Det Fælles Designsystem デザインシステムのエージェント設定

実装の出発点

公式のスタイルシートとフォントをローカルで使用します。並び替えと絞り込みはアプリケーション側で処理するため、この静的なテーブルのスタイルには DKFDS.init の呼び出しは不要です。

シェル
npm create vite@latest dkfds-table -- --template vanilla
cd dkfds-table
npm install
npm install [email protected]
mkdir -p public/dkfds
cp -R node_modules/dkfds/dist/. public/dkfds/
# Replace index.html, src/main.js and src/denmark.css with the supplied examples.
npm run dev

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

AI エージェント用プロンプト
実際の 11.3.0 Borger.dk 配布ファイルとフォント環境を使って、DKFDS のリソース比較を構築してください。元の実装に基づき、数値とタイトルの並び替え、有効な aria-sort 見出し1つ、送信検索、件数の表示、並び順を保つリセットをすべて実装してください。テーブルは、キーボードで操作できる専用領域内で水平方向にスクロールできるようにしてください。
05

Det Fælles Designsystem デザインシステムの参照元と対象範囲

DKFDS 11.3.0 の Borger.dk スタイルとフォントを使った、OpenDesign 独自の比較機能です。並び替え、検索、サンプルデータはすべてアプリケーション側で独自に実装しており、DKFDS に組み込まれたテーブル機能ではありません。