# Section Title 콘텐츠 한 덩어리에 이름을 붙이고, 그 덩어리에만 해당하는 설명이나 버튼을 오른쪽에 두는 제목 줄입니다. > 원본: `03_ASSET_GUIDE/catalog/section-title.js` · CSS: `03_ASSET_GUIDE/styles/elements/section-title.css` > kind `component` · category `display` · status `stable` · specSource `measured` > 데모는 `button.css`(Actions 의 util 버튼)와 `grid.css`(제목 아래 표)를 함께 씁니다 — 이 엘리먼트는 무언가의 위에 있을 때만 의미가 있기 때문입니다. --- ## 1. 구성 한 줄 안에 **Heading** 이 왼쪽, 그 덩어리에만 해당하는 **Description** 이나 **Actions** 가 오른쪽에 놓입니다. 제목 자신은 아이콘과 카운트를 함께 담을 수 있습니다. ``` ┌──────────────────────────────────────────────────────────────┐ │ [≡] 항목 목록 (1/20) 조회 기준일 정보 [EXCEL] │ └──────────────────────────────────────────────────────────────┘ ③ ④ ⑤ ⑦ ⑥ └───────── ② Heading ─────────┘ ① Container (grid 3열: minmax(0, 1fr) · auto · auto) ``` | # | 요소 | 필수 | 클래스 | 설명 | |---|---|---|---|---| | ① | Container | 필수 | `atom-section-title` | 행과 슬롯의 자리를 소유합니다. 제목의 글자 크기도 여기서 나옵니다. | | ② | Heading | 필수 | `atom-section-title__heading` | `h2` · `h3` 를 그대로 넣습니다. 이 엘리먼트는 **제목의 단계를 정하지 않습니다.** 단계는 문서 구조에 따라 정합니다. | | ③ | Icon | 선택 | `atom-section-title__icon` | 제목 앞의 아이콘입니다. **선택 사항이고 기본은 없음**입니다. 장식이므로 `aria-hidden` 입니다. AS-IS 처럼 `padding-left` 로 자리를 비워두지 않으므로, 빼면 제목이 왼쪽 끝에서 시작합니다. | | ④ | Title | 필수 | `atom-section-title__title` | 덩어리의 이름입니다. 필수입니다. | | ⑤ | Count | 선택 | `atom-section-title__count` | `(1/20)` 처럼 지금 보고 있는 양을 붙입니다. 선택 사항입니다. | | ⑥ | Actions | 선택 | `atom-section-title__actions` | 그 덩어리에만 작용하는 버튼들입니다. 선택 사항입니다. | | ⑦ | Description | 선택 | `atom-section-title__description` | 덩어리가 무엇인지 보충하는 한 줄입니다. 선택 사항입니다. | > [!NOTE] > **레이아웃 엘리먼트입니다** > 이 엘리먼트는 **행을 만들고 슬롯의 자리를 정합니다.** 글자 크기도 함께 정하지만, > heading 태그는 문서 구조가 결정합니다. `--size_small` 과 `h3` 는 서로 연동되지 > 않습니다. --- ## 2. 종류 / 크기 ### Slots 필수는 Title 하나입니다. 나머지는 없으면 자리를 차지하지 않습니다. 오른쪽 열은 **내용이 없으면 폭이 0으로 접힙니다.** 제목만 있는 경우와 버튼이 여러 개 붙은 경우 모두 같은 클래스를 씁니다. Description 과 Actions 를 함께 두면 **설명이 버튼 왼쪽**에 붙습니다. 셋을 한 셀에 겹쳐 놓지 않고 열을 따로 두었기 때문입니다. ### Layout Description 을 제목과 같은 줄에 둘지, 아래로 내릴지 정합니다. | layout | Description 자리 | 쓰는 곳 | | --- | --- | --- | | `inline` | 제목과 같은 줄의 오른쪽 끝 | 기존 화면과 모양을 맞춰야 할 때 (기본) | | `stack` | 제목 바로 아래, 왼쪽 정렬 | 설명이 길거나 폭이 넓은 화면 | Actions 는 두 layout 에서 **모두 첫 줄 오른쪽**에 남습니다. 버튼은 제목과 같은 층의 액션이기 때문입니다. > [!WARNING] > **폭이 넓으면 `inline` 의 설명은 제목에서 멀어집니다** > 1400px 표 위에서는 제목이 왼쪽 끝, 설명이 오른쪽 끝에 놓여 서로 멀어집니다. > 폭이 1000px 을 넘고 설명이 제목을 이해하는 데 꼭 필요하다면 > `stack` 을 쓰세요. `inline` 은 기존 화면과의 호환을 위한 기본값입니다. ### Variant 아래 콘텐츠와의 경계를 그릴지 정합니다. | variant | 모양 | 쓰는 곳 | | --- | --- | --- | | `plain` | 선 없음 | 제목 아래가 표나 카드처럼 이미 경계를 가진 것 (기본) | | `underline` | 아래 1px `--atom-border-default` | 제목 아래가 평범한 텍스트·폼일 때 | 선은 글자 밑이 아니라 **행 전체**에 그어집니다. 제목과 버튼이 한 줄로 묶여 아래 콘텐츠와 구분됩니다. ### Size 두 단계입니다. | size | 제목 | 아이콘 | Count · Description | 쓰는 곳 | | --- | --- | --- | --- | --- | | `medium` | 18px / 500 (`--atom-t7-size`) | 18px | 13px (`--atom-t3-size`) | 페이지가 다루는 덩어리 (기본) | | `small` | 15px / 500 (`--atom-t5-size`) | 16px | 12px (`--atom-t2-size`) | 그 안의 하위 덩어리 | `small` 아래 단계는 두지 않습니다. 본문이 15px 이므로 그보다 작은 제목은 본문과 구분되지 않습니다. 행간은 두 사이즈 모두 1.5 입니다. `--atom-t5-line` 은 1.7 이지만 본문용 값이고, [Typography](../foundation/typography.md) 는 제목 구간을 1.45–1.5 로 둡니다. 자간은 15px 에서 `normal` 이고, 18px 부터 줄입니다. ### 긴 제목 제목만 `…` 로 잘립니다. Count 와 Actions 는 밀려나지 않습니다. 버튼이 제목 길이 때문에 화면 밖으로 밀리면 작업을 할 수 없기 때문입니다. 잘린 제목도 전체 문장은 DOM 에 남아 스크린리더가 읽습니다. ### 클래스 계약 `styles/elements/section-title.css` 헤더와 원본 `registry.json` `css.blocks` 기준입니다. 클래스가 없는 값(—)은 기본 스타일 그대로입니다. | Prop | 값 | 클래스 | |---|---|---| | `size` | `small` · `medium` | `--size_small` · — | | `variant` | `plain` · `underline` | — · `--variant_underline` | | `layout` | `inline` · `stack` | — · `--layout_stack` | 파트: `__heading` · `__icon` · `__title` · `__count` · `__description` · `__actions` 상태 선택자: 없음 (원본 `css.states` 가 비어 있습니다) --- ## 3. 상태 상태가 없는 표시 엘리먼트입니다. 원본 CSS 에 `:hover` · `[data-*]` · `aria-*` 상태 선택자가 없습니다. Actions 슬롯의 버튼은 [Button](./button.md) 의 상태를 그대로 가집니다. --- ## 4. Props | Prop | Type | Default | 필수 | 설명 | |---|---|---|---|---| | `title` | `string` | | ● | 덩어리의 이름입니다. | | `as` | `"h2" \| "h3" \| "h4"` | `"h2"` | | `__heading` 이 렌더할 태그입니다. 문서 구조가 정합니다. | | `icon` | `ReactNode` | | | 제목 앞의 아이콘입니다. 장식으로 노출됩니다. | | `count` | `string` | | | `"(1/20)"` 처럼 이미 조립된 문자열입니다. | | `description` | `ReactNode` | | | 보충 한 줄입니다. | | `actions` | `ReactNode` | | | 그 덩어리에 작용하는 버튼들입니다. | | `layout` | `"inline" \| "stack"` | `"inline"` | | Description 을 같은 줄에 둘지 아래로 내릴지입니다. | | `variant` | `"plain" \| "underline"` | `"plain"` | | 행 아래 경계선입니다. | | `size` | `"small" \| "medium"` | `"medium"` | | 제목과 보조 글자의 크기입니다. | (구현 추가: `countLabel?: string` — Count 에 붙일 `aria-label`. 원본 Markup 의 `aria-label="20건 중 1건"` 을 지정하는 통로입니다.) ### Parts (compound) | Part | 요소 | 설명 | |---|---|---| | `SectionTitle` | `
` · `
조회 기준일에 해당하는 정보입니다