Designers Italia는 CSS 패키지 그 이상입니다. 서비스 디자인 지침과 키트, 구현 자료를 포함합니다. 이 예시 화면은 문서화된 Bootstrap Italia 구현에 초점을 맞추며, 버전은 2.18.3으로 고정했습니다. 라이브러리를 설치하는 것만으로 공공 서비스를 완성하거나 지방자치단체 웹사이트의 모든 요구 사항을 충족한다고 볼 수는 없습니다.
확인한 릴리스에서 Bootstrap Italia는 Bootstrap 5.2.3을 포함해 사용자 지정합니다. 기본 Bootstrap 번들을 별도로 추가하지 마세요. 미리보기는 기본 CSS과 로컬에 제공된 Titillium Web 글꼴 파일을 사용하며, 도서관 방문 계획을 위한 독자적인 3단계 흐름을 구현합니다.
일반 인터페이스에는 Titillium Web을 사용합니다. Lora는 긴 글을 읽을 때 사용하는 세리프 글꼴 옵션이며, Roboto Mono는 코드나 고정폭 콘텐츠에 사용합니다. 미리보기는 실제로 사용하는 Titillium Web 글꼴 굵기를 불러오며, 글꼴 라이선스도 함께 유지해 시스템 글꼴로 임의 대체하지 않습니다.
본문 글꼴 크기는 16px로 유지됩니다. 제목 크기는 576px에서 달라집니다. 작은 화면의 H1은 40px, 줄 높이 48px이고 설치된 CSS에서는 48px, 줄 높이 56px입니다. 문서 표에는 데스크톱 줄 높이가 60px로 나와 있습니다. 여기의 참조 표는 확인한 릴리스 값을 기록하고, 서로 다른 출처의 값을 섞지 않고 차이가 나는 이유를 설명합니다.
타이포그래피 기준은 576px이고, 스텝퍼는 992px 미만에서 헤더 표시 방식이 바뀝니다. 좁은 화면에서는 현재 레이블과 n/total 인덱스가 계속 표시됩니다. 다른 단계 이름을 읽기 어려울 정도로 좁은 열에 밀어 넣지 않습니다. 모바일 사용자에게 현재 단계가 무엇인지 알릴 필요가 있으며, 이 예시는 제목에 포커스를 주고 접근 가능한 상태 텍스트를 표시해 이를 지원합니다.
간격 유틸리티는 검증된 rem 배율을 따릅니다. 루트 글꼴 크기가 기본값일 때 크기 1부터 5까지 각각 4, 8, 16, 24, 48px입니다. 그리드 컨테이너의 최대 너비는 xl에서 1176px이며, 이는 기억에 의존해 자주 잘못 복사하는 기본 Bootstrap 값과 다릅니다. 독립된 계획 화면에는 명시적인 애플리케이션 선택으로 더 좁은 900px 상한을 적용합니다.
문서에 안내된 구조는 steppers-header, steppers-content, steppers-nav를 구분합니다. 헤더 목록 항목에는 confirmed 및 active 클래스가 적용되고, 인덱스는 현재 위치를 나타냅니다. 이전 및 다음 버튼에는 각각 지정된 클래스가 적용됩니다. 이 클래스들은 표시 방식만 정의합니다. 현재 양식이 유효한지, 이후 단계로 이동할 수 있는지는 애플리케이션에서 판단해야 합니다.
이 예제에서는 각 단계에 일반 섹션을 사용하고 컨트롤은 DOM에 유지한 채 비활성 섹션을 숨깁니다. 따라서 액세스 메모 단계로 돌아가도 메모가 유지됩니다. 검토 단계는 기존 컨트롤의 값을 읽으며, 서버 응답을 추측해 컨트롤을 새로 만들지 않습니다.
방문 유형은 필수 항목입니다. 방문 유형을 선택하지 않고 계속 진행하면 첫 번째 단계가 유지되고, 구체적인 오류가 표시되며 첫 번째 라디오 버튼에 포커스가 이동합니다. 유형을 선택하고 계속하면 첫 단계가 완료된 것으로 표시됩니다. 메모는 선택 항목이므로 비워 둘 수 있으며, 이 경우 검토 화면에 메모가 추가되지 않았다고 표시됩니다.
뒤로 이동하면 선택 항목이나 메모를 지우지 않고 이전 단계로 돌아갑니다. 처음부터 시작을 선택하면 두 항목을 모두 의도적으로 지우고 처음으로 돌아갑니다. 마지막 화면은 로컬 계획으로 표시합니다. 예약이 제출, 승인 또는 저장되었다고 주장하지 않습니다.
현재 목록 항목에는 aria-current="step"과 화면에 보이지 않지만 스크린 리더에서 읽을 수 있는 현재 단계 레이블을 적용합니다. 이전 단계에는 confirmed 클래스뿐 아니라 완료 상태를 설명하는 텍스트도 표시합니다. 현재 제목과 단계 의미만으로도 위치를 알 수 있으므로 간결한 숫자 인덱스는 보조 기술에서 숨깁니다. 시각적인 위치 파악을 위해 화면에는 계속 표시합니다.
공식 지침에서는 단일 페이지로 구성된 단계별 흐름에 변경되는 본문 영역의 aria-live="polite" 사용을 권장합니다. 이 예제에서는 키보드 사용자가 읽기를 시작할 위치를 쉽게 찾도록 새 제목에도 포커스를 둡니다. 더 복잡한 양식에서는 이 조합이 알림을 지나치게 반복하지 않는지 지원 대상 보조 기술로 테스트하세요.
단계 이동에는 실제 버튼을 사용하고, 첫 단계에서는 뒤로 버튼에 disabled를 적용하세요.
레이블이 라디오 버튼 및 텍스트 영역과 연결되도록 하세요. 플레이스홀더 텍스트는 레이블을 대신할 수 없습니다.
패키지에는 CSS, 번들 스크립트, 소스 글꼴 및 SVG 스프라이트가 포함됩니다. 이 Stepper 예제를 사용하려면 CSS와 선택한 글꼴이 필요하며, 탐색은 애플리케이션 로직으로 처리해야 합니다. 다른 위젯은 data-bs-toggle 또는 문서에 안내된 데이터 속성을 사용해 자동으로 초기화됩니다. 동일한 위젯에 자동 초기화와 별도의 수동 인스턴스를 함께 사용하지 마세요.
모듈을 사용하는 경우 애플리케이션에 필요한 컴포넌트만 가져오세요. 공식 지침에 따르면 전환 메서드는 전환이 끝나기 전에 반환되며, 전환 중 호출은 무시될 수 있습니다. 해당 컴포넌트에서 동작을 연달아 실행하려면 관련 완료 이벤트가 발생할 때까지 기다리세요. 이 간단한 Stepper는 기본 전환 API을 임의로 추가하지 않습니다.
라이브러리 문서에서는 버전을 최신으로 유지할 것을 권장하며, 프로덕션에서 공개 CDN에 의존하는 방식은 지양합니다. 설정에서는 검증된 릴리스를 고정하며, 로컬 예제에는 자체 에셋과 라이선스가 포함됩니다. 실제 서비스에는 콘텐츠 설계, 데이터 처리, 서버 측 유효성 검사 및 제출 완료를 확인하는 응답이 여전히 필요합니다.
이 예제는 시립 로고나 공식 휘장 없이 일반적인 도서관 방문을 다룹니다. 공공기관 서비스가 아닌 OpenDesign 학습용 예제입니다. 프로토타입에서도 이 구분을 분명히 하여, 완성도 높은 검토 화면을 실제 신청 내역으로 오해하지 않도록 하세요.
기본 CSS 및 글꼴, 필수 라디오 버튼 유효성 검사, 선택 사항인 메모, 검토, 뒤로 이동 및 초기화.
html
<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Prepare a library visit</title><link rel="stylesheet" href="vendor/bootstrap-italia-2.18.3/bootstrap-italia.min.css"><link rel="stylesheet" href="vendor/bootstrap-italia-2.18.3/fonts.css"><style>body{padding:32px 16px}main{max-width:900px;margin:auto}.steppers-content{padding:24px 0}.steppers-nav{display:flex;gap:16px;justify-content:space-between}.form-check{margin-bottom:16px}footer{font-size:14px;margin-top:32px;border-top:1px solid #ccc;padding-top:16px}[hidden]{display:none!important}.error{color:var(--bs-danger)}@media(max-width:575px){body{padding:24px 16px}}</style><main><p class="text-uppercase">Independent service example</p><h1>Prepare a library visit</h1><p class="lead">Choose a visit format, add a note and review your local plan.</p><div class="steppers"><div class="steppers-header"><ul id="steps"><li class="active" aria-current="step">Visit type <span class="visually-hidden">Current step</span></li><li>Access note</li><li>Review</li></ul><span class="steppers-index" id="index" aria-hidden="true">1/3</span></div><div class="steppers-content" aria-live="polite"><section data-step="0"><h2 tabindex="-1">Choose a visit type</h2><fieldset><legend class="visually-hidden">Visit type</legend><div class="form-check"><input id="guided" type="radio" name="visit" value="Guided introduction"><label for="guided">Guided introduction</label></div><div class="form-check"><input id="quiet" type="radio" name="visit" value="Quiet reading visit"><label for="quiet">Quiet reading visit</label></div></fieldset><p id="error" class="error" role="alert" hidden>Choose a visit type before continuing.</p></section><section data-step="1" hidden><h2 tabindex="-1">Add an access note</h2><p id="hint">Optional. Describe what would help you use the space; avoid sensitive personal information.</p><label for="note">Access note</label><textarea id="note" rows="3" class="form-control" aria-describedby="hint" maxlength="200"></textarea></section><section data-step="2" hidden><h2 tabindex="-1">Review your local plan</h2><dl><dt>Visit type</dt><dd id="review-type"></dd><dt>Access note</dt><dd id="review-note"></dd></dl><p>This is a local plan only. No booking or request has been sent.</p></section></div><nav class="steppers-nav" aria-label="Plan steps"><button id="back" class="btn btn-outline-primary steppers-btn-prev" disabled>Back</button><button id="next" class="btn btn-primary steppers-btn-next">Continue</button><button id="reset" class="btn btn-primary" hidden>Start again</button></nav></div><footer>Native Bootstrap Italia 2.18.3 CSS and Titillium Web. Original local planning flow; no municipal identity or booking service.</footer></main><script>let step=0;const labels=['Visit type','Access note','Review'];function render(){document.querySelectorAll('[data-step]').forEach(x=>x.hidden=Number(x.dataset.step)!==step);document.querySelectorAll('#steps li').forEach((li,i)=>{li.className=i===step?'active':i<step?'confirmed':'';li.removeAttribute('aria-current');li.textContent=labels[i];const state=document.createElement('span');state.className='visually-hidden';state.textContent=i===step?' Current step':i<step?' Completed':'';li.append(state);if(i===step)li.setAttribute('aria-current','step')});document.querySelector('#index').textContent=(step+1)+'/3';document.querySelector('#back').disabled=step===0;document.querySelector('#next').hidden=step===2;document.querySelector('#reset').hidden=step!==2;if(step===2){document.querySelector('#review-type').textContent=document.querySelector('[name=visit]:checked').value;document.querySelector('#review-note').textContent=document.querySelector('#note').value.trim()||'No note added'}document.querySelector('[data-step="'+step+'"] h2').focus()}document.querySelector('#next').onclick=()=>{if(step===0&&!document.querySelector('[name=visit]:checked')){document.querySelector('#error').hidden=false;document.querySelector('#guided').focus();return}document.querySelector('#error').hidden=true;step++;render()};document.querySelector('#back').onclick=()=>{step--;render()};document.querySelector('#reset').onclick=()=>{document.querySelectorAll('[name=visit]').forEach(x=>x.checked=false);document.querySelector('#note').value='';step=0;render()};</script></html>
기본 CSS 및 글꼴 설정입니다. Stepper 탐색은 애플리케이션 로직으로 처리하며, 이어지는 부분에 완전한 작동 예제가 제공됩니다. Sources의 완전한 작동 예제 ZIP에는 미리보기에 필요한 정확한 종속성과 전체 문서도 포함됩니다. 해당 디렉터리에 압축을 푼 뒤 python3 -m http.server 8080을 실행하고 http://localhost:8080/designers-italia.html을 여세요. 모듈 기반 예제를 file://로 열지 마세요.
bash
npm install [email protected]
# Copy dist/css/bootstrap-italia.min.css into public/vendor.
# Copy the needed src/fonts/Titillium_Web WOFF2 files and declare @font-face.
# CSS is sufficient for the Stepper presentation; application code owns navigation.
# For data-bs-toggle widgets, load dist/js/bootstrap-italia.bundle.min.js once.
프로젝트를 위한 프롬프트
에이전트 프롬프트
Bootstrap Italia 2.18.3 기본 CSS 및 Titillium Web을 사용하세요. 문서에 안내된 steppers/header/content/nav 구조를 구성하고, active 및 confirmed 상태와 동기화된 모바일 인덱스를 구현하세요. 유효성 검사와 탐색은 애플리케이션 코드에서 처리하고, 뒤로 이동할 때 값을 유지하며, 마지막 상태의 레이블은 실제 백엔드 응답에 맞추세요. 두 번째 Bootstrap 런타임을 함께 사용하거나 로컬 검토가 제출되었다고 주장하지 마세요.
05
디자인 시스템 .italia 출처 및 범위
Bootstrap Italia에 초점을 맞춘 독립적인 OpenDesign 예제입니다. 공공기관의 정체성을 사용하지 않으며 실제 예약 서비스도 제공하지 않습니다.