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

Footer

페이지 하단 — 로고 + 링크 컬럼 + 소셜 + 하단 바.
레이아웃footerStatic specimenfooter푸터하단columns
01 · Specimen

먼저 보고, 그다음 계약을 읽습니다

페이지 하단 — 로고 + 링크 컬럼 + 소셜 + 하단 바.

Workbench 불러오는 중…
Component intent의도와 경계 읽기

TopNav 의 페어 컴포넌트로, 미니멀(하단 바만)부터 풀(로고 + 링크 컬럼 + 소셜 + 하단 바)까지 같은 컴포넌트로 커버한다. logo·columns 가 상단 그리드(__top)를, bottom·social 이 하단 바(__bottom)를 이루며 둘 다 내용이 있을 때만 렌더된다. columns/social 은 데이터 배열(FooterColumn/FooterSocial)로 넘기고, top 과 bottom 사이 임의 슬롯은 children 으로 끼운다. AppShell 의 footer 슬롯에 하나 두는 것을 전제로 한 forwardRef `<footer>` 다.

02 · Use

예제

SSOT에 등록된 실제 API 기준 snippet입니다. standalone 배지만 독립 실행 단위이며, fragment는 주변 state·handler 문맥을 생략합니다.

01풀 (로고 + 컬럼 + 소셜 + 하단)tsxfragment
풀 (로고 + 컬럼 + 소셜 + 하단)
import { Footer, Logo } from "@axe/ui";<Footer  logo={<Logo />}  columns={[    { title: "제품", items: [      { href: "/frame", label: "frame" },      { href: "/hive", label: "hive" },    ]},    { title: "회사", items: [      { href: "https://axelabs.ai", label: "axelabs.ai", external: true },    ]},  ]}  social={[    { href: "https://github.com/axelabs-ai", label: "GitHub" },  ]}  bottom={<span>© 2026 AXE Labs · v0.5.0</span>}/>
02미니멀 (하단 바만)tsxfragment
미니멀 (하단 바만)
import { Footer } from "@axe/ui";<Footer bottom={<span>© 2026 AXE Labs</span>} />
03CSS-only (비-React)htmlfragment
CSS-only (비-React)
<footer class="axe-footer">  <div class="axe-footer__top">    <div class="axe-footer__logo">      <a class="axe-logo" href="/">AXE Labs</a>    </div>    <div class="axe-footer__columns">      <div class="axe-footer__column">        <div class="axe-footer__column-title">제품</div>        <ul class="axe-footer__column-items">          <li><a class="axe-footer__link" href="/frame">frame</a></li>          <li><a class="axe-footer__link" href="/hive">hive</a></li>        </ul>      </div>    </div>  </div>  <div class="axe-footer__bottom">    <div class="axe-footer__bottom-left">© 2026 AXE Labs</div>    <div class="axe-footer__social">      <a class="axe-footer__social-link"         href="https://github.com/axelabs-ai"         aria-label="GitHub" target="_blank" rel="noopener noreferrer">GH</a>    </div>  </div></footer>
03 · React

Props

TSX 소스가 진실입니다. 주요 export 컴포넌트의 public API만 노출합니다.

이름타입필수기본값설명
logoReact.ReactNode좌상단 로고 슬롯(__logo). 보통 <Logo /> 를 넣는다.
columnsFooterColumn[]링크 컬럼 배열. FooterColumn = { title: string; items: FooterLink[] }, FooterLink = { href; label; external? }. external:true 면 링크가 새 탭(target=_blank, rel=noopener noreferrer).
bottomReact.ReactNode하단 바 좌측 슬롯. 저작권·version·build 등. (social 은 우측.)
socialFooterSocial[]하단 우측 소셜 링크 배열. FooterSocial = { href; label; icon? }. icon 없으면 label 텍스트 표시, 링크는 항상 새 탭 + aria-label=label.
childrenReact.ReactNode__top 뒤·__bottom 앞에 렌더되는 임의 커스텀 슬롯.
...restReact.HTMLAttributes<HTMLElement>className(axe-footer 뒤 병합) 등 나머지는 루트 <footer> 로 전파.
04 · Any stack

.axe-* 클래스 계약

React 밖에서도 같은 표면을 그리는 공개 계약입니다. stable은 minor 버전 안에서 이름을 바꾸지 않습니다.

클래스안정성용도
.axe-footerstable푸터 루트(<footer>). 세로 스택 + 상단 보더.
.axe-footer__topstable상단 영역 그리드(로고 | 컬럼). ≥768px 에서 2-트랙.
.axe-footer__logostable좌상단 로고 슬롯 래퍼.
.axe-footer__columnsstable링크 컬럼들의 auto-fit 그리드.
.axe-footer__columnstable링크 컬럼 하나(제목 + 항목).
.axe-footer__column-titlestable컬럼 제목(uppercase, 작은 라벨).
.axe-footer__column-itemsstable컬럼 링크 목록 <ul>(list-style 제거).
.axe-footer__linkstable컬럼 링크 <a>(hover 시 text-primary).
.axe-footer__bottomstable하단 바(좌 bottom · 우 social, 상단 보더).
.axe-footer__bottom-leftstable하단 바 좌측 슬롯(저작권 등).
.axe-footer__socialstable소셜 링크들의 가로 배치.
.axe-footer__social-linkstable소셜 아이콘 링크(28×28 정사각, hover 배경).
비-React 소비 노트
composite 이지만 Radix 상태가 없어 완전 CSS-only 재현 가능. 위 마크업 구조 그대로면 동일 레이아웃을 얻는다. 단 external 링크의 target/rel 과 소셜 링크의 aria-label 은 컴포넌트가 자동으로 넣던 것이므로 CSS-only 소비 시 마크업에 직접 기입할 것.
05 · Inclusive

접근성

키보드, ARIA, 구현 노트를 함께 검토합니다.

Keyboard
  • Tab 으로 링크 순회
  • Enter 로 이동(네이티브 앵커)
ARIA

루트가 <footer> — 페이지 직계일 때 contentinfo 랜드마크가 된다. 소셜 링크는 아이콘일 수 있어 각 <a> 에 aria-label={label} 을 부여해 접근가능 이름을 보장한다.

Notes

external:true 컬럼 링크와 모든 소셜 링크는 target=_blank + rel=noopener noreferrer 로 새 탭에서 열린다. contentinfo 랜드마크는 페이지당 하나가 권장이므로 AppShell footer 슬롯에 Footer 하나만 둘 것.

06 · Judgment

권장 · 지양

권장
  • 페이지당 하나, AppShell 의 footer 슬롯에 배치.
  • 외부 링크는 external:true 로 넘겨 rel=noopener 를 자동 부여.
지양
  • 소셜 링크의 label 을 생략하지 말 것 — 아이콘일 때 접근가능 이름의 원천.
  • 여러 <footer> contentinfo 랜드마크를 중복 배치하지 말 것.
검색창을 열면 컴포넌트 인덱스를 불러옵니다.