複数のトーストを並べて表示する方法
複数のトーストを並べて表示する方法を紹介します。本記事では、HTML・CSS・JavaScriptを使用して、ボタンをクリックするたびに新しいトーストを画面右下へ追加し、複数のメッセージを縦方向に並べて表示するUIを作成します。保存やコピー、送信など複数の操作結果が続けて発生した場合でも、それぞれを個別のトーストとして表示できます。
このサンプルでは、「保存」「コピー」「送信」の3つのボタンを用意し、クリックしたボタンに対応するメッセージをトーストとして追加します。すでにトーストが表示されている状態で別のボタンをクリックすると、新しいトーストが追加されて縦に並びます。それぞれのトーストは表示されてから3秒後に自動で閉じるため、操作を続けても通知が画面上へ残り続けない構成です。
複数のトーストを並べる表示は、管理画面で連続して操作した結果を知らせる場合や、保存・コピー・送信など異なる処理の結果を一時的に表示したい場合に活用できます。HTMLではボタンの文字やトーストへ表示するメッセージを変更でき、CSSではトーストの横幅、表示位置、間隔、背景色、文字色、余白、角丸、影などを調整できます。JavaScriptではトーストが自動で閉じるまでの時間を変更できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
ボタンをクリックすると、それぞれのトーストが順番に追加され、3秒後に自動で閉じます。
「保存」「コピー」「送信」のボタンをクリックすると、画面右下へ対応するトーストが追加されます。複数表示された場合は縦に並び、それぞれ表示されてから3秒後に自動で閉じます。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマートフォン対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>複数のトーストを並べて表示する方法</title>
<!-- CSSファイル -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- サンプル全体 -->
<div class="stacked-toasts_wrap">
<!-- タイトル -->
<div class="stacked-toasts_title">
複数のトーストを縦に表示
</div>
<!-- 説明文 -->
<p class="stacked-toasts_text">
ボタンをクリックすると、それぞれのトーストが順番に追加され、3秒後に自動で閉じます。
</p>
<!-- 操作ボタン -->
<div class="stacked-toasts_buttons">
<button
type="button"
class="stacked-toasts_button"
data-toast-text="保存しました">
保存
</button>
<button
type="button"
class="stacked-toasts_button"
data-toast-text="コピーしました">
コピー
</button>
<button
type="button"
class="stacked-toasts_button"
data-toast-text="送信しました">
送信
</button>
</div>
</div>
<!-- トースト表示エリア -->
<div
class="stacked-toasts_area"
data-toast-area="">
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでは「保存」「コピー」「送信」の操作ボタンとトーストの表示エリアを配置し、CSSでは複数のトーストを画面右下へ縦に並べるレイアウトとデザインを設定します。JavaScriptではクリックしたボタンに対応するトーストを作成して表示エリアへ追加し、それぞれ表示されてから3秒後に削除します。外部サービスや外部データは使用しません。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはサンプル全体を構成するファイルです。「保存」「コピー」「送信」の3つのボタンと、複数のトーストを追加する表示エリアを配置しています。各ボタンのdata-toast-textに設定した「保存しました」「コピーしました」「送信しました」が、クリックしたときにトーストへ表示されます。
style.cssはサンプル全体とトーストのデザインを設定するファイルです。トースト表示エリアを画面右下へ固定し、display:flex;とflex-direction:column;によって複数のトーストを縦方向へ並べます。トーストの横幅、間隔、背景色、文字色、余白、角丸、影なども設定しています。
script.jsはトーストを追加・削除する処理を記述するファイルです。ボタンがクリックされるたびに新しいトーストを作成し、data-toast-textから取得したメッセージを表示します。作成したトーストは表示エリアの最後へ追加され、それぞれ追加されてから3秒後に削除されます。
設置方法・使い方
sampleフォルダ内へindex.html、style.css、script.jsの3ファイルを配置してください。index.htmlから同じ階層にあるstyle.cssとscript.jsを読み込む構成になっているため、3ファイルは同じフォルダへ保存します。配置後にsample/index.htmlをブラウザで開くとサンプルを実行できます。
「保存」「コピー」「送信」のいずれかのボタンをクリックすると、対応するメッセージを持つトーストが画面右下へ表示されます。最初のトーストが表示されている間に別のボタンをクリックすると新しいトーストが追加され、複数のトーストが縦に並びます。それぞれのトーストは追加されてから3秒後に自動で削除されます。
カスタマイズできる内容
index.htmlでは、サンプルのタイトルや説明文、各ボタンに表示する文字を変更できます。各ボタンのdata-toast-textを書き換えることで、クリックしたときに表示されるトーストのメッセージも変更できます。
style.cssでは、サンプル全体の横幅や余白、ボタンの背景色、文字色、角丸、トースト表示エリアの位置と横幅、トースト同士の間隔を変更できます。トースト本体の背景色、文字色、余白、角丸、影も用途に合わせて調整できます。script.jsでは、トーストを削除するまでの表示時間を変更できます。
数値調整
style.css
max-width:700px;
サンプル全体の最大横幅です。値を大きくすると横に広がり、小さくすると狭くなります。
padding:32px;
サンプル全体の内側余白です。値を大きくすると内容と枠線の間隔が広がります。
gap:10px;
操作ボタン同士の間隔と、トースト同士の間隔に使用しています。それぞれのgapを変更することで個別に間隔を調整できます。
right:24px; / bottom:24px;
トースト表示エリアを画面右端・下端から24px離して配置します。値を大きくすると画面端から離れ、小さくすると近づきます。
width:280px;
トースト表示エリアの横幅です。値を大きくするとトーストが横に広くなり、小さくすると狭くなります。
padding:14px 18px;
トーストの内側余白です。14pxが上下、18pxが左右の余白を表します。
border-radius:10px;
トーストの角丸です。値を大きくすると丸みが強くなります。
box-shadow:0 12px 30px rgba(0,0,0,.18);
トーストの影を設定しています。12pxは縦方向の位置、30pxはぼかしの大きさ、0.18は影の透明度です。
script.js
3000
各トーストを表示しておく時間です。3000は3秒を表します。値を大きくすると表示時間が長くなり、小さくすると短くなります。
レスポンシブ対応
このサンプルはstyle.cssでレスポンシブ対応しています。サンプル全体にはwidth:100%;とmax-width:700px;を指定し、画面幅が狭くなると利用できる横幅に合わせて縮小します。操作ボタンにはflex-wrap:wrap;を指定しているため、横方向へ収まらない場合は次の行へ折り返します。
画面幅640px以下では、サンプル全体の内側余白を24px 18pxへ変更します。トースト表示エリアは画面右端と下端から16pxの位置へ変更し、width:calc(100% - 32px);によって画面幅に合わせて横幅を調整します。スマートフォン・タブレット・PCで利用できる構成です。
コメント