Sparkle Design

Button

ボタンはフォームの送信、ダイアログの展開、アクションのキャンセル、削除の実行など、アクションやイベントのトリガーとして使用するコンポーネントです。

Button の概要図

Anatomy: 解剖図

Buttonの構成要素を示す解剖図。1はHTML Button要素であるContainerを、2はラベル前に配置するIconを、3はボタンにコンテキストを付与するLabelを、4はラベル後に配置するIconを示します。
ItemNameDescriptionComponentOptional
1ContainerHTML Button エレメント
2Iconラベルの前 (leading) に配置するアイコン要素Icon任意
3Labelボタンにコンテキストを付与するためのテキスト要素
4Iconラベルの後 (trailing) に配置するアイコン要素Icon任意

Options: 選択肢

Size

sm

通常よりも小さなサイズです。限られたスペースにボタンを配置する場合かつアクションの重要性が低い場合に使用します。

SmサイズのButton。

md (default)

ボタンのデフォルトのサイズです。ノーマルが最も使用されるサイズです。他のサイズのボタンはノーマルを基準に重要度に応じて使用します。

mdサイズのButton。

lg

大きなボタンはアクションの重要性を高めるため、使用は極力控えてください。

lgサイズのButton。

Variant

Solid

背景色が付与されているスタイルです。全てのスタイルの中で最も目立つように設計されています。

画面内で最も重要なアクションに使用します。そのため、Solidスタイルのボタンは同一のビュー内でThemeごとに1回までの使用を推奨します。

SolidスタイルのButton。Primary(主要アクション用の青い背景)、Neutral(中立的なグレーの背景)、Danger(破壊的アクション用の赤い背景)の3つのテーマによる背景色が付与されたボタンです。

Outline

枠線が付与されているスタイルのボタンです。中程度の強調度を持ち、主に副次的なアクションに使用します。

OutlineスタイルのButton。Primary(主要アクション用の青い枠線)、Neutral(中立的なグレーの枠線)、Danger(破壊的アクション用の赤い枠線)の3つのテーマによる枠線が付与されたボタンです。

Ghost

背景、枠線がなく、テキストのみの最も控えめなボタンです。主に補助的で軽微なアクションや、コンポーネントの中で使用する場合に適しています。

GhostスタイルのButton。Primary(主要アクション用の青いテキスト)、Neutral(中立的なグレーのテキスト)、Danger(破壊的アクション用の赤いテキスト)の3つのテーマによるテキストのみの最も控えめなボタンです。

Theme

Primary

体験における必要不可欠なタスクを実行するためのボタンのカラースタイルです。重要なアクションを目立たせる役割があります。

PrimaryテーマのButton。青色を基調としたSolid、Outline、Ghostの各バリエーションです。

Neutral

デフォルトのカラースタイルです。
視覚的・意味的に中立なアクションを担います。

NeutralテーマのButton。グレー色を基調としたSolid、Outline、Ghostの各バリエーションです。

Negative

破壊的なアクションや、ネガティブな結果をもたらす可能性があるアクションを強調するためのスタイルです。

実行することでユーザーのデータが失われる場合などに使用します。

Variantはユーザーへの破壊的影響の大きさに応じて選択してください。

NegativeテーマのButton。赤色を基調としたSolid、Outline、Ghost の各バリエーションです

Icon

Prefix Icon

ボタンのアクション(機能)を修飾するためのアイコンエリアです。ラベルだけでアクションの内容を伝えることができない場合に使用します。

テキストラベルのみでアクションを伝えることができる場合はアイコンは使用しません。

Prefix Iconを持つButton。「編集」というラベルの前に編集アイコンが配置されます。

Suffix Icon

ドロップダウン形式のメニューのように、ボタンを押下した後に発生するインタラクションを伝えるためのアイコンエリアです。

Suffix Iconを持つButton。「設定」というラベルの後に下向き矢印アイコンが配置されます。

States: 状態

Enable状態のButton。青色を基調としたSolidのボタンです。

Enable

ユーザーがボタンを操作する前のデフォルトの状態。

Hover状態のButton。Enable状態よりも濃い青色を基調としたSolidのボタンです。

Hover

ユーザーがボタンにマウスオーバーしている状態。

Active状態のButton。Hover状態よりも濃い青色を基調としたSolidのボタンです。

Active

ユーザーがボタンを操作している状態。

Focus状態のButton。Containerの外側に青い枠線が表示されています。

Focus

ユーザーがタッチ操作や、キーボードや音声による操作を用いてボタンに注視している状態。

Disabled状態のButton。Enable状態よりも薄い青色を基調としたSolidのボタンです。

Disabled

システムによってボタンが非活性化されている状態。ユーザーによる操作は不能です。

Loading状態のButton。Enable状態と同じ青色を基調とした、Loadingアイコンを示しているSolidのボタンです。

Loading

ボタンの押下によって実行されたアクションが進行中であることをユーザーに提示している状態。

Behaviors: 振る舞い

固定幅と全幅

ボタンの幅は初期状態ではテキスト量に合わせて自動的に可変します。

オプションとして、固定幅と全幅のいずれかにすることができます。全幅はコンテナサイズに合わせてボタンのサイズが可変します。

Note
小さい画面サイズやコンテナサイズの中では全幅のボタンを使用してください。
Buttonの幅オプションを示す図。「保存」はテキスト量に応じて幅が可変するボタン、「新規作成」は固定幅のボタン、「メールを送信」はコンテナサイズに合わせて全幅となる3つのボタンを示しています。

