DEV Community

Marco
Marco

Posted on • Originally published at blog.disane.dev

1

Bessere Dialoge in HTML mit <dialog> 💬

Erfahre, wie das Tag in HTML modale Dialoge vereinfacht und warum es besser ist als frühere Techniken. 💬


Das <dialog> Tag ist eine relativ neue Einführung in HTML, die die Art und Weise revolutioniert, wie wir modale Dialoge und Benutzerinteraktionen auf Webseiten gestalten und verwalten. In diesem Artikel werden wir untersuchen, wie das <dialog> Tag funktioniert, wie es vorher gemacht wurde und warum diese neue Methode so vorteilhaft ist.

Preview image

Was ist das <dialog> Tag? 📝

Das <dialog> Tag wurde entwickelt, um eine native Methode zur Erstellung von modalen Dialogen in HTML bereitzustellen. Modale Dialoge sind Popup-Fenster, die den Fokus auf sich ziehen und die Interaktion mit dem Rest der Seite verhindern, bis sie geschlossen werden. Dies ist besonders nützlich für Benutzerinteraktionen wie Bestätigungen, Warnungen oder Formulare.

Das Beste ist, dass es in allen modernen Browsern unterstützt wird:

Preview image

Grundstruktur eines <dialog> Tags

<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Dialog</title>
    <style>
        dialog {
            border: none;
            border-radius: 8px;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
            padding: 20px;
            width: 300px;
        }
        dialog::backdrop {
            background-color: rgba(0, 0, 0, 0.5);
        }
        #closeDialog {
            background-color: #f44336;
            border: none;
            color: white;
            padding: 10px 20px;
            text-align: center;
            text-decoration: none;
            display: inline-block;
            font-size: 16px;
            margin: 4px 2px;
            cursor: pointer;
            border-radius: 4px;
        }
    </style>
</head>
<body>
    <button id="openDialog">Open Dialog</button>
    <dialog id="myDialog">
        <p>This is a modern dialog</p>
        <button id="closeDialog">close</button>
    </dialog>

    <script>
        const dialog = document.getElementById('myDialog');
        const openDialogButton = document.getElementById('openDialog');
        const closeDialogButton = document.getElementById('closeDialog');

        openDialogButton.addEventListener('click', () => {
            dialog.showModal();
        });

        closeDialogButton.addEventListener('click', () => {
            dialog.close();
        });

        // Automatisches Schließen des Dialogs nach 10 Sekunden
        setTimeout(() => {
            dialog.close();
        }, 10000);
    </script>
</body>
</html>

Enter fullscreen mode Exit fullscreen mode

In diesem Beispiel öffnet der Button "Öffne Dialog" das Dialogfeld, und der Button "Schließen" schließt es. Zusätzlich wird der Dialog automatisch nach 3 Sekunden geöffnet und nach 10 Sekunden geschlossen. Das CSS sorgt für eine ansprechende Gestaltung des Dialogs und einen halbtransparenten Hintergrund (Backdrop).

Automatisches Öffnen

Das open Attribut hält den Dialog von dem Moment an offen, wenn Du die Seite öffnest. Indem Du das open Attribut zum <dialog> Tag hinzufügst, bleibt der Dialog automatisch geöffnet, ohne dass eine Benutzerinteraktion erforderlich ist. Dies kann nützlich sein, wenn Du eine Nachricht oder eine wichtige Information sofort beim Laden der Seite anzeigen möchtest.

<dialog id="myDialog" open>
    <p>Das ist ein dauerhaft geöffneter Dialog.</p>
    <button id="closeDialog">Schließen</button>
</dialog>

Enter fullscreen mode Exit fullscreen mode

In diesem Beispiel bleibt der Dialog direkt nach dem Laden der Seite geöffnet, da das open Attribut verwendet wird.

Styling des Backdrops 🎨

Das <dialog> Tag verfügt über ein spezielles ::backdrop Pseudoelement, mit dem das Aussehen des Hintergrunds (Backdrop) gestaltet werden kann. Der Backdrop ist der halbtransparente Bereich, der angezeigt wird, wenn der Dialog geöffnet ist, und verhindert, dass der Benutzer mit anderen Teilen der Seite interagiert.

