본문으로 건너뛰기
레이아웃

스택

자식을 세로/가로로 일정 간격으로 배치하는 flex 레이아웃이다. 방향·간격·정렬·분배·줄바꿈을 토큰으로 다뤄 custom CSS 없이 일관된 배치를 만든다. 배치 전용이라 패딩·배경·테두리는 박스와 조합하고, 정밀한 격자는 그리드를 쓴다. gap 은 deux 간격 스케일을 따르고, per-item 간격이나 responsive direction 같은 롱테일은 className 으로 덧입힌다.

활용 방법

방향 (block · inline)

기본은 block(세로). direction="inline" 이면 가로로 배치된다.

Preview
하나
하나
tsx
<Stack gap="sm">...</Stack> {/* 세로 */}
<Stack direction="inline" gap="sm">...</Stack> {/* 가로 */}

간격 (gap)

gap 으로 자식 사이 간격을 deux 스케일에서 고른다(xs 4 · sm 8 · base 12 · lg 16 · xl 24px).

Preview
xs
A
B
C
base
A
B
C
xl
A
B
C
tsx
<Stack direction="inline" gap="xs">...</Stack>
<Stack direction="inline" gap="base">...</Stack>
<Stack direction="inline" gap="xl">...</Stack>

정렬 · 분배 (align · justify)

justify 는 주축 분배, align 은 교차축 정렬. 아래는 양끝 분배 + 세로 가운데.

Preview
왼쪽
가운데(키 큼)
오른쪽
tsx
<Stack direction="inline" justify="between" align="center">
<Cell>왼쪽</Cell>
<Cell>가운데</Cell>
<Cell>오른쪽</Cell>
</Stack>

줄바꿈 (wrap)

wrap 을 주면 넘치는 자식이 다음 줄로 내려간다. 칩·태그 묶음에 적합.

Preview
서버일로와개발자 콘솔배포K-스타트업쿠팡
tsx
<Stack direction="inline" gap="sm" wrap>
{tags.map((t) => <Badge key={t}>{t}</Badge>)}
</Stack>

박스와 조합 (카드)

배치는 Stack, 용기(패딩·배경·테두리)는 Box. 둘을 겹쳐 카드를 만든다.

Preview
제주 카페 리스트최근 7일 · 12곳
운영중브레이크
tsx
<Box background="surface" border="base" radius="lg" padding="base">
<Stack gap="sm">
<Heading />
<Stack direction="inline" gap="xs" wrap>
<Badge tone="success">운영중</Badge>
</Stack>
</Stack>
</Box>

박스 · 그리드와 역할

  • · 스택: 배치(방향·간격·정렬). 한 축으로 줄 세우기.
  • · 박스: 용기(패딩·배경·테두리·반경). 스택과 겹쳐 쓴다.
  • · 그리드: 정밀한 다열 격자. 스택으로 부족할 때(예정).

속성

이름타입기본값설명
direction"block" | "inline""block"세로(block) / 가로(inline)
gap"none" | "xs" | "sm" | "base" | "lg" | "xl""base"자식 사이 간격(4·8·12·16·24px)
align"start" | "center" | "end" | "stretch" | "baseline"-교차축 정렬(미지정 시 stretch)
justify"start" | "center" | "end" | "between" | "around" | "evenly"-주축 분배(미지정 시 start)
wrapbooleanfalse넘치면 줄바꿈
asElementType"div"시맨틱 요소
classNamestring-롱테일: per-item 간격·responsive direction 등
...propsHTMLAttributes-id·role·aria-* 등 전달