Novi UI
コンポーネント一覧

Button

押した結果が同じ画面で完結するなら Button、別ページへ移るならリンクを使う。

デモ

使い分け

こうする

  • 主操作を 1 つだけ primary にする。残りは outline / ghost で従属させる
  • 文言は動詞で終える(「保存」「削除」)。「OK」「はい」は何が起きるか分からない
  • 取り消せない操作は danger にし、Modal で確認を挟む

こうしない

  • 別ページへ移る操作にボタンを使わない。リンクを使う(右クリックで開ける、履歴に残る)
  • 同じ行に primary を 2 つ並べない。どちらが主か決めきれていない印
  • 読み込み中に isDisabled だけで済ませない。何を待っているかは isLoading が示す

Props

Button の props 一覧
名前型説明
variant'solid' | 'outline' | 'soft' | 'ghost' | 'plain'
size'sm' | 'md' | 'lg'
color'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger'
radius'none' | 'sm' | 'md' | 'lg' | 'full'
isDisabledboolean無効化する。`disabled` ではないので注意(React Aria 準拠)
isLoadingboolean読み込み中。spinner slot を描画し、操作を受け付けない
type'button' | 'submit' | 'reset'
aria-labelstringアイコンだけで文字を持たないボタンの名前。文字があるボタンには不要
onPress() => void押下時。`onClick` ではないので注意(タッチ・ペン・キーボードを統一的に扱う)
startContentReactNode
endContentReactNode
childrenReactNode
classNamesClassNames<typeof buttonSlots>

Slot

構成部位に data-slot が出力されます。 CSS の上書きやテストはこれを狙ってください。

  • root必須
  • startContent
  • label必須
  • endContent
  • spinner

アクセシビリティ

キーボード操作
キー動作
Enter / Space押す
  • Enter / Space で発火する。`onPress` はマウス・タッチ・ペン・キーボードを統一的に扱う。 `isLoading` 中の spinner は `aria-hidden`。文字を持たないアイコンだけのボタンには `aria-label` で名前を与える
  • キーボードだけで操作できます。フォーカスリングはコントラスト比 3:1 以上です。
  • 本文のコントラスト比は light / dark とも 4.5:1 以上を検査で保証しています。
  • prefers-reduced-motion が有効なときはアニメーションを行いません。