본문으로 건너뛰기
Dot Design System
v0.3.1

PageScaffold

페이지 폭과 일관된 세로 리듬의 기본 틀을 제공합니다.

목적

PageScaffold는 제품 페이지의 semantic main, 최대 폭, 가로 여백과 섹션 리듬을 제공한다. 페이지마다 다른 outer padding과 max-width를 만들지 않게 하며, 작업의 성격에 따라 읽기 폭과 비교 폭을 선택하게 한다.

선택 기준

  • route의 주 콘텐츠를 감싸는 기본 container로 사용한다.
  • 앱 shell, sidebar, 전역 navigation까지 감싸지 않는다.
  • 한 문서에 main이 이미 있으면 중첩하지 말고 기존 구조와 역할을 조정한다.
  • 작업 폭에 따라 content, wide, full을 의도적으로 선택한다.

구조

  • semantic main
  • 가운데 정렬된 전체 폭 container
  • 반응형 가로 padding
  • children 사이 기본 세로 간격
  • PageHeader → 환경/context → PageToolbar → content 순서가 권장된다.

변형과 크기

width최대 폭권장 용도
content1120px일반 목록, 설정, 읽기, 단일 폼
wide1440px데이터 비교, 일정, outline+editor
full제한 없음화면 전체가 작업 공간인 전문 도구

full은 여백이 없어지는 옵션이 아니다. 기본 반응형 page padding은 유지된다.

상태와 동작

  • 자체 상태와 상호작용은 없다.
  • route 전환 시 제품이 scroll restoration과 title focus를 소유한다.
  • 목록→상세→목록 이동에서는 이전 scroll, 검색, 필터, 선택 맥락을 복원한다.
  • 페이지 로딩 상태에서도 scaffold와 header 위치를 유지해 화면 전체가 흔들리지 않게 한다.

콘텐츠

  • scaffold 자체에는 문구 prop이 없다.
  • children의 제목 계층은 PageHeader의 h1부터 순서대로 구성한다.
  • 섹션 사이 간격을 임의 margin으로 반복 덮어쓰기보다 Section을 사용한다.

접근성

  • main landmark를 제공한다. 페이지에 하나의 주 main만 유지한다.
  • skip link의 목적지가 될 수 있도록 필요하면 id를 전달한다.
  • aria-label은 여러 main landmark를 구분해야 할 때만 사용한다.
  • focus와 scroll을 scaffold 자체에 강제로 두지 않는다.

좁은 화면과 긴 콘텐츠

  • 가로 padding은 작은 화면 16px, 중간 화면 24px, 큰 화면 32px으로 반응한다.
  • 넓은 table이나 timeline이 필요하면 page 전체를 overflow시키지 말고 해당 데이터 영역에 명시적 scroll container를 둔다.
  • widefull을 사용해 긴 문장의 읽기 폭까지 넓히지 않는다. 설명 본문은 별도 max-width를 유지한다.
  • 다열 레이아웃은 작은 화면에서 한 열 또는 순차 흐름으로 전환한다.

공개 API

PageScaffoldPropsReact.HTMLAttributes<HTMLDivElement>를 확장한다.

속성타입기본값설명
width'content' | 'wide' | 'full''content'페이지 최대 폭
classNamestring없음main 클래스
childrenReactNode없음페이지 콘텐츠
기타HTMLAttributes<HTMLDivElement>없음id, aria-* 등 표준 속성

공개 타입은 PageScaffoldProps, PageWidth다.

예제

사용 코드 · TSX
import { PageHeader, PageScaffold, Section } from '@classum/dot-design-system/ui';

export function WorkspaceSettingsPage() {
  return (
    <PageScaffold id="main-content" width="content">
      <PageHeader title="워크스페이스 설정" description="구성원에게 적용되는 이름과 운영 기준을 관리해요." />
      <Section title="기본 정보">{/* form */}</Section>
    </PageScaffold>
  );
}

피해야 할 사용

  • 앱 shell과 sidebar까지 PageScaffold 안에 넣기
  • 한 페이지 안에 여러 PageScaffold 중첩
  • 모든 화면을 이유 없이 full로 설정
  • 긴 본문을 1440px 전체 폭으로 읽게 하기
  • 페이지마다 outer padding과 max-width를 다시 정의
  • main landmark가 이미 있는데 추가로 렌더

관련 항목