Detailreiche Dialog-Elemente mit Mikrointeraktionen erstellen

In den letzten Wochen habe ich mit dem Dialog-Element und der neuen Popover-API experimentiert und einige Mikrointeraktionen ausprobiert, um jeden Klick ein wenig ansprechender zu gestalten.

Jairus Joer

Jairus Joer

In diesem Artikel und den folgenden Schritten werden wir ein detailliertes modales Dialogfeld erstellen und dabei verschiedene CSS-Animations- und Übergangseigenschaften verwenden, um ansprechende Mikrointeraktionen zu erstellen.

Die Grundlagen

In seiner einfachsten Form erfordert das Auslösen eines Dialogs nur zwei Elemente: eine Schaltfläche zum Öffnen des Dialogs und den Dialog selbst. Die Schaltfläche ist mit dem Dialog verknüpft, indem die Methode showModal() verwendet wird, die eine eingebaute Methode des Dialogelements ist.

<div id="app">
  <div id="content">
    <button>Open Dialog</button>

    <dialog>
      <p>Hello World</p>
    </dialog>
  </div>
</div>
const button = document.querySelector('button');
const dialog = document.querySelector('dialog');

button.addEventListener('click', () => dialog.showModal());

Styling des Dialogs

Um unser modales Dialogfeld ein wenig auffälliger zu machen, entfernen wir den Standardrahmen, fügen einen Rahmenradius hinzu und wenden einen Schlagschatten an. Ansonsten können wir das Dialogelement wie jedes andere Element behandeln und es entsprechend gestalten.

dialog {
  border: unset;
  border-radius: 0.375rem;
  filter: drop-shadow(0 0.75rem 0.75rem #00000020);
}

Gestalten des Hintergrunds

Der Hintergrund ist das Standard-Overlay, das hinter dem Dialog erscheint. Du wirst ihn auch bei der Arbeit mit Popovers antreffen. Wir können ihn mit dem Pseudo-Element ::backdrop gestalten. In diesem Beispiel setzen wir die Hintergrundfarbe auf ein halbtransparentes Schwarz.

dialog::backdrop {
  background-color: #00000020;
}

Hinzufügen von Mikrointeraktionen

Wir haben nun eine einfache, aber sehr schlichte Implementierung eines modalen Dialogs hinzugefügt. Um die Sache aufzupeppen, fügen wir die oben erwähnten Mikrointeraktionen mit Hilfe von CSS-Animationen und -Übergängen hinzu, um dem Dialog eine ansprechendere Darstellung und etwas mehr Tiefe zu verleihen.

Stammvariablen festlegen

Definiere eine CSS-Variable für die Dauer der Animation und setze sie auf 150ms oder einen Wert deiner Wahl. Wenn die Nutzer:innen eine reduzierte Bewegung bevorzugen, respektiere diese Vorliebe und setze die Dauer auf einen Wert, der die Augen weniger anstrengt, oder auf 0 ms.

:root {
  --animation-duration: 150ms;

  @media (prefers-reduced-motion) {
    --animation-duration: 0ms;
  }
}

Definition der Animation

Für dieses Beispiel verwenden wir eine der einfachsten Animationen, die es gibt, und blenden den Dialog ein. Wir definieren eine Keyframe-Animation namens fade-in, die den Dialog von 0 % auf 100 % Deckkraft einblendet.

@keyframes fade-in {
  0% {
    opacity: 0;
  }

  100% {
    opactiy: 1;
  }
}
dialog {
  animation: fade-in var(--animation-duration) ease-out both;

  &::backdrop {
    animation: fade-in var(--animation-duration) ease-out both;
  }
}

Tiefe mit Transformationen hinzufügen

Um dem Dialog ein Gefühl von Tiefe zu geben, wenden wir eine perspektivische Transformation auf das Element #app an. Dies bringt den Dialog in den Vordergrund, während das Element #app in den Hintergrund tritt und sein #content unscharf wird.

Beachte, dass wir @media (prefers-reduced-motion: no-preference) eingesetzt haben, um die perspektivische Veränderung nur dann anzuwenden, wenn Nutzer:innen die Präferenz nicht auf reduzierte Bewegung gesetzt haben.

body {
  background: #eee;

  &:has(dialog[open]) {
    overflow: hidden;

    @media (prefers-reduced-motion: no-preference) {
      #app {
        border-radius: 0.75rem;
        filter: drop-shadow(0 0.75rem 0.75rem #00000020);
        overflow: hidden;
        transform: perspective(100vw) translateZ(-3rem);
      }
    }

    #content {
      filter: blur(0.125rem);
    }
  }
}

Anwenden von Übergängen

Jetzt müssen nur noch die entsprechenden Übergangseigenschaften auf die Elemente #app und #content angewendet werden, um die Transformation und die Filtereigenschaften entsprechend zu animieren. Um #app als Ebene zu unterscheiden, sollte auch eine gedämpfte Hintergrundfarbe für das Element <body> verwendet werden.

#app,
#content {
  transition-property: transform, filter, border-radius;
  transition-duration: var(--animation-duration);
  transition-timing-function: ease-out;
}
#app {
  background: #fff;
}

Ergebnis

Und das war’s 🎉 Du hast soeben ein ansprechend animiertes modales Dialogfeld in deine Seite implementiert, wobei du die Benutzerpräferenzen berücksichtigt und standardmäßige und gängige Techniken und Werkzeuge verwendet hast. Sieh dir die Codepen-Demonstration unten an, um ein besseres Gefühl für das Endprodukt zu bekommen:

Empfohlene redaktionelle Inhalte

An dieser Stelle finden Sie externe Inhalte von Codepen, die diese Seite ergänzen. Ich bin damit einverstanden, dass mir Inhalte von Codepen angezeigt werden. Personenbezogene Daten können an Drittplattformen übermittelt werden.

PS: Das Dialogfenster kann durch Drücken von ESC geschlossen werden.


TL;DR

Lerne, wie man ein detailliertes modales Dialogfeld mit Mikrointeraktionen erstellt. Wir behandeln die Grundlagen, das Styling des Dialogs, das Hinzufügen von Mikrointeraktionen und die richtige Anwendung von Übergängen.