Toast

操作の結果を、閉じるまで読める通知として表示します。

続けて開くと右下に重なります。重なりを押すと広がり、外側を押すかEscで畳みます。

下の中央・左下に置く
右から左に読む場合

使いどころ

  • 保存・送信・コピーなど、今した操作の結果を、作業を止めずに短く知らせる時に使います。
  • 読み続けてほしい事実や注意は、本文のそばに置く Notice を使います。
  • 送信で直すところがある時は、入力の近くのエラーと ErrorSummary で示します。Toastだけに残しません。
  • 確認や判断を求める時は Dialog を使います。

使い方

Toastはページに置いておき、閉じた状態(popover="manual")で描きます。開くのは、popovertarget にToastの id を指したボタンか、スクリプトからの showPopover() です。開いてもフォーカスは移しません。閉じるボタンも、Toastを指した popovertarget のボタンです。ToastController を toast として登録すると、duration と開閉のイベントが働きます。

ToastはBasecamp 2の黄色の案内と同じく、黄色(--rx-mark)の平らな面に1pxの濃い黄色(#eac73b)の枠を付け、下の枠だけを3pxにし、角丸4pxで、影は付けません。文は黒で、一行目を太字にします。tone で通知の種類を選びます。info(既定)と success は黄色の面のままで、success はアイコンを緑にします。warning と danger は面をそれぞれの役割の淡い色にし、枠とアイコンを琥珀色・赤にします。アイコンは success でチェック、danger で丸の中のバツ、他はiです。文と操作は一行に並べ、入らなければ文を先に折り返します。actions を渡すと、通知の文の後に操作を置きます。

既定では閉じるボタンを押すまで残します。duration にミリ秒を渡すと、開いてからその時間で閉じます。フォーカスがToastの中にある間は数えず、外へ出てから数え直します。失敗の通知は live="assertive" にして自動で閉じず、重要なエラーは入力の近くや ErrorSummary にも残します。

単独のToastは、画面下部の末尾側(左から右に読む画面では右下)に浮かべます。開閉はその場で切り替え、動きは付けません。

複数のToastは ToastStack で囲み、ToastStackController を toast-stack として登録します。開いた順に、新しいものを手前にして重ねます。奥のToastは上へ少しずつずらして小さくし、上端へ向かって薄れる縁だけを見せます。二つ以上の時、スタックを押すと上へ広がり、外を押すかEscapeで畳みます。キーボードでフォーカスがスタックの中へ入った時も広がります。Toastの中のボタンやリンクを押しても、スタックは開閉しません。placement で置き場所を選びます。

Toastを指した popovertarget のボタン(閉じるボタンを含む)を押して開閉した時は、Dialog と同じく、取り消せる toast:beforeshow・toast:beforehide と、toast:show・toast:hide を発火します。スクリプトからの showPopover()・hidePopover() と duration で開閉した時は発火しません。開き方に関わらず開閉を受け取る時は、標準の toggle を使います。

JavaScriptが無い時も、popovertarget のボタンと閉じるボタンでToastを開閉できます。duration、開閉のイベント、重ねる動きは働きません。

キーボード

Toastのキーボード操作
キー動作
TabToastStack の中へフォーカスが入ると、スタックを広げます。
Escape広げた ToastStack を畳みます。Toastそのものは閉じません。

アクセシビリティ

  • live に合わせて、polite は role="status"、assertive は role="alert" と aria-live を付けます。
  • 開いてもフォーカスを移さないので、作業を続けたまま読み上げで結果を伝えます。
  • 閉じるボタンは closeLabel を読み上げ名にします。
  • 操作を持つToastに duration を付ける時は、読んで操作するまでに閉じない長さにします。フォーカスが中にある間は閉じません。
  • 通知の色は見分けの補助です。成功か失敗かは文言で伝えます。

イベント

Toastが発火するイベント
イベント内容
toast:beforeshow取り消せます。popovertarget のボタンで開く前に発火し、preventDefault() で開きません。detail は { reason } で、reason は pointer か keyboard です。
toast:showpopovertarget のボタンで開いた後に発火します。detail は toast:beforeshow と同じです。
toast:beforehide取り消せます。閉じるボタンか popovertarget のボタンで閉じる前に発火し、preventDefault() で閉じません。detail は toast:beforeshow と同じです。
toast:hide閉じるボタンか popovertarget のボタンで閉じた後に発火します。detail は toast:beforeshow と同じです。

API

Toast

通知の可視性・消去時間・ライブ領域はToastControllerが管理する。閉じるボタンは標準のpopovertargetで閉じるので、JavaScriptが無い時も働く。

Toastのprops
名前型既定値説明
id必須stringpopoverのid。開く操作のpopovertargetや、showPopover()で開く時に指す。画面の中で一意にする。
actionsChild通知の文の後に置く操作(「記事を確認する」「もう一度保存する」など)。
closeLabelstring"閉じる"閉じるボタンの読み上げ名。
durationnumber0開いてから自動で閉じるまでのミリ秒。0は閉じるボタンを押すまで残す。フォーカスが中にある間は数えず、外へ出てから数え直す。ToastControllerが要る。
live"polite" | "assertive""polite"読み上げの緊急度。politeはrole="status"、assertiveはrole="alert"にする。失敗の通知はassertiveにする。
toneExclude<Tone, "neutral">"info"通知の種類。infoとsuccessは黄色の面のままで、successはアイコンを緑にする。warningとdangerは面と枠をその役割の色にする。
childrenChild通知の文。アイコンの隣に表示します。

登録するcontroller:toast(ToastController)

読み込むCSS:layers.css、reset.css、tokens.css、base.css、layout.css、components/button.css、components/overlay.css、components/icon.css、components/toast.css

Tone

値:"neutral" | "info" | "success" | "warning" | "danger"

ToastStack

開いているToastを、新しいものを手前にして重ねる。押すと広げ、外を押すかEscで畳む。重ね方と広げ方はToastStackControllerが扱う。childrenにはToastだけを置く。

ToastStackのprops
名前型既定値説明
placement"start" | "center" | "end""end"スタックを置く場所。既定は末尾側の下(左から右に読む画面では右下)。
childrenChild重ねる Toast。Toastだけを置きます。

ほかに、<div>へ標準のHTML属性を渡せます。

登録するcontroller:toast-stack(ToastStackController)

読み込むCSS:layers.css、reset.css、tokens.css、base.css、layout.css、components/toast-stack.css

コード

HTML
Hono JSX