Foundation
PackagesUIComponents

Header

アプリケーションのヘッダーレイアウト。ロゴ・ナビゲーション・アクションの3スロット構成で、sticky配置に対応する。

いつ使うか

  • アプリケーション全体のヘッダーバーを配置するときに使用する
  • ロゴ、メインナビゲーション、ユーザーメニューなどをまとめるレイアウトシェルとして使用する

いつ使わないか

  • ページ内のセクション見出しには使わない。Card や通常の見出し要素を使用する
  • サイドバーのヘッダーには使わない。専用のレイアウトコンポーネントを使用する

Usage

import { Header } from '@bi-shop-it/ui/header';
import { Nav, NavItem } from '@bi-shop-it/ui/nav';
import { Avatar } from '@bi-shop-it/ui/avatar';
import { DropdownMenu } from '@bi-shop-it/ui/dropdown-menu';

<Header
  actions={
    <DropdownMenu
      align="end"
      groups={[
        {
          items: [
            {
              icon: 'LogOut',
              label: 'ログアウト',
              variant: 'destructive',
              onSelect: () => {},
            },
          ],
        },
      ]}
      trigger={<Avatar name="田中太郎" size="sm" src="/avatar.png" />}
    />
  }
  logo={<span className="font-bold">AppName</span>}
  nav={
    <Nav>
      <NavItem href="/dashboard">ダッシュボード</NavItem>
      <NavItem isActive href="/projects">
        プロジェクト
      </NavItem>
      <NavItem href="/settings">設定</NavItem>
    </Nav>
  }
/>;

Props

Propデフォルト説明
logoReactNode左端に配置するロゴやサービス名
navReactNodeロゴの右に配置するナビゲーション
actionsReactNode右端に配置するアクション(ユーザーメニュー等)

状態

基本構成

ロゴ + Nav + ユーザーメニュー(Avatar + DropdownMenu)の標準的なヘッダー。Avatar をクリックするとログアウトメニューが表示される。

<Header
  actions={
    <DropdownMenu
      align="end"
      groups={[
        {
          items: [
            {
              icon: 'LogOut',
              label: 'ログアウト',
              variant: 'destructive',
              onSelect: handleLogout,
            },
          ],
        },
      ]}
      trigger={<Avatar name="田中太郎" size="sm" src="/avatar.png" />}
    />
  }
  logo={<span className="font-bold">AppName</span>}
  nav={
    <Nav>
      <NavItem href="/dashboard">ダッシュボード</NavItem>
      <NavItem isActive href="/projects">
        プロジェクト
      </NavItem>
      <NavItem href="/settings">設定</NavItem>
    </Nav>
  }
/>

ロゴのみ

nav と actions を省略した最小構成。

AppName
<Header logo={<span className="font-bold">AppName</span>} />

ユーザーメニュー付き

Nav とユーザーメニューを組み合わせた構成。

<Header
  actions={
    <DropdownMenu
      align="end"
      groups={[
        {
          items: [
            {
              icon: 'LogOut',
              label: 'ログアウト',
              variant: 'destructive',
              onSelect: handleLogout,
            },
          ],
        },
      ]}
      trigger={<Avatar name="田中太郎" size="sm" src="/avatar.png" />}
    />
  }
  logo={<span className="font-bold">AppName</span>}
  nav={
    <Nav>
      <NavItem href="/dashboard">ダッシュボード</NavItem>
      <NavItem isActive href="/projects">
        プロジェクト
      </NavItem>
      <NavItem href="/settings">設定</NavItem>
    </Nav>
  }
/>

レイアウトガイドライン

  • max-width: 内部コンテナは max-w-screen-xl(1280px)で中央揃え
  • 高さ: h-14(56px)固定。業務システムの標準ヘッダー高さ
  • sticky: sticky top-0 z-40 でスクロール追従する。ドロップダウン(z-50)より下の z-index を使用
  • 背景色: bg-background を指定し、sticky 時にコンテンツが透けないようにしている

アクセシビリティ

コンポーネントが内部で処理すること

  • <header> 要素でラップし、スクリーンリーダーがバナーランドマークとして認識する

利用者が対応すること

  • ページ内に複数のヘッダーがある場合は aria-label を付与して区別すること
  • nav スロットには Nav コンポーネント(<nav> 要素)を配置し、ナビゲーションランドマークを確保すること
  • ロゴにはリンクを含め、トップページへの遷移手段を提供すること

関連コンポーネント

  • Nav — ヘッダー内のメインナビゲーション
  • Avatar — ユーザーアバター表示
  • DropdownMenu — ユーザーメニューのドロップダウン

On this page