本文へスキップ
  1. Web BENTO JS
  2. カテゴリ一覧
  3. トースト通知
05 / TOAST 12 パーツ

JSトースト通知実装 12選

コピペで動くトースト通知(自動で消えるお知らせ)のサンプル集です。プレビューは「表示する」ボタンで実際に動作します。HTML / CSS / JS タブでコードを確認し、全部コピーを押せば1回の貼り付けで完成します。すべて依存ライブラリなしのバニラJSで、data-bnto-* 属性による自動初期化式です。デモはカード内に表示していますが、CSSを1行変えるだけで画面の隅に固定表示できます。

該当するパーツが見つかりませんでした。

ベーシック

<!-- data-duration=表示時間(ミリ秒) -->
<div class="bnto-toast" data-bnto-toast data-duration="3000">
  <button type="button" class="tg">表示する</button>
  <div class="box" aria-live="polite"></div>
</div>
使い方のコツ

表示時間は data-duration(ミリ秒)で変更できます。画面右下に出したいときは .boxposition:fixed; right:16px; bottom:16px; left:auto; に変えるだけです。メッセージ文はJSの innerHTML の部分を書き換えてください。

4色出し分け(状態別)

<div class="bnto-toast2" data-bnto-toast-type data-duration="3000">
  <div class="btns">
    <button type="button" class="tg" data-type="success">成功</button>
    <button type="button" class="tg" data-type="error">エラー</button>
    <button type="button" class="tg" data-type="warn">警告</button>
    <button type="button" class="tg" data-type="info">情報</button>
  </div>
  <div class="box" aria-live="polite"></div>
</div>
使い方のコツ

成功=緑、エラー=赤のような状態色は意味が固定なので、サイトのテーマ色に合わせて無理に変えないのがおすすめです。メッセージ文はJSの MSG オブジェクトを書き換えるだけで変更できます。エラーには role="alert" が自動で付きます。

プログレスバー付き

<!-- data-duration=バーが尽きるまでの時間(ミリ秒) -->
<div class="bnto-toast3" data-bnto-toast-bar data-duration="4500">
  <button type="button" class="tg">表示する</button>
  <div class="box" aria-live="polite"></div>
</div>
使い方のコツ

「あと何秒で消えるか」が見えるので安心感があります。一時停止はJSのタイマー管理ではなく animation-play-state: pausedanimationend の組み合わせだけで実現しているのがポイントです。文章が長めの通知に向いています。

スタック式(連打OK)

<div class="bnto-toast4" data-bnto-toast-stack data-duration="3000">
  <button type="button" class="tg">表示する(連打OK)</button>
  <div class="box" aria-live="polite"></div>
</div>
使い方のコツ

イベントが連続して起きるアプリ的なUIに向いています。各トーストが自分のタイマーを持つので、発生した順に自然に消えていきます。同時表示の上限はJSの > 4 の数字を変えるだけです。積む方向を逆にしたいときは .boxflex-direction: column-reverse を指定してください。

閉じるボタン付き

<!-- 自動では消えず、×ボタンで閉じる -->
<div class="bnto-toast5" data-bnto-toast-close>
  <button type="button" class="tg">表示する</button>
  <div class="box" aria-live="polite"></div>
</div>
使い方のコツ

メンテナンス告知や重要なお願いなど、読み逃されると困る通知は自動で消さないのが親切です。閉じるボタンには必ず aria-label="閉じる" を(「×」だけでは読み上げで意味が伝わりません)。自動消滅も併用したい場合はベーシック版の setTimeout を足してください。

アンドゥ付き(元に戻す)

<!-- data-duration=取り消せる猶予時間(ミリ秒) -->
<div class="bnto-toast6" data-bnto-toast-undo data-duration="4000">
  <button type="button" class="tg">削除する</button>
  <div class="box" aria-live="polite"></div>
</div>
使い方のコツ

削除の確認ダイアログを出す代わりに「先に消して、少しの間だけ戻せるようにする」Gmail方式です。操作を止めないので体験が軽くなります。本当の削除はトーストが消えたタイミングで確定させるのが安全です(猶予は data-duration で調整)。

上部バー通知

<!-- 枠(点線)はデモ用の擬似画面。実ページでは外してOK -->
<div class="bnto-toast7" data-bnto-toast-top data-duration="3000">
  <button type="button" class="tg">表示する</button>
  <div class="box" aria-live="polite"></div>
</div>
使い方のコツ

