Okna dialogowe od dawna pełnią istotną rolę na różnorodnych stronach internetowych, jednak ich implementacja często niesie za sobą pewne wyzwania. Można wykorzystać istniejące biblioteki JavaScript, ale powoduje to zwiększenie złożoności i rozmiaru projektu. Z tego względu szczególnie ekscytującym jest wprowadzenie nowego elementu dialogowego do HTML. Dzięki niemu, znacząco uprości się sposób tworzenia dialogów.
Element HTML <dialog> jest używany do tworzenia okien dialogowych. Okna dialogowe wyświetlają treści na wierzchu aktualnej strony, zazwyczaj w celu skłonienia użytkownika do interakcji, pobrania informacji lub wykonywania określonych działań.
Co więcej, element ten jest obsługiwany w każdej nowoczesnej przeglądarce, co oznacza, że możemy go używać za każdym razem gdy potrzebujemy utworzyć okno dialogowe.
Użycie elementu dialog
Aby utworzyć okno dialogowe należy wykorzystać tag <dialog>.
Okno dialogowe może być otwarte lub zamknięte. Wykorzystywany jest do tego atrybut open
Przykładowy kod:
W przypadku modalnego okna dialogowego można dodatkowo stylować tło za oknem bez użycia dodatkowego kodu HTML czy JavaScript. Można to zrobić tylko w przypadku modalnego okna dialogowego. W tym celu trzeba wykorzystać pseudoelement ::backdrop.
W tym trybie można wchodzić w interakcje tylko z zawartością okna dialogowego. Okna dialogowe są wyświetlane nad zawartością strony. Reszta strony jest domyślnie zasłonięta przez półprzezroczyste tło.
Można je otworzyć za pomocą metody showModal().
Okno dialogowe można zamknąć na trzy sposoby:
klawiszem Escape,
zzatwierdzając formularz za pomocą przycisku z ustawionym atrybutem: method="dialog",
wywołując metodę close().
Przykładowy kod:
<h2>Dialog modalny</h2><buttononclick="showModalDialog()">Otwórz dialog</button><br><buttononclick="closeModalDialog()">Hej! Nie możesz mnie kliknąć kiedy dialog <b>modalny</b> jest otwarty 😞</button><dialogid="modalDialog">
Witaj 👋! <br> Możesz zamknąć mnie przy użyciu poniższych przycisków lub przy użyciu klawisza "Escape" <br><buttononclick="closeModalDialog()">Zamknij przy użyciu metody close()</button><formmethod="dialog"><button>Zamknij przy użyciu method="dialog"</button></form></dialog><script>constmodalDialog=document.getElementById('modalDialog');functionshowModalDialog(){modalDialog.showModal();}functioncloseModalDialog(){modalDialog.close();}</script>
W przypadku typu modalnego tło jest wyświetlane za dialogiem, więc nasuwa się pytanie, czy można zamknąć dialog klikając w tło? Okazuje się, że tak, ale trzeba zastosować JavaScript.
Na dialog musimy dodać listener nasłuchujący na kliknięcie. Następnie użycie metody getBoundingClientRect() pozwoli nam otrzymać informacje o rozmiarze i położeniu elementu okna dialogowego w viewpoint. Potem pozostaje sprawdzić, czy kliknięcie było poza dialogiem i wywołać metodę close().
Przykładowy kod:
W przypadku dialogów niemodalnych, można wchodzić w interakcje z zawartością poza oknem dialogowym. Należy pamiętać, że klawisz Escape nie zamyka dialogu tego rodzaju.
Można go otworzyć za pomocą metody show().
Przykładowy kod:
<h2>Dialog niemodalny</h2><buttononclick="showNonModalDialog()">Otwórz dialog</button><br><buttononclick="closeNonModalDialog()">Hej! możesz mnie kliknąć kiedy dialog <b>niemodalny</b> jest otwarty 😃</button><dialogid="nonModalDialog">
Witaj 👋! <br> Nie możesz użyć klawiszu "Escape", aby mnie zamknąć 🤪<br><buttononclick="closeNonModalDialog()">Zamknij przy użyciu metody close()</button><formmethod="dialog"><button>Zamknij przy użyciu method="dialog"</button></form></dialog><script>constnonModalDialog=document.getElementById('nonModalDialog');functionshowNonModalDialog(){nonModalDialog.show();}functioncloseNonModalDialog(){nonModalDialog.close();}</script>