このページの中身

ボタンとリンク

ボタンは動かす、リンクは移す。この1本の線を守るだけで、キーボードも読み上げも検索も、あとから付いてきます。

ボタンの3段階の階層、リンクとの使い分け、押せる範囲の確保を示した図
図を大きく見る
図の中身を文字で読む
  • 1画面に primary は1つ
  • 申し込む 資料を見る あとで決める 2つ目の primary を置いた時点で
  • 階層は消える。同格に並べたいなら
  • primary 推奨する操作 secondary 代替 tertiary 補助 どちらも secondary にする。
  • ボタンかリンクか
  • 同じページで動作を実行する 別の場所へ移動する
  • 送信・削除・開閉・保存 新しいタブで開ける・URLをコピーできる・履歴に残る
  • <button> <a href>
  • 押せる範囲は見た目より広く取る ✕ 20px ○ 44px(見た目のアイコンは小さくてよい)
  • WCAG 2.2 の最小は 24×24。実務では 44px 前後を目安にする。

ひと目で#

ボタン
同じページで動作を実行する(<button>)
リンク
別の場所へ移動する(<a href>)。URL を持つので、新しいタブで開け、コピーできる
ボタン階層
primary / secondary / tertiary。1画面に primary は1つ
CTA
行動を促す役割の名前。部品の名前ではない
アイコンボタン
文字を持たないボタン。アクセシブルネームが必須
ターゲットサイズ
押せる範囲。WCAG 2.2 で最小 24×24、実務では 44px 前後

使い分け#

こうしたい使うもの
別のページへ移動させるリンク(<a href>)
送信、削除、開閉、保存ボタン(<button>)
いちばん勧めたい操作primary。1つだけ。.button--primary
代わりの操作secondary。枠で示す。.button--secondary
取り消し、戻るtertiary。面も枠も持たない .button--ghost
元に戻せない操作danger。強さの段とは別の軸
ツールバーで場所がないアイコンボタンに、アクセシブルネーム

間違えやすいところ#

divにクリックを付けた場合とbutton要素を使った場合で、キーボード操作・読み上げ・フォーム送信のどれが働くかを比べた図
図を大きく見る
図の中身を文字で読む
  • ✕ <div> にクリックを付ける ○ <button> を使う
  • 送信する 送信する
  • 見た目は同じ。押せば動く。 見た目は同じ。中身が違う。
  • ✕ Tab で止まらない ○ Tab で止まる
  • ✕ Enter と Space で押せない ○ Enter と Space で押せる
  • ✕ 読み上げは「ボタン」と読まない ○ 「ボタン」と読み上げる
  • ✕ フォームを送信しない ○ type="submit" で送信する
  • 足りない分を JS と ARIA で書き足すことになる。 書くのは見た目の CSS だけで足りる。

直す例#

架空の案件を1つ例にとります。どこを見て、何をどう直すかを書きます。

例として、整体院の予約サイトを直しています。確認画面に「予約を確定する」「内容を修正する」「料金の詳細を見る」が並び、3つとも同じ塗りのボタンです。押すまで、どれが送信でどれが移動か分かりません。実際に「料金の詳細を見る」を押した人が、入力が消えると思って予約を中断していました。

まず役割で要素を分けます。確定は送信なので <button>、料金の詳細は別ページなので <a href> です。次に強さを1段ずつずらします。確定だけを塗りの primary にし、修正は枠線の secondary、料金の詳細は下線のリンクに落とします。どれを押すべきかは、文言より先に形の差が答えます。

予約フォームの5つの表示。塗りの primary、枠線の secondary、色を落とした disabled、スピナー付きの loading、下線のリンク
図を大きく見る

処理中は文言を「送信しています」に差し替えてスピナーを添え、二重送信を防ぎます。無効化は最後の手段です。押せる状態のまま受け付けて、理由を返すほうが行き詰まりません。

確認する#

使えるパターン#

この話が要る場面#

このページが答えになる、現場の困り事です。困り事の側から探すと、同じ場所に着きます。

ボタンとリンクのどちらを使うか迷う

画面が移動するならリンク、その場で何かが起きるならボタン。見た目ではなく動作で決める。

このコードで動いている見本です

ボタンの種類をいくつ用意するか

主・副・控えめの3種で足りる。1画面に主ボタンは1つ。

このコードで動いている見本です

押せる大きさをいくつにするか

44×44を目安にする。WCAG 2.2 の下限は24×24。見た目が小さくても当たり判定を広げれば足りる。

このコードで動いている見本です

この場面のほかの困り事と、そのまま貼れる部品は部品を選ぶにまとめてある。逆引きには全188件。

状態を試す#

この値は作業台で決められます。和文の予約ページに載せて、幅と明暗を替えて確かめてから CSS を持ち帰る: 影

primary / secondary / disabled / loading の4状態を切り替え、HTML と CSS を生成します。

この道具は JavaScript で動きます。

出典#

関連#

この資料は、Webサイトを作るときに引くためのものです。 何のために作ったか。作っているのは AK²Lab。