Dialoger og modaler er integrerte deler av de fleste nettapplikasjoner. Selv om det ikke er en kompleks oppgave å bygge dem for hånd, er det en som raskt blir kjedelig for enhver nettutvikler. Det vanlige alternativet til å bygge dem for hånd er å bruke en komponent bygget av noen andre.
Det er imidlertid et par problemer med denne tilnærmingen. Det er så mange alternativer, det blir vanskelig å vite hvilken komponent som er best å bruke, og Å tilpasse utseendet til slike komponenter kan noen ganger være like kjedelig som å bygge en dialog for hånd. Heldigvis finnes det et annet alternativ: HTML-dialogelementet.
Hva er dialogelementet?
HTML-dialogelementet er en innebygd HTML-tag (som div eller span), som lar utviklere lage tilpassede dialoger og modaler. Dialogelementet har eksistert i Chrome og Opera siden 2014, men ble nylig støttet av alle større nettlesere.
Hvorfor bruke dialogelementet?
Den primære grunnen til å bruke dialogelementet er bekvemmelighet. Det gjør det enkelt å bygge dialoger som enten kan vises inline eller vises som modaler, med ingenting mer enn en enkelt HTML-tag og noen få linjer med JavaScript.
Dialogelementet fjerner behovet for å bygge og feilsøke en egendefinert dialog, eller importere en annens komponent. Det er også veldig enkelt å style med CSS.
Nettleserstøtte for dialogelementet
Dessverre kan nettleserstøtten for dialogelementet være bedre. Den støttes i de nyeste versjonene av alle større nettlesere fra mars 2022, med noen forbehold.
Alle Firefox-nettlesere som er eldre enn Firefox 98 vil bare støtte den hvis den er manuelt aktivert i nettleserinnstillingene, og enhver Safari-versjon tidligere enn Safari 15.4 støtter den ikke i det hele tatt. Fullstendig nettleserstøttedetaljer er tilgjengelig på kan jeg bruke.
Heldigvis betyr ikke dette at dialogelementet er ubrukelig. Google Chrome-teamet vedlikeholder en polyfill du kan finne på Github for dialogelementet som gir støtte for det selv på nettlesere der det ikke er naturlig støttet.
I sin nåværende form kan dialogelementet ha tilgjengelighetsproblemer, så det kan være mer egnet å bruke en tilpasset dialogkomponent som a11y-dialog i produksjonsapplikasjoner.
Hvordan bruke dialogelementet
For å demonstrere hvordan du bruker dialogelementet, vil du bruke det til å bygge en felles nettsidefunksjon: en bekreftelsesmodal for en sletteknapp.
Alt som kreves for å følge med er en enkelt HTML-fil.
1. Sett opp HTML-filen
Start med å lage nevnte fil og gi den et navn index.html.
Deretter etablerer du strukturen til HTML-filen og gir litt grunnleggende metainformasjon om siden, slik at den gjengis riktig på alle enheter.
Skriv inn følgende kode i index.html:
<!DOCTYPE html>
<html lang="no">
<hode>
<metategnsett="UTF-8">
<meta http-equiv="X-UA-kompatibel" innhold="IE = kant">
<metanavn="viewport" innhold="width=enhetsbredde, initial-skala=1,0">
<tittel>Dialog demo</title>
</head><stil></style>
<kropp></body>
<manus></script>
</html>
Det er alt oppsettet som er nødvendig for dette prosjektet.
2. Skrive markeringen
Deretter skriver du markeringen for sletteknappen, samt dialogelementet.
Skriv inn følgende kode i body-taggen til index.html:
<div klasse="knapp-beholder">
<knapp>
Slett punkt
</button>
</div>
<dialog>
<div>
Er du sikker på at du vil slettedette punkt?
</div>
<div>
<knappeklasse="Lukk">
Ja
</button>
<knappeklasse="Lukk">
Nei
</button>
</div>
</dialog>
HTML-en ovenfor vil lage:
- En sletteknapp.
- Dialogelementet.
- To knapper inne i dialogboksen.
Hvis index.html er åpen i nettleseren din, vil det eneste elementet som er synlig på skjermen være sletteknappen. Dette betyr ikke at det er noe galt, dialogelementet krever ganske enkelt litt JavaScript for å bli synlig.
3. Legger til JavaScript
Skriv nå koden som åpner dialogen når en bruker klikker på sletteknappen, samt koden for å la dialogboksen lukkes.
Skriv inn følgende i skriptkoden til index.html:
konst modal = dokument.querySelector("dialog")
document.querySelector(".knapp-beholder-knapp").addEventListener("klikk", () => {
modal.showModal();
});
konst closeBtns = dokument.getElementsByClassName("lukke");
for (btn of closeBtns) {
btn.addEventListener("klikk", () => {
modal.Lukk();
})
}
Denne koden bruker querySelector-metoden for å få referanser til knappene og dialogen. Den knytter deretter en klikkhendelseslytter til hver knapp.
Du er kanskje kjent med hendelseslyttere i JavaScript, som du kan bruke selv. Hendelseslytteren knyttet til sletteknappen kaller showModal()-metoden for å vise dialogen når knappen klikkes.
Hver knapp inne i modalen har en hendelseslytter knyttet til seg som bruker close()-metoden for å skjule dialogen når de klikkes.
Selv om det ikke er noe JavaScript som kaller close()-metoden i koden, kan brukere også lukke modalen ved å trykke på escape-tasten på tastaturet.
Nå som dette JavaScript er på plass, hvis en bruker klikker på sletteknappen, åpnes modalen, og ved å klikke på ja eller nei-knappen lukkes modalen.
Slik skal den åpnede modalen se ut:
En ting å merke seg er at dialogelementet allerede kommer med litt styling, selv om det ikke er noen CSS i index.html. Modalen er allerede sentrert, den har en kantlinje, bredden er begrenset til innholdet, og den har en viss standardpolstring.
Brukere kan ikke samhandle (klikke, velge) med noe i bakgrunnen mens modalen er åpen.
Dialogelementet kan også vise seg selv som en del av flyten på siden i stedet for som en modal. For å prøve det, endre den første hendelseslytteren i JavaScript slik:
document.querySelector(".knapp-beholder-knapp").addEventListener("klikk", () => { modal.show(); });
Det eneste som har endret seg i denne koden er at koden kaller show()-metoden, i stedet for showModal()-metoden. Nå, når en bruker klikker på Slett element-knappen, skal modalen åpne inline slik:
4. Legg til styling
Tilpass deretter utseendet til dialogboksen og bakgrunnen ved å skrive CSS.
CSS-en vil redusere rammen til dialogboksen, begrense dens maksimale bredde, og deretter gjøre bakgrunnen mørkere, samt legge til litt styling til knappene.
Å style selve dialogboksen er enkel, men bakgrunns-pseudoklassen er nødvendig for å legge til stil som retter seg mot bakgrunnen til dialogen.
Lim inn følgende kode i stilkoden til index.html:
dialog:: bakteppe {
bakgrunn: svart;
opasitet: 0.5;
}
knapp {
border-radius: 2px;
bakgrunnsfarge: hvit;
kantlinje: 1px helt svart;
margin: 5px;
box-shadow: 1px 1px 2px grå;
}
dialog {
maks-bredde: 90vw;
kantlinje: 1px helt svart;
}
Når dialogboksen er åpen, skal den nå se slik ut:
Og du har bygget en fullt funksjonell dialogboks.
Dialogelementet er en flott måte å bygge modaler på
Ved å bruke HTML-dialogelementet som nylig har fått støtte i alle større nettlesere, kan webutviklere nå bygge fullt funksjonelle, enkelt tilpassbare modaler og dialoger med én HTML-tag og noen få linjer med JavaScript og uten å måtte stole på en tredjepart løsning.
Dialogelementet har en polyfill vedlikeholdt av Google Chrome-teamet, som lar utviklere bruke dialog i nettleserversjoner som ikke støtter det.