dialog::backdrop {
    background-color: rgba(0, 0, 0, 0.5);
}

Enter fullscreen mode Exit fullscreen mode

Mit dem ::backdrop Pseudoelement kannst Du verschiedene Stile anwenden, wie zum Beispiel die Farbe, die Transparenz oder sogar komplexere visuelle Effekte, um den modalen Dialog hervorzuheben und den Fokus auf ihn zu lenken.

Vorherige Implementierungstechniken 📜

Bevor das <dialog> Tag eingeführt wurde, mussten Entwickler auf verschiedene Workarounds zurückgreifen, um modale Dialoge zu erstellen. Zu den gängigsten Methoden gehörten:

  • JavaScript-Bibliotheken: Bibliotheken wie jQuery UI oder Bootstrap boten Lösungen für modale Dialoge.
  • Eigenentwickelte Lösungen: Entwickler erstellten benutzerdefinierte Modale mit HTML, CSS und JavaScript.

Beispiel mit jQuery UI

<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>jQuery UI Dialog Beispiel</title>
    <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>
    <button id="openDialog">Öffne Dialog</button>
    <div id="myDialog" title="Modaler Dialog">
        <p>Das ist ein modaler Dialog mit jQuery UI.</p>
    </div>

    <script>
        $(document).ready(function() {
            $('#myDialog').dialog({
                autoOpen: false,
                modal: true
            });

            $('#openDialog').click(function() {
                $('#myDialog').dialog('open');
            });
        });
    </script>
</body>
</html>

Enter fullscreen mode Exit fullscreen mode

Hier sehen wir ein Beispiel mit jQuery UI, das eine zusätzliche Abhängigkeit und mehr Code erfordert, um denselben Effekt zu erzielen.

Vorteile des <dialog> Tags 🎉

Das <dialog> Tag bietet mehrere Vorteile gegenüber den älteren Techniken:

Einfachheit und Lesbarkeit

Das <dialog> Tag ist einfach zu verwenden und erfordert weniger Code, was die Lesbarkeit und Wartbarkeit verbessert. Es ist eine native HTML-Lösung, die keine externen Bibliotheken oder umfangreiche CSS- und JavaScript-Codebasis benötigt.

Bessere Integration und Barrierefreiheit ♿

Da das <dialog> Tag nativ im Browser implementiert ist, bietet es bessere Unterstützung für Barrierefreiheit. Screenreader und andere Hilfstechnologien können besser mit nativen HTML-Elementen umgehen, was die Benutzererfahrung für Menschen mit Behinderungen verbessert.

Performance und Ladezeiten 🚀

Durch die Reduzierung externer Abhängigkeiten verbessert das <dialog> Tag die Performance der Webseite. Weniger externe Bibliotheken bedeuten schnellere Ladezeiten und weniger Overhead.

Fazit 💡

Das <dialog> Tag ist eine leistungsstarke Ergänzung zu HTML, die die Erstellung und Verwaltung von modalen Dialogen erheblich vereinfacht. Durch die Verwendung dieses Tags können Entwickler auf einfache und effiziente Weise interaktive und barrierefreie Benutzererlebnisse schaffen. Wenn Du also das nächste Mal einen modalen Dialog benötigst, denke daran, wie das <dialog> Tag Dir das Leben erleichtern kann.

Wir hoffen, dass dieser Artikel Dir geholfen hat, die Vorteile und Anwendungen des <dialog> Tags besser zu verstehen. Wenn Du Fragen oder Anmerkungen hast, nutze gerne die Kommentarfunktion unter diesem Artikel.


If you like my posts, it would be nice if you follow my Blog for more tech stuff.

Sentry blog image

How I fixed 20 seconds of lag for every user in just 20 minutes.

Our AI agent was running 10-20 seconds slower than it should, impacting both our own developers and our early adopters. See how I used Sentry Profiling to fix it in record time.

Read more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay