Toasts
Send meddelelser til dine besøgende med en skål, en let og let tilpasselig advarselsmeddelelse.
Toasts er letvægtsmeddelelser designet til at efterligne push-beskeder, der er blevet populært af mobil- og desktopoperativsystemer. De er bygget med flexbox, så de er nemme at justere og placere.
Oversigt
Ting at vide, når du bruger toast-plugin:
- Toasts er opt-in af præstationsmæssige årsager, så du skal initialisere dem selv .
- Toasts vil automatisk skjule sig, hvis du ikke angiver
autohide: false
.
prefers-reduced-motion
medieforespørgslen. Se afsnittet om
reduceret bevægelse i vores tilgængelighedsdokumentation .
Eksempler
Grundlæggende
For at tilskynde til strækbare og forudsigelige toasts anbefaler vi en header og body. Toast-headers bruger display: flex
, hvilket tillader nem justering af indhold takket være vores margin- og flexbox-værktøjer.
Toasts er så fleksible, som du har brug for, og har meget lidt påkrævet markering. Vi kræver som minimum et enkelt element for at indeholde dit "ristede" indhold og opfordrer kraftigt til en afvis-knap.
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<img src="..." class="rounded me-2" alt="...">
<strong class="me-auto">Bootstrap</strong>
<small>11 mins ago</small>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body">
Hello, world! This is a toast message.
</div>
</div>
.hide
klassen for fuldstændigt at skjule en skål (med
display:none
, i stedet for kun med
opacity:0
). Dette er nu ikke nødvendigt længere. Men for bagudkompatibilitet vil vores script fortsætte med at skifte klassen (selvom der ikke er praktisk behov for det) indtil den næste større version.
Levende eksempel
Klik på knappen nedenfor for at vise en skål (placeret med vores hjælpeprogrammer i nederste højre hjørne), der er blevet skjult som standard.
<button type="button" class="btn btn-primary" id="liveToastBtn">Show live toast</button>
<div class="toast-container position-fixed bottom-0 end-0 p-3">
<div id="liveToast" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<img src="..." class="rounded me-2" alt="...">
<strong class="me-auto">Bootstrap</strong>
<small>11 mins ago</small>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body">
Hello, world! This is a toast message.
</div>
</div>
</div>
Vi bruger følgende JavaScript til at udløse vores live toast-demo:
const toastTrigger = document.getElementById('liveToastBtn')
const toastLiveExample = document.getElementById('liveToast')
if (toastTrigger) {
toastTrigger.addEventListener('click', () => {
const toast = new bootstrap.Toast(toastLiveExample)
toast.show()
})
}
Gennemsigtig
Toasts er let gennemsigtige, så de passer ind i det, der er under dem.
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<img src="..." class="rounded me-2" alt="...">
<strong class="me-auto">Bootstrap</strong>
<small class="text-muted">11 mins ago</small>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body">
Hello, world! This is a toast message.
</div>
</div>
Stabling
Du kan stable toasts ved at pakke dem ind i en toastbeholder, som lodret tilføjer lidt mellemrum.
<div class="toast-container position-static">
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<img src="..." class="rounded me-2" alt="...">
<strong class="me-auto">Bootstrap</strong>
<small class="text-muted">just now</small>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body">
See? Just like this.
</div>
</div>
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<img src="..." class="rounded me-2" alt="...">
<strong class="me-auto">Bootstrap</strong>
<small class="text-muted">2 seconds ago</small>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body">
Heads up, toasts will stack automatically
</div>
</div>
</div>
Tilpasset indhold
Tilpas dine toasts ved at fjerne underkomponenter, finjustere dem med hjælpeprogrammer eller ved at tilføje din egen markering. Her har vi skabt en enklere skål ved at fjerne standarden .toast-header
, tilføje et brugerdefineret skjul-ikon fra Bootstrap Icons og bruge nogle flexbox-værktøjer til at justere layoutet.
<div class="toast align-items-center" role="alert" aria-live="assertive" aria-atomic="true">
<div class="d-flex">
<div class="toast-body">
Hello, world! This is a toast message.
</div>
<button type="button" class="btn-close me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
</div>
Alternativt kan du også tilføje yderligere kontroller og komponenter til toasts.
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-body">
Hello, world! This is a toast message.
<div class="mt-2 pt-2 border-top">
<button type="button" class="btn btn-primary btn-sm">Take action</button>
<button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="toast">Close</button>
</div>
</div>
</div>
Farveskemaer
Med udgangspunkt i ovenstående eksempel kan du oprette forskellige toastfarveskemaer med vores farve- og baggrundsværktøjer . Her har vi tilføjet .text-bg-primary
til .toast
, og derefter tilføjet .btn-close-white
til vores lukkeknap. For at få en sprød kant fjerner vi standardrammen med .border-0
.
<div class="toast align-items-center text-bg-primary border-0" role="alert" aria-live="assertive" aria-atomic="true">
<div class="d-flex">
<div class="toast-body">
Hello, world! This is a toast message.
</div>
<button type="button" class="btn-close btn-close-white me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
</div>
Placering
Placer toasts med tilpasset CSS, efterhånden som du har brug for dem. Øverst til højre bruges ofte til notifikationer, ligesom den øverste midterste. Hvis du kun skal vise en skål ad gangen, skal du placere positioneringsstilene lige på .toast
.
<form>
<div class="mb-3">
<label for="selectToastPlacement">Toast placement</label>
<select class="form-select mt-2" 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>
</select>
</div>
</form>
<div aria-live="polite" aria-atomic="true" class="bg-dark position-relative bd-example-toasts">
<div class="toast-container p-3" id="toastPlacement">
<div class="toast">
<div class="toast-header">
<img src="..." class="rounded me-2" alt="...">
<strong class="me-auto">Bootstrap</strong>
<small>11 mins ago</small>
</div>
<div class="toast-body">
Hello, world! This is a toast message.
</div>
</div>
</div>
</div>
For systemer, der genererer flere meddelelser, kan du overveje at bruge et indpakningselement, så de nemt kan stables.
<div aria-live="polite" aria-atomic="true" class="position-relative">
<!-- Position it: -->
<!-- - `.toast-container` for spacing between toasts -->
<!-- - `top-0` & `end-0` to position the toasts in the upper right corner -->
<!-- - `.p-3` to prevent the toasts from sticking to the edge of the container -->
<div class="toast-container top-0 end-0 p-3">
<!-- Then put toasts within -->
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<img src="..." class="rounded me-2" alt="...">
<strong class="me-auto">Bootstrap</strong>
<small class="text-muted">just now</small>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body">
See? Just like this.
</div>
</div>
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<img src="..." class="rounded me-2" alt="...">
<strong class="me-auto">Bootstrap</strong>
<small class="text-muted">2 seconds ago</small>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body">
Heads up, toasts will stack automatically
</div>
</div>
</div>
</div>
Du kan også blive fancy med flexbox-værktøjer til at justere toasts vandret og/eller lodret.
<!-- Flexbox container for aligning the toasts -->
<div aria-live="polite" aria-atomic="true" class="d-flex justify-content-center align-items-center w-100">
<!-- Then put toasts within -->
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<img src="..." class="rounded me-2" alt="...">
<strong class="me-auto">Bootstrap</strong>
<small>11 mins ago</small>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body">
Hello, world! This is a toast message.
</div>
</div>
</div>
Tilgængelighed
Toasts er beregnet til at være små afbrydelser for dine besøgende eller brugere, så for at hjælpe dem med skærmlæsere og lignende hjælpeteknologier, bør du pakke dine toasts ind i en aria-live
region . Ændringer i levende regioner (såsom indsprøjtning/opdatering af en toast-komponent) annonceres automatisk af skærmlæsere uden at skulle flytte brugerens fokus eller på anden måde afbryde brugeren. Medtag derudover aria-atomic="true"
for at sikre, at hele toasten altid annonceres som en enkelt (atomare) enhed, i stedet for blot at annoncere, hvad der blev ændret (hvilket kan føre til problemer, hvis du kun opdaterer en del af toastens indhold, eller hvis du viser det samme toastindhold på et senere tidspunkt). Hvis de nødvendige oplysninger er vigtige for processen, f.eks. for en liste over fejl i en formular, så brug advarselskomponenteni stedet for toast.
Bemærk, at den levende region skal være til stede i markeringen, før toasten genereres eller opdateres. Hvis du dynamisk genererer begge på samme tid og injicerer dem på siden, vil de generelt ikke blive annonceret af hjælpeteknologier.
Du skal også tilpasse niveauet role
og aria-live
afhængigt af indholdet. Hvis det er en vigtig besked, f.eks. en fejl, skal du bruge role="alert" aria-live="assertive"
, ellers bruge role="status" aria-live="polite"
attributter.
Efterhånden som det indhold, du viser, ændres, skal du sørge for at opdatere delay
timeoutet , så brugerne har tid nok til at læse skålen.
<div class="toast" role="alert" aria-live="polite" aria-atomic="true" data-bs-delay="10000">
<div role="alert" aria-live="assertive" aria-atomic="true">...</div>
</div>
Når du bruger autohide: false
, skal du tilføje en lukkeknap for at tillade brugere at afvise skålen.
<div role="alert" aria-live="assertive" aria-atomic="true" class="toast" data-bs-autohide="false">
<div class="toast-header">
<img src="..." class="rounded me-2" alt="...">
<strong class="me-auto">Bootstrap</strong>
<small>11 mins ago</small>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body">
Hello, world! This is a toast message.
</div>
</div>
Selvom det teknisk set er muligt at tilføje fokuserbare/handlingsbare kontroller (såsom yderligere knapper eller links) i din toast, bør du undgå at gøre dette for automatisk at skjule toasts. Selvom du giver toasten en lang delay
timeout , kan brugere af tastatur og hjælpeteknologi finde det svært at nå toasten i tide til at handle (da toasts ikke får fokus, når de vises). Hvis du absolut skal have yderligere kontrol, anbefaler vi at bruge en toast med autohide: false
.
CSS
Variabler
Tilføjet i v5.2.0Som en del af Bootstraps udviklende CSS-variabletilgang bruger toasts nu lokale CSS-variabler .toast
til forbedret realtidstilpasning. Værdier for CSS-variablerne indstilles via Sass, så Sass-tilpasning understøttes også stadig.
--#{$prefix}toast-zindex: #{$zindex-toast};
--#{$prefix}toast-padding-x: #{$toast-padding-x};
--#{$prefix}toast-padding-y: #{$toast-padding-y};
--#{$prefix}toast-spacing: #{$toast-spacing};
--#{$prefix}toast-max-width: #{$toast-max-width};
@include rfs($toast-font-size, --#{$prefix}toast-font-size);
--#{$prefix}toast-color: #{$toast-color};
--#{$prefix}toast-bg: #{$toast-background-color};
--#{$prefix}toast-border-width: #{$toast-border-width};
--#{$prefix}toast-border-color: #{$toast-border-color};
--#{$prefix}toast-border-radius: #{$toast-border-radius};
--#{$prefix}toast-box-shadow: #{$toast-box-shadow};
--#{$prefix}toast-header-color: #{$toast-header-color};
--#{$prefix}toast-header-bg: #{$toast-header-background-color};
--#{$prefix}toast-header-border-color: #{$toast-header-border-color};
Sass variable
$toast-max-width: 350px;
$toast-padding-x: .75rem;
$toast-padding-y: .5rem;
$toast-font-size: .875rem;
$toast-color: null;
$toast-background-color: rgba($white, .85);
$toast-border-width: $border-width;
$toast-border-color: var(--#{$prefix}border-color-translucent);
$toast-border-radius: $border-radius;
$toast-box-shadow: $box-shadow;
$toast-spacing: $container-padding-x;
$toast-header-color: $gray-600;
$toast-header-background-color: rgba($white, .85);
$toast-header-border-color: rgba($black, .05);
Brug
Initialiser toasts via JavaScript:
const toastElList = document.querySelectorAll('.toast')
const toastList = [...toastElList].map(toastEl => new bootstrap.Toast(toastEl, option))
Udløsere
Afvisning kan opnås med data
attributten på en knap i skålen som vist nedenfor:
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
eller på en knap uden for toasten ved at bruge data-bs-target
som vist nedenfor:
<button type="button" class="btn-close" data-bs-dismiss="toast" data-bs-target="#my-toast" aria-label="Close"></button>
Muligheder
Da muligheder kan videregives via dataattributter eller JavaScript, kan du tilføje et indstillingsnavn til data-bs-
, som i data-bs-animation="{value}"
. Sørg for at ændre sagstypen for indstillingsnavnet fra " camelCase " til " kebab-case ", når du videregiver mulighederne via dataattributter. Brug for eksempel i data-bs-custom-class="beautifier"
stedet for data-bs-customClass="beautifier"
.
Fra Bootstrap 5.2.0 understøtter alle komponenter en eksperimentel reserveret dataattribut data-bs-config
, der kan rumme simpel komponentkonfiguration som en JSON-streng. Når et element har data-bs-config='{"delay":0, "title":123}'
og data-bs-title="456"
attributter, vil den endelige title
værdi være, 456
og de separate dataattributter vil tilsidesætte værdier givet på data-bs-config
. Derudover er eksisterende dataattributter i stand til at rumme JSON-værdier som data-bs-delay='{"show":0,"hide":150}'
.
Navn | Type | Standard | Beskrivelse |
---|---|---|---|
animation |
boolesk | true |
Anvend en CSS-fade-overgang på toasten. |
autohide |
boolesk | true |
Skjul automatisk toast efter forsinkelsen. |
delay |
nummer | 5000 |
Forsinkelse i millisekunder, før du skjuler toasten. |
Metoder
Asynkrone metoder og overgange
Alle API - metoder er asynkrone og starter en overgang . De vender tilbage til den, der ringer, så snart overgangen er startet, men før den slutter . Derudover vil et metodekald på en overgangskomponent blive ignoreret .
Metode | Beskrivelse |
---|---|
dispose |
Skjuler et elements toast. Din skål forbliver på DOM, men vises ikke længere. |
getInstance |
Statisk metode, som giver dig mulighed for at få toast-instansen forbundet med et DOM-element. For eksempel: const myToastEl = document.getElementById('myToastEl') const myToast = bootstrap.Toast.getInstance(myToastEl) Returnerer en Bootstrap toast-instans. |
getOrCreateInstance |
Statisk metode, som giver dig mulighed for at få toast-forekomsten tilknyttet et DOM-element, eller oprette en ny, hvis den ikke blev initialiseret. const myToastEl = document.getElementById('myToastEl') const myToast = bootstrap.Toast.getOrCreateInstance(myToastEl) Returnerer en Bootstrap toast-instans. |
hide |
Skjuler et elements toast. Vender tilbage til den, der ringer, før skålen rent faktisk er blevet skjult (dvs. før hidden.bs.toast begivenheden indtræffer). Du skal manuelt kalde denne metode, hvis du lavede autohide til false . |
isShown |
Returnerer en boolesk værdi i henhold til toasts synlighedstilstand. |
show |
Afslører et elements toast. Vender tilbage til den, der ringer, før skålen faktisk er blevet vist (dvs. før shown.bs.toast begivenheden indtræffer). Du skal manuelt kalde denne metode, i stedet vises din toast ikke. |
Begivenheder
Begivenhed | Beskrivelse |
---|---|
hide.bs.toast |
Denne hændelse udløses straks, når hide instansmetoden er blevet kaldt. |
hidden.bs.toast |
Denne begivenhed affyres, når skålen er færdig med at blive skjult for brugeren. |
show.bs.toast |
Denne hændelse udløses med det samme, når show instansmetoden kaldes. |
shown.bs.toast |
Denne hændelse affyres, når skålen er gjort synlig for brugeren. |
const myToastEl = document.getElementById('myToast')
myToastEl.addEventListener('hidden.bs.toast', () => {
// do something...
})