정부 및 공공 서비스 · 새 리소스

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 텍스트를 적용합니다. 버튼 하나의 색상만 바꾸고 테마 전체를 변경했다고 간주하지 않습니다. 다른 테마를 사용하려면 구현 단계에서 명시적으로 선택해야 합니다.

이 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 디자인 시스템의 정렬 상태와 숫자 비교

활성 정렬 기준은 하나만 유지하세요

제목 열은 오름차순으로 정렬됩니다. 같은 헤더를 다시 활성화하면 정렬 방향이 바뀌고, 분 열을 선택하면 오름차순으로 정렬됩니다. aria-sort는 현재 활성화된 헤더에만 적용되며, 각 버튼의 숨겨진 안내 문구는 다음 동작을 설명합니다. 표시되는 화살표는 별도의 장식이 아니라 동일한 상태를 나타냅니다.

숫자는 숫자로 비교하세요

Det Fælles Designsystem 디자인 시스템의 전체 작동 통합

배포 에셋을 경로 그대로 불러오세요

11.3.0 패키지의 export map에는 CSS 심층 경로 가져오기가 아니라 JavaScript 항목이 공개되어 있습니다. 설정 과정에서 배포 파일을 public/dkfds에 복사하고 index.html에서 스타일시트를 연결해 글꼴과 이미지의 상대 경로를 유지합니다. 제공된 main.js와 denmark.css는 해당 기본 파일과 같은 위치에 저장하세요. 로컬 미리보기에는 동일한 에셋이 포함되어 있어 안정적으로 확인할 수 있습니다.

  1. dkfds 11.3.0을 설치하고 배포 파일을 public/dkfds에 복사하세요.
  2. 제공된 HTML 기본 파일에서 Borger.dk 스타일시트를 불러오세요.
  3. 전체 항목과 CSS를 저장한 다음 로컬 앱을 실행하세요.
  4. 숫자 정렬, 검색 제출, 초기화, 모바일 화면의 내부 스크롤을 확인하세요.

비교 흐름 전체를 확인하세요

분 열을 양방향으로 정렬하고, 일치하는 항목이 없는 검색어를 제출한 다음 초기화하세요. Template을 검색하면 템플릿 행 두 개만 남고 현재 정렬 순서는 유지되는지 확인하세요. 휴대폰 너비에서는 표 내부를 스크롤할 수 있고 페이지 자체에는 가로 넘침이 없는지 확인하세요. 또한 번들에 포함된 모든 에셋이 로드되고 브라우저 오류가 없는지도 점검합니다.

Det Fælles Designsystem 디자인 시스템 컴포넌트 예제

main.js — 비교 동작 전체 구현

원본 데이터 전체, 숫자 및 텍스트 정렬, 제출 방식 필터링, 초기화 기능입니다.

자바스크립트
// 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 호출이 필요하지 않습니다.

sh
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

프로젝트를 위한 프롬프트

에이전트 프롬프트
실제 11.3.0 Borger.dk 배포 파일과 글꼴 환경을 사용해 DKFDS 리소스 비교를 구현합니다. 완전한 자체 숫자·제목 정렬, 활성 aria-sort 헤더 하나, 제출 방식 검색, 결과 개수 안내, 정렬 순서를 유지하는 초기화 기능을 구현합니다. 표는 키보드로 접근할 수 있는 별도의 영역 안에서 가로로 스크롤되도록 합니다.
05

Det Fælles Designsystem 디자인 시스템 출처 및 범위

DKFDS 11.3.0 Borger.dk 스타일과 글꼴을 사용한 OpenDesign 독자적인 비교 화면입니다. 정렬, 검색, 예시 데이터는 자체 애플리케이션 코드이며 DKFDS에 내장된 표 기능이 아닙니다.