最小幅

ボタンの最小幅はボタンの高さの2倍の値です。最小幅が存在することで、小さなボタンや文字量が少ないボタンでもユーザーが適切に視認することをサポートします。

Buttonの最小幅を示す図。「送信」というラベルが配置されます。

遅延処理

ボタンのサブミット後はステートをローディング状態に変更します。

一方でサブミット処理が早急に完了する場合も多くあります。その場合はボタンはわずかな時間だけローディング状態となるため、結果としてボタンがチラついて表示されます。この現象 (フリッキング) はユーザーに強い不快感を与えてしまいます。

このフリッキングを回避するため、サブミットしてからローディング状態へ移行するまでに1秒間の遅延を発生させます。この遅延している間、ボタンはインタラクティブイベントには視覚的に反応しますが、追加のクリックイベントは発生しません。

また、この処理によって複数回の送信が行われることも回避します。

Buttonの遅延処理を示す図。左側に「送信」Solidボタンとその下に「0 Sec.」を表示、右側にLoading状態のSolidボタンとその下に「1 Sec.」の表示がされます。

Metrics: 寸法

sm

  • Vertical Resizing: Hug
  • Horizontal Resizing: Hug
  • Container Height: 32px
  • Item Spacing: 8px
  • Padding Vertical: 4px
  • Padding Horizontal: 10px
smサイズの寸法仕様を示す図。

md

  • Vertical Resizing: Hug
  • Horizontal Resizing: Hug
  • Container Height: 40px
  • Item Spacing: 8px
  • Padding Vertical: 4px
  • Padding Horizontal: 10px
mdサイズの寸法仕様を示す図。

lg

  • Vertical Resizing: Hug
  • Horizontal Resizing: Hug
  • Container Height: 48px
  • Horizontal Gap: 8px
  • Horizontal Padding: 12px
  • Vertical Padding: 8px
lgサイズの寸法仕様を示す図。

Usage: 使い方

適切な使用例。「キャンセル」というOutlineボタンと「保存」というPrimary Solidボタンが横並びで配置されます。
Do

PrimaryのSolidボタンはビューの中で1回だけ使用します。

不適切な使用例。「キャンセル」と「保存」という2つのPrimary Solidボタンが横並びで配置されます。
Don’t

PrimaryのSolidボタンをビューの中で複数回使用しないでください。メインのトリガー以外はOutlineやGhostボタンを使用してください。

適切な配置例。「キャンセル」というOutlineボタンと「保存」というPrimary Solidボタンが横並びで配置されます。
Do

PrimaryのSolidボタンはボタングループの末尾に配置してください。末尾に配置することで、ユーザーは全てのトリガーを確認した上でメインのアクションを実行することができます。

不適切な配置例。「保存」というPrimary Solidボタンと「キャンセル」というOutlineボタンが横並びで配置されます。
Don’t

PrimaryのSolidボタンは、ボタングループの先頭や中間には配置しないでください。

不適切な使用例。「送信」というDisabledボタンが表示されます。
Don’t

サブミットを行うための条件が満たされていないことやエラーが発生していることをユーザーに明示する目的でボタンをDisabled状態にしないでください。常にボタンを押下できるようにし、不備やエラー発生している場合は該当箇所を直接明示します。

Contents: 内容

適切なラベルの例。「メールグループを作成」というラベルが表示されているボタンです。
Do

ボタンのラベルは改行せずに簡潔に記述してください。

不適切なラベルの例。「メールグループを作成」というラベルが2行に改行されて表示されているボタンです。
Don’t

ボタンのラベルは改行せずに記述してください。複数行になった場合はラベルを再検討してください。

適切なラベルの例。「送信」というラベルが表示されているボタンです。
Do

ボタンのラベルはテキストだけで表現します。句読点や余分な装飾は付けません。

不適切なラベルの例。「送信!サングラスをかけた笑顔の絵文字」というラベルが表示されているボタンです。
Don’t

ブランドのトーンやパーソナリティを参考に、簡潔なラベルを付けてください。絵文字や感嘆符はボタンの機能を伝えることに適していません。

適切なラベルの例。「開じる」というSolidボタン、「テンプレートを作成」というOutlineボタンと「承認」というOutlineボタンが縦並びで配置されます。
Do

ボタンのラベルにはユーザーが実行するアクション (動詞) を反映します。

不適切なラベルの例。「完了」というSolidボタン、「テンプレート」というOutlineボタンと「OK」というOutlineボタンが縦並びで配置されます。
Don’t

ボタンのラベルを名詞や形容詞のみで表さないでください。動詞がないラベルはアクションが不明確でユーザーの誤操作を招きます。

References: 参考文献

FittsFirst of all it is not Fitt’s Law. The name of the famous researcher is Paul Fitts, so one should be careful on spelling. Fittswww.interaction-design.org
OK-Cancel or Cancel-OK? The Trouble With ButtonsShould the OK button come before or after the Cancel button? Following platform conventions is more important than optimizing an individual dialog box.www.nngroup.com

Change log: 変更履歴

DateChanges
2025/4/18Figma・ドキュメントをアップデート
2023/12/21ドキュメントを公開
2023/10/14Figmaを公開
小さな気づきや違和感があればお気軽に教えてください。
フィードバック
Chat illustration