카드 골격
모든 카드는 테두리 없는 면 + CardHead(카드 안 맨 위: 제목·부제 · 오른쪽 조작)로 짜요. 세그먼트·토글도 함께 있어요.
플랫폼
폰 브라우저·홈 화면 앱(767px 이하)고르기#
이 부품을 언제 쓰고, 언제 다른 것을 쓰는지예요.
언제 쓰나#
- 내용을 담는 면은 모두 Card - 테두리 없는 면 + 제목(CardHead)이고, 조작은 제목 줄 오른쪽(넓으면 아랫줄), 카드 밖 CardBar는 나란한 칸 윗선 맞춤(spacer)에만 써요. 세그먼트(Seg)·접는 세그먼트(Seg collapse)도 여기 있어요.
사용 예제#
할 일마다 실물과 코드예요. 편집을 누르면 코드를 고쳐 바로 볼 수 있어요.
작은 위젯 머리 달기#
해부도#
- 1
카드 면
안쪽 여백 16px(640px 이상 20px)이에요.
- 2
제목
CardHead의 제목이에요. 한 줄, 넘치면 말줄임이에요.
- 3
부제
두 줄까지 보여요.
- 4
조작
bar로 넘기면 제목 줄 오른쪽 끝에 앉아요.
속성#
인터페이스#
타입에서 자동으로 뽑은 표예요.
CardHead#
| 속성 | 기본값 | 타입 | 설명 |
|---|---|---|---|
| title* | - | ReactNode | 마우스를 올리면 뜨는 설명이에요. label이 없으면 이름으로도 써요. |
| sub | - | ReactNode | 제목 아래 한 줄이에요. |
| right | - | ReactNode | 오른쪽 끝에 둘 조작이에요. |
| className | - | string | 배치용 클래스예요. 모양(색·크기)은 덮어쓰지 않아요. |
| icon | - | ReactNode | 제목 앞 로고·아이콘(리블 AI 로고 등) - 2026-11-13 정리 1단계에서 더함(아직 부르는 곳 없음 → 모양 변화 0) |
| size | 'lg' | 'sm' | 'lg' | lg = 카드 제목(18px) · sm = 작은 위젯 제목(WidgetHead와 같은 모양) |
CardBar#
| 속성 | 기본값 | 타입 | 설명 |
|---|---|---|---|
| left | - | ReactNode | 왼쪽에 둘 내용이에요. |
| right | - | ReactNode | 오른쪽 끝에 둘 조작이에요. |
| spacer | - | boolean | |
| className | - | string | 배치용 클래스예요. 모양(색·크기)은 덮어쓰지 않아요. |
Seg#
| 속성 | 기본값 | 타입 | 설명 |
|---|---|---|---|
| value* | - | T | 지금 값이에요. |
| onChange* | - | (v: T) => void | 값이 바뀌면 새 값으로 불러요. |
| options* | - | readonly (readonly [T, string] | readonly [T, string, string])[] | [값, 이름] 목록이에요. |
| label | - | string | xs = 표 머리·정렬 칩 옆처럼 글자 한 줄 높이 안에 들어가는 자리(㎡/평 UnitSeg) - 2026-11-13 DS 4차 남은 것 |
| size | 'sm' | 'sm' | 'md' | 'xs' | 크기예요. |
| wrap | - | boolean | |
| className | - | string | 배치용 클래스예요. 모양(색·크기)은 덮어쓰지 않아요. |
| flip | - | boolean | 데드 클릭 실측: '평' 3.8%·'㎡' 6.2%가 이미 선택된 칸을 누른 것이었다 |
| collapse | - | 'menu' | 'auto' | 'always' | 'menu-always' | 좁을 때 접기. |
CollapsibleSeg#
| 속성 | 기본값 | 타입 | 설명 |
|---|---|---|---|
| value* | - | T | 지금 값이에요. |
| onChange* | - | (v: T) => void | 값이 바뀌면 새 값으로 불러요. |
| options* | - | readonly (readonly [T, string] | readonly [T, string, string])[] | [값, 이름] 목록이에요. |
| label | - | string | 화면 읽기 프로그램이 읽는 이름(aria-label)이에요. |
| size | 'sm' | 'sm' | 'md' | 크기예요. |
| className | - | string | 배치용 클래스예요. 모양(색·크기)은 덮어쓰지 않아요. |
| alwaysCollapse | - | boolean | 같은 토글이 이 물건에선 알약 하나로, 저 물건에선 펼친 세그로 보이면 같은 것으로 안 읽힌다. |
| menu | - | boolean | PC 기본 경로는 우측으로 펼쳐지는 인라인 세그라 옵션이 늘어난 만큼 줄이 옆으로 자란다. |
| flip | - | boolean | 2칸일 때만 뜻이 있다 - Seg의 flip으로 그대로 넘긴다. |
WidgetHead#
| 속성 | 기본값 | 타입 | 설명 |
|---|---|---|---|
| title* | - | ReactNode | 마우스를 올리면 뜨는 설명이에요. label이 없으면 이름으로도 써요. |
| right | - | ReactNode | 오른쪽 끝에 둘 조작이에요. |
| className | - | string | 배치용 클래스예요. 모양(색·크기)은 덮어쓰지 않아요. |
Toggle#
| 속성 | 기본값 | 타입 | 설명 |
|---|---|---|---|
| on* | - | boolean | 켜졌는지예요. |
| onClick* | - | () => void | 누르면 불러요. |
| title | - | string | 마우스를 올리면 뜨는 설명이에요. label이 없으면 이름으로도 써요. |
| onColor | - | string | |
| className | - | string | 배치용 클래스예요. 모양(색·크기)은 덮어쓰지 않아요. |
| children* | - | ReactNode | 안에 그릴 내용이에요. |
PeriodToggle#
| 속성 | 기본값 | 타입 | 설명 |
|---|---|---|---|
| value* | - | number | 지금 값이에요. |
| onChange* | - | (m: number) => void | 값이 바뀌면 새 값으로 불러요. |
| periods* | - | [number, string][] |
CardBox#
| 속성 | 기본값 | 타입 | 설명 |
|---|---|---|---|
| className | - | string | 배치용 클래스예요. 모양(색·크기)은 덮어쓰지 않아요. |
| tone | 'plain' | CardTone | 색의 뜻이에요. |
| density | 'default' | CardDensity | |
| as | 'div' | 'div' | 'section' | 바깥 요소 - 글 구조상 묶음이면 section(상세 카드 일부가 원래 section이었다) |
| children* | - | ReactNode | 안에 그릴 내용이에요. |
Card#
| 속성 | 기본값 | 타입 | 설명 |
|---|---|---|---|
| title | - | ReactNode | 마우스를 올리면 뜨는 설명이에요. label이 없으면 이름으로도 써요. |
| sub | - | ReactNode | 제목 아래 한 줄이에요. |
| bar | - | ReactNode | |
| barLeft | - | ReactNode | |
| barClass | - | string | |
| boxClass주의 | - | string | |
| headRight | - | ReactNode | |
| tone | 'plain' | CardTone | 박스 톤(기본 plain) · 여백(기본 default) · 제목 앞 아이콘 · 제목 크기(lg 18px · sm 위젯 12px) - 2026-11-13 더함 |
| density | 'default' | 'default' | 'compact' | |
| icon | - | ReactNode | 라벨 앞에 놓을 아이콘이에요. |
| headSize | - | 'sm' | 'lg' | |
| children* | - | ReactNode | 안에 그릴 내용이에요. |
* 필수예요. 표는 타입에서 자동으로 뽑았어요.
스펙#
상태 · 슬롯마다 실제로 그려지는 값이에요.
Card#
CardBar#
base
| 상태 | 슬롯 | 속성 | 값 |
|---|---|---|---|
| enabled | root | 바깥 아래 여백 | 8px |
| 최소 높이 | 36px | ||
| left | 최소 폭 | 0px | |
| 간격 | 6px | ||
| right | 간격 | 8px |
CardHead#
base
| 상태 | 슬롯 | 속성 | 값 |
|---|---|---|---|
| enabled | root | 바깥 아래 여백 | 8px |
| 최소 폭 | 0px | ||
| 가로 간격 | 8px | ||
| 줄 간격 | 6px | ||
| title | 넘침 | 말줄임(…) | |
| 글자 크기 | t-headline | ||
| 굵기 | 800 | ||
| 글자색 | ink | ||
| sub | 바깥 위 여백 | 2px | |
| 최대 줄 수 | 2줄 | ||
| 글자 크기 | t-cap | ||
| 글자색 | dim | ||
| right | 간격 | 8px |
Seg#
값은 컴포넌트 코드에서 뽑았고, 토큰 이름을 누르면 파운데이션으로 가요. 토큰이 없는 값만 숫자로 적었어요.
접근성#
가이드라인#
언제 쓰나요#
- 새 카드를 만들 때는 Card 하나로 시작해요.
이렇게 써요#
쓰는 규칙#
이렇게 써요
- 토글·세그먼트 같은 조작은 제목 줄 오른쪽(CardHead right · Card bar)에 둬요. 넓으면 제목 아랫줄로 내려가요.
- 나란한 칸의 윗선을 맞춰야 할 때만 CardBar spacer를 써요.
이렇게 하지 않아요
- 카드 밖 위에 조작만 띄우지 않아요(CardBar right) - 어느 카드의 것인지 몰라요.
- 면에 테두리를 두르지 않아요.
- 세그먼트를 인라인으로 다시 그리지 않아요 - Seg를 써요.
문구#
- 카드 제목은 내용의 이름으로 짧게 적어요("핵심 정보").
- 부제에는 기준을 적어요("매매 기준").
플랫폼별 차이#
| 플랫폼 | 차이 |
|---|---|
| 모바일 | 767px 이하에서 누르는 칸과 여백이 커져요(손가락 기준). |
| PC | 마우스가 있는 기기에서만 hover가 켜지고, 키보드 초점 링이 보여요. |
| Pleos개발 중 | 차량 앱의 ReevlCard · CardHead(공개 저장소)로 따로 구현했어요. 카드 안쪽 여백 32dp, 카드 사이 24dp(누르는 대상 사이 최소 간격 이상). 안쪽 여백 32dp · 카드 사이 24dp · 모서리 32dp |