Native Popups och Modals Med HTML5 dialog Element

Många processer på webben kräver i dag användarnas fullständiga samtycke för att kunna slutföras. Till exempel kan användare behöva ta bort ett konto, ändra sitt användarnamn eller bekräfta en monetär transaktion.

Ett vanligt UX-tillvägagångssätt i sådana fall är att visa en dialogruta, vanligtvis med två knappar; en för avbrytande och en för att fortsätta med åtgärden. Vi har lita på JavaScript-bibliotek för att göra detta i flera år, men i den här handledningen kommer vi att göra saker som är naturliga med experimenten

element.

Använda Dialog Element

är ett HTML5-element (5,1 för att vara exakt). Det är klassificerat som en "sektionsrot", som liknar ,
, och den
element, som var och en etablerar en ny innehållsavdelning oberoende. Du kan placera den som ett barn i kroppen, eller bo i ett element som a
eller
-båda metoderna är giltiga.

 

Stödjande webbläsare (Chrome 37+ och Opera 27+) kommer att göra

element som är doldt som standard, gör det bara synligt på begäran med JavaScript show() eller showModal (), och den stänga() metod för att dölja det igen. Vanligtvis skulle vi köra den här metoden inom en klick händelse, som så:

var $ accountDelete = $ ('# delete-account'), $ accountDeleteDialog = $ ('# bekräfta-radera'); $ accountDelete.on ('click', function () $ accountDeleteDialog [0] .showModal ();); $ ('# cancel'). på ('klicka', funktion () $ accountDeleteDialog [0] .close ();); 

De show() v. showModal () Metod

Det är värt att notera show() och showModal () uppför sig annorlunda.

De show() Metoden avslöjar elementet i enlighet med sin position i DOM-flödet. Om du lagt till det omedelbart innan du stänger koden, kan den visas längst ner på webbsidan. Vi skulle behöva lägga till anpassade stilar för att justera positionen, till exempel om vi vill placera den centrerad på sidan. Dessa stilar brukar användas z-index att stapla elementet ovanpå de andra elementen, placera fastighet satt till absolut, tillsammans med vänster och topp.

De showModal () Metoden, å andra sidan, kommer att visa elementet som en modal. Den visas som standard på mitten av sidan, och den ligger i det övre lagret, som helskärms API som förhindrar störningar av z-index, relativ position och överflöde av moderelementet.

I de flesta fall är det troligt att vi skulle använda bekvämligheten av showModal () istället för show() metod.

Anpassa stilar

Dialogrutan bär webbläsarens standardstil som enkelt kan överdrivas som de flesta andra element. Du kan till exempel göra dialogrutan gränsare tunnare, göra hörnen rundade och lägga till droppskugga.

Dessutom, när

elementet visas som en modal (med hjälp av showModal () metod) har vi ett extra pseudo-element, ::bakgrund, till vårt förfogande. De ::bakgrund elementet ligger strax under dialogrutan, som täcker hela visningsporten och resten av elementen nedan.

Det är vanligt att utforma bakgrunden med en liten opacitet mörk färg-klicka på den röda knappen för att se den i åtgärd:

Lägga till känsla med övergångar

Att anpassa dialogrutans stilar borde vara enkelt, men vad sägs om att lägga till CSS-övergång? Vad sägs om att vi gradvis avslöjar dialogrutan, med hjälp av en skalningseffekt, mer eller mindre hur OS X gör det?

Steg 1

Till att börja med ska vi skala ner dialogrutan med 90%, ange övergången och lägga den ur sikte.

dialog visibility: hidden; transformera: skala (0,1); övergång: transformera 200ms;  

Steg 2

Nu definierar vi en klassväljare som ska skala dialogrutan upp till sin avsedda storlek och göra den synlig.

dialog.dialog-skala synlighet: synlig; transformera: skala (1);  

Steg 3

Vårt knep är att vi kommer att "hålla" dialogrutan i liten skala i några millisekunder innan vi lägger till klassen dialog-skala. För att uppnå detta använder vi JavaScript setTimeout () metod för att lägga till klassen:

varövergång $ accountDelete.on ('klick', funktion () $ accountDeleteDialog [0] .showModal (); transition = setTimeout (funktion () $ accountDeleteDialog.addClass ('dialogskala');, 0,5);) ; 

Steg 4

Låt oss inte glömma att ta bort den här klassen och radera tidenOut när dialogrutan är stängd.

$ ('# cancel'). på ('klicka', funktion () $ accountDeleteDialog [0] .close (); $ accountDeleteDialog.removeClass ("dialogskala"); clearTimeout (övergång);); 

Vi är redo! Du kan ge det en tur i följande demo:

Avslutar

De

är verkligen Praktiskt, men fortfarande väldigt dåligt när det gäller webbläsarsupport. Om och när alla större webbläsare har implementerat det, kommer vi att vara mindre beroende av bibliotek, vår innehållsstruktur kommer att vara mer semantisk, korrekt tillgänglig för hjälpteknik och vi får ett vanligt sätt att leverera modala dialoger.

http://caniuse.com/#feat=dialog

Fram till dess kan du använda polyfil från Google Chrome för att simulera det i icke-stödjande webbläsare.

Ytterligare resurser

  • HTML5 Dialog Element Specifikation
  • Dialog Element Browser Support
  • Modella och Modeless Boxes i webbdesign
  • Vad du kanske inte vet om Z-Index Property