フォーム送信後の完了メッセージなど、ページ全体に関わる結果を伝えるのに向いた形です。実ページではCSSコメントの通り .boxposition:fixed; top:0; にして、固定ヘッダーがある場合は z-index をヘッダーより大きくしてください。

アクション付き(2ボタン)

<!-- 自動では消えず、ボタン操作で閉じる -->
<div class="bnto-toast8" data-bnto-toast-act>
  <button type="button" class="tg">表示する</button>
  <div class="box" aria-live="polite"></div>
</div>
使い方のコツ

新着通知や「下書きを復元しますか?」など、次の行動を促したい場面に向いています。ボタンは主・副の2つまでにすると迷わせません。操作を伴う通知なので自動では消さず、放置対策が必要なら長め(8秒〜)の setTimeout を足してください。

Cookie同意バナー

<!-- 枠(点線)と「リセット」はデモ用。実ページでは .bn の部分だけでOK -->
<div class="bnto-toast9" data-bnto-toast-consent>
  <button type="button" class="rs">リセット</button>
  <div class="bn" role="region" aria-label="クッキーの利用について" hidden>
    <p class="tx">当サイトでは体験向上のためクッキーを使用します。<a href="#" class="lk">詳細を見る</a></p>
    <button type="button" class="ok">同意する</button>
  </div>
</div>
<!-- 「詳細を見る」の href はプライバシーポリシーページに変更してください -->
使い方のコツ

同意の記憶は localStorage のキー bnto-cookie-ok に保存します(キー名は自由に変更OK)。実ページではCSSコメントの通り .bnposition:fixed; bottom:0; にし、「詳細を見る」のリンク先をプライバシーポリシーに差し替えてください。GDPRなどカテゴリ別の同意管理が法的に必要なサイトでは、専用の同意管理ツール(CMP)の利用をご検討ください。

オンライン/オフライン検知

<!-- ボタンはデモ用。実ページでは window の online/offline を自動検知するのでボタンは不要 -->
<div class="bnto-toast10" data-bnto-nettoast data-duration="3000">
  <div class="btns">
    <button type="button" class="tg off" data-net="offline">オフラインをシミュレート</button>
    <button type="button" class="tg on" data-net="online">オンラインをシミュレート</button>
  </div>
  <div class="box" aria-live="polite"></div>
</div>
使い方のコツ

実際の通信状態は windowonline / offline イベントで自動検知しているので、ページに置くだけでボタン操作なしに動きます(ステージ内の2つのボタンは動作確認用のシミュレートです)。フォーム送信中にオフラインへ切り替わった場合の案内など、通信を伴う操作の前後に組み合わせると親切です。

リッチ通知風

<!-- data-duration=表示時間(ミリ秒) -->
<div class="bnto-toast11" data-bnto-richtoast data-duration="3500">
  <button type="button" class="tg">表示する</button>
  <div class="box" aria-live="polite"></div>
</div>
使い方のコツ

OSの通知センターのような見た目にすることで、メッセージ受信やコメント通知など「誰から・何が届いたか」を一目で伝えられます。アイコンはJSの ICON 変数を差し替えれば別の絵柄にできます。タイトルと本文は1行ずつに収まる長さを目安にしてください。

実績解除トースト

<!-- data-duration=表示時間(ミリ秒) -->
<div class="bnto-toast12" data-bnto-achievetoast data-duration="4000">
  <button type="button" class="tg">表示する</button>
  <div class="box" aria-live="polite"></div>
</div>
使い方のコツ

初回投稿やバッジ獲得など、ユーザーを祝福したい場面に使うとゲーミフィケーションの効果が高まります。紙吹雪の数はJSの for ループの回数(既定10個)で調整でき、増やしすぎると賑やかになりすぎるので10〜16個程度がおすすめです。動きを抑えたい環境では自動的に紙吹雪なしで表示されます。

JSトースト通知実装の基礎知識

トースト通知は、保存・送信・削除などの操作結果を画面の隅に一時的に表示するフィードバックUIの定番です。「押したのに何も起きない…?」という不安をなくすだけで、フォームやボタン操作の体感は大きく変わります。パンが焼き上がって飛び出す様子(toast)が名前の由来で、作業を邪魔せず、少しすると自動で消えるのが最大の特徴です。このページのサンプルはすべて依存ライブラリなしのバニラJavaScriptで、トーストのDOMはJSが生成・削除するのでHTML側の準備は最小限です。

