Toasts は、モバイルやデスクトップの OS で普及しているプッシュ通知を模倣して設計された軽量な通知です。
flexbox で作られているので、位置合わせや配置が簡単です。
Overview
Toasts は autohide: false
を指定しないと自動的に非表示になります。
Examples
Basic
Toasts の拡張性と予測可能性を高めるために、ヘッダと本文を推奨します。
Toasts のヘッダは display: flex
を使用しており、 margin と flexbox ユーティリティによりコンテンツを簡単に整列させることができます。
Toasts は必要なマークアップはほとんどありません。
最低限、“Toasts” コンテンツを含む要素を 1 つだけ必要とし、Dismiss ボタンを強く推奨します。
tip
以前は、toastを完全に隠すために、スクリプトが動的にhide
属性を追加していました(単にopacity:0
ではなく、display:none
で)。これはもう必要ありません。しかし、後方互換性のために、私たちのスクリプトは、次のメジャーバージョンまで、(実際には必要ないにもかかわらず)クラスをトグルし続けます。
<template>
<Toast show>
<ToastHeader>
<b-img
src="https://dummyimage.com/20x20/007aff/007aff"
rounded
margin="e-2"
alt="Card image cap"
/>
<strong class="me-auto">Bootstrap</strong>
<small>11 mins ago</small>
<CloseButton dismiss="toast" />
</ToastHeader>
<ToastBody>Hello, world! This is a toast message.</ToastBody>
</Toast>
</template>
Live example
下のボタンをクリックして、デフォルトで hide
属性で非表示になっているトースト(ユーティリティで右下隅に配置)を表示します。
<template>
<b-button
color="primary"
toggle="toast"
target="#liveToast"
>
Show live toast
</b-button>
<div
class="position-fixed bottom-0 end-0 p-3"
style="z-index: 11"
>
<Toast id="liveToast">
<ToastHeader>
<b-img
src="https://dummyimage.com/20x20/007aff/007aff"
rounded
margin="e-2"
alt="Card image cap"
/>
<strong class="me-auto">Bootstrap</strong>
<small>11 mins ago</small>
<CloseButton dismiss="toast" />
</ToastHeader>
<ToastBody>Hello, world! This is a toast message.</ToastBody>
</Toast>
</div>
</template>
Translucent
Toasts は半透明なので、上に表示されるものは何でも溶け込みます。
<template>
<Toast show>
<ToastHeader>
<b-img
src="https://dummyimage.com/20x20/007aff/007aff"
rounded
margin="e-2"
alt="Card image cap"
/>
<strong class="me-auto">Bootstrap</strong>
<small text-color="body-secondary">11 mins ago</small>
<CloseButton dismiss="toast" />
</ToastHeader>
<ToastBody>Hello, world! This is a toast message.</ToastBody>
</Toast>
</template>
Stacking
Toast が複数ある場合は、読みやすいように縦に重ねるのがデフォルトになっています。
<template>
<ToastContainer position="static">
<Toast show>
<ToastHeader>
<b-img
src="https://dummyimage.com/20x20/007aff/007aff"
rounded
margin="e-2"
alt="Card image cap"
/>
<strong class="me-auto">Bootstrap</strong>
<small text-color="body-secondary">just now</small>
<CloseButton dismiss="toast" />
</ToastHeader>
<ToastBody>See? Just like this.</ToastBody>
</Toast>
<Toast show>
<ToastHeader>
<b-img
src="https://dummyimage.com/20x20/007aff/007aff"
rounded
margin="e-2"
alt="Card image cap"
/>
<strong class="me-auto">Bootstrap</strong>
<small text-color="body-secondary">2 seconds ago</small>
<CloseButton dismiss="toast" />
</ToastHeader>
<ToastBody>Heads up, toasts will stack automatically</ToastBody>
</Toast>
</ToastContainer>
</template>
Custom content
サブコンポーネントを削除したり、utilities を使って調整したり、独自のマークアップを追加したりして、トーストをカスタマイズできます。
ここでは、デフォルトの ToastHeader
コンポーネントを削除し、Bootstrap Iconsからカスタムの非表示アイコンを追加し、 flexbox utilities
を使ってレイアウトを調整することで、よりシンプルなトーストを作成しています。
<template>
<Toast show>
<b-div flex>
<ToastBody>Hello, world! This is a toast message.</ToastBody>
<CloseButton
dismiss="toast"
margin="e-2 auto"
/>
</b-div>
</Toast>
</template>
また、toastsにコントロールやコンポーネントを追加することも可能です。
<template>
<Toast show>
<ToastBody>
Hello, world! This is a toast message.
<b-div
margin="t-2"
padding="t-2"
border="top"
>
<b-button
color="primary"
size="sm"
>
Take action
</b-button>
<b-button
color="secondary"
size="sm"
dismiss="toast"
>
Close
</b-button>
</b-div>
</ToastBody>
</Toast>
</template>
Color schemes
上記の例に基づいて、 color
と background
ユーティリティを使用して、さまざまなトーストのカラースキームを作成することができます。
ここでは、Toast
コンポーネントに .bg-primary と text-color="white"
属性を追加しています。
鮮明なエッジを出すために、border="0"
属性でデフォルトのボーダーを削除しています。
<template>
<Toast
show
text-color="white"
background-color="primary"
border="0"
>
<b-div flex>
<ToastBody>Hello, world! This is a toast message.</ToastBody>
<CloseButton
dismiss="toast"
margin="e-2 auto"
/>
</b-div>
</Toast>
</template>
Placement
必要に応じてカスタム CSS で配置します。右上は通知によく使用されます。
一度に 1 つの Toast しか表示しない場合は、配置スタイルを Toast
コンポーネントに配置してください。
<template>
<BForm>
<b-div margin="b-3">
<b-label for="selectToastPlacement">
Toast placement
</b-label>
<BFormSelect id="selectToastPlacement">
<option
value
selected
>
Select a position...
</option>
<option value="top-0 start-0">
Top left
</option>
<option value="top-0 start-50 translate-middle-x">
Top center
</option>
<option value="top-0 end-0">
Top right
</option>
<option value="top-50 start-0 translate-middle-y">
Middle left
</option>
<option value="top-50 start-50 translate-middle">
Middle center
</option>
<option value="top-50 end-0 translate-middle-y">
Middle right
</option>
<option value="bottom-0 start-0">
Bottom left
</option>
<option value="bottom-0 start-50 translate-middle-x">
Bottom center
</option>
<option value="bottom-0 end-0">
Bottom right
</option>
</BFormSelect>
</b-div>
</BForm>
<b-div
aria-live="polite"
aria-atomic="true"
background-color="body-secondary"
position="relative"
class="bd-example-toasts"
>
<ToastContainer padding="3">
<Toast show>
<ToastHeader>
<b-img
src="/img/logo/icon1.svg"
rounded="start"
margin="e-2"
width="20"
/>
<strong class="me-auto">Bootstrap</strong>
<small>11 mins ago</small>
</ToastHeader>
<ToastBody>Hello, world! This is a toast message.</ToastBody>
</Toast>
</ToastContainer>
</b-div>
</template>
多くの通知を生成するシステムでは、簡単にスタックできるようにラッピング要素を使用することを検討してください。
<template>
<b-div
aria-live="polite"
aria-atomic="true"
position="relative"
>
<ToastContainer
padding="3"
top="0"
end="0"
>
<Toast show>
<ToastHeader>
<b-img
src="/img/logo/icon1.svg"
rounded="start"
margin="e-2"
width="20"
/>
<strong class="me-auto">Bootstrap</strong>
<small text-corlor="body-secondary">just now</small>
</ToastHeader>
<ToastBody>See? Just like this.</ToastBody>
</Toast>
<Toast show>
<ToastHeader>
<b-img
src="/img/logo/icon1.svg"
rounded="start"
margin="e-2"
width="20"
/>
<strong class="me-auto">Bootstrap</strong>
<small text-corlor="body-secondary">2 seconds ago</small>
</ToastHeader>
<ToastBody>Heads up, toasts will stack automatically</ToastBody>
</Toast>
</ToastContainer>
</b-div>
</template>
flexbox ユーティリティを使って、Toast を水平方向や垂直方向に整列させることもできます。
<template>
<b-div
aria-live="polite"
aria-atomic="true"
flex
justify-content="center"
align-items="center"
relative-width="100"
>
<Toast show>
<ToastHeader>
<b-img
src="/img/logo/icon1.svg"
rounded="start"
margin="e-2"
width="20"
/>
<strong class="me-auto">Bootstrap</strong>
<small text-corlor="body-secondary">11 mins ago</small>
</ToastHeader>
<ToastBody>Hello, world! This is a toast message.</ToastBody>
</Toast>
</b-div>
</template>
<template>
<Toast
show
autohide="false"
>
<ToastHeader>
<b-img
src="/img/logo/icon1.svg"
rounded="start"
margin="e-2"
width="20"
/>
<strong class="me-auto">Bootstrap</strong>
<small text-corlor="body-secondary">11 mins ago</small>
<CloseButton dismiss="toast" />
</ToastHeader>
<ToastBody>Hello, world! This is a toast message.</ToastBody>
</Toast>
</template>
技術的には、Toast の中にフォーカスやアクションが可能なコントロール(追加のボタンやリンクなど)を追加することは可能ですが、自動非表示の Toast ではこれを避けるべきです。
Toast に長い delay timeout
を与えたとしても、キーボードや支援技術のユーザーが行動を起こすために Toast にたどり着くのは難しいかもしれません( Toast は表示された時点ではフォーカスを受けないため)。
コントロールが必要な場合は、autohide: false
のトーストを使用することをお勧めします。