使い方は、HTML / CSS / JSの3タブをそれぞれ貼り付けるか、「全部コピー」ボタンでひとまとめになったコードを1回貼り付けるだけです。初期化は data-bnto-* 属性の自動検出式なので、同じページに何個置いても、うっかりコードを2回貼っても壊れません。デモはカード内に表示していますが、CSSの .boxposition:fixed に変えるだけで画面全体の隅に固定表示できます。

自動で消える時間の目安は3〜5秒

短すぎると読み終わる前に消え、長すぎると邪魔になります。「保存しました」程度なら3秒前後、文章を読ませるなら5秒程度が目安です(サンプルは data-duration 属性のミリ秒で調整できます)。読む時間に個人差が出る長めの通知には、残り時間が見えるプログレスバー付きや、ホバーで一時停止する仕組みが有効です。エラーや重要なお知らせのように読み逃されると困るものは、自動で消さず閉じるボタン付きを選びましょう。

aria-liveでスクリーンリーダーにも伝える

トーストは視覚的な演出なので、そのままではスクリーンリーダーの利用者に伝わりません。サンプルでは表示先の要素に aria-live="polite" を指定し、追加されたメッセージが自動で読み上げられるようにしています。ポイントは、aria-live領域(.box)をあらかじめHTMLに置いておくことです。エラーのような緊急性の高い通知には role="alert"(= assertive)を付けて即時に伝えます。「元に戻す」「閉じる」などの操作は必ず button 要素で実装してください。

カード内デモからページ全体への切り替え

このページのデモは、コードの動きが見やすいようカード内(position:relativeの箱の中)にトーストを出しています。実際のサイトで画面の隅に出すには、CSSコメントの通り .boxposition:fixed; right:16px; bottom:16px;(上部バーなら top:0; left:0; right:0;)に変えるだけです。固定ヘッダーやモーダルと重なる場合は z-index を十分大きく取り、スマホでは左右に 16px 程度の余白を残すと窮屈になりません。

「全部コピー」と「分けて貼る」の使い分け

「全部コピー」を使うと、HTML・CSS・JavaScriptがひとつの自己完結ブロックとしてコピーされるので、1回の貼り付けだけですぐ動きを確認できます。動作のお試しや、1ページ完結のLPに組み込むときはこの方法が手軽です。

一方、本番サイトへ本格的に組み込む場合は、CSSはスタイルシート(.cssファイル)へ、JavaScriptは</body>直前や共通の.jsファイルへ、HTMLは使いたい場所へと分けて貼るのが一般的です。スタイルとスクリプトを1か所に集約できるため、複数ページ・複数パーツで使い回すときの管理がしやすく、ブラウザのキャッシュも効きやすくなります。なお、同じパーツをページ内で何度も使う場合でも、CSSとJSを貼るのは1回だけで大丈夫です(初期化スクリプトが該当要素すべてに自動で効きます)。

よくある質問

コピーしたトースト通知はそのまま動きますか?
はい。「全部コピー」を押すとHTML・CSS・JSがひとつの自己完結ブロックになってコピーされ、ページに貼り付けるだけで動きます。デモはカード内に表示していますが、画面の隅に出したい場合はCSSの .boxposition:fixed に変えるだけです。
トーストの表示時間はどのくらいが適切ですか?
目安は3〜5秒です。短い確認メッセージなら3秒前後、文章を読ませたい場合は5秒程度にし、data-duration 属性(ミリ秒)で変更できます。じっくり読ませたい内容にはプログレスバー付きや閉じるボタン付きが向いています。
同じページに複数設置しても大丈夫ですか?
大丈夫です。初期化スクリプトは data 属性で対象を自動検出し、初期化済みの要素はスキップするため、複数設置してもコードを2回貼っても壊れません。
アクセシビリティには対応していますか?
トーストの表示先に aria-live="polite" を指定しているので、追加されたメッセージがスクリーンリーダーに読み上げられます。エラー通知には role="alert" を付けて即時に伝え、閉じる・元に戻すなどの操作は button 要素で実装しています。
このページのパーツはAIコーディングツールでも使えますか?
はい。Claude CodeやCursorのようにWebページを読めるAIには、このページのURLとパーツ名(例:「4色出し分け(状態別)」)を伝えるだけで実装を指示できます。AIがWebを読めない場合は、「全部コピー」で取得した自己完結ブロックをチャットに貼り付けて調整を頼むのが確実です。改変後のコードは、公開前に動作確認することをおすすめします。

関連カテゴリ

トースト通知と組み合わせて使いやすいパーツはこちらです。