Haben Sie schon diese schicken Interaktionen gesehen, bei denen ein Modalfenster von oben auf die Seite fliegt? Vielleicht gleitet es von der Seite herein, während es zu voller Deckkraft überblendet? Vielleicht fällt es von oben herein und wechselt von unscharf zu fokussiert? Ziemlich cool, wenn es zur Stimmung Ihrer Website passt.
Sie bewegen sich aber immer nur auf einer geraden Linie. Dank des ziemlich neuen offset-path muss das nicht mehr sein!
Die offset-path Eigenschaft in CSS existiert, damit Sie ein Element entlang eines Pfades positionieren können. Ähnlich der gleichen Pfadsyntax, die wir von SVG kennen.
Hier ist ein super einfacher Pfad. Buchstäblich nur zwei Anweisungen
<path d="M 250,100 S -300,500 -700,-200"></path>
Siehe den Pen Ein sehr einfacher Pfad. von Chris Coyier (@chriscoyier) auf CodePen.
Ich kann diese Pfaddaten direkt nach CSS übertragen und dort entlang eines Pfades animieren
Siehe den Pen Entlang eines Pfades animieren. von Chris Coyier (@chriscoyier) auf CodePen.
In diesem Fall war es eine @keyframe Animation, die die Bewegung ausführt, was im Grunde nur die Änderung des offset-distance Wertes ist.
Das animierte Element kann alles sein! Zum Beispiel ein Modal ;)
Siehe den Pen Modal auf Pfad bewegen von Chris Coyier (@chriscoyier) auf CodePen.
In diesem Fall keine @keyframes, nur eine transition und unterschiedliche Werte von offset-distance.
Vorsicht bei der Rotation!
Ich verwende hier offset-rotation: 0deg;, denn wenn ich es nicht täte, würde sich das Modal verdrehen, um sich entlang des Pfades auszurichten. Das ist sehr cool, dass das möglich ist, aber in diesem Fall ist es ungeschickt.

Fallback-Optionen
Diese Art von Sache ist leicht eine Verbesserung. Im vorliegenden Fall blenden wir auch die Deckkraft und die Skalierung aus, sodass ein Fallback automatisch gehandhabt wird. Sie könnten diese Dinge auch in eine @supports Anweisung einpacken, damit Sie alternative Möglichkeiten zum Ausblenden des Modals haben, falls offset-path nicht unterstützt wird.
/* Fallback hide/show stuff */
.modal {
}
.modal.hide {
}
/* If supported, path-based hiding/showing */
/* Might as well test the rotation feature, as it's also vital */
@supports (offset-rotation: 0deg) {
.modal {
offset-rotation: 0deg;
offset-path: path("M 250,100 S -300,500 -700,-200");
}
.modal.hide {
offset-distance: 100%;
}
}
Reduzierte Bewegung handhaben
Nicht jeder bevorzugt Benutzeroberflächen mit viel Bewegung, und Browser können dem entgegenkommen. Wir können die Bewegung wie folgt entfernen
@media (prefers-reduced-motion) {
.modal {
offset-path: none;
}
}

Ich könnte schwören, dass die Media Query vor ein, zwei Wochen noch funktioniert hat, aber im Moment kann ich sie in keinem Browser zum Laufen bringen, den ich ausprobiert habe (während ich die Einstellung auf OS-Ebene umschalte). Aber irgendwann wird sie funktionieren.
Wie beim anderen Fallback, stellen Sie sicher, dass Sie eine alternative Möglichkeit zum Ausblenden des Modals bereitstellen. Ich bin mir auch nicht ganz sicher, was hier die Best Practice ist. Vielleicht würden Sie, wenn Sie bewusst eine Erfahrung mit "reduzierter Bewegung" gestalten, auf gar keine Bewegung verzichten. Nur eine Anzeige von block/none.
Coole Technik! Aber ich bin zwiegespalten – es ist eine großartige Benutzererfahrung für eine bestimmte Nutzergruppe, aber ich sträube mich bei dem Gedanken an die Barrierefreiheitsprobleme, die das haben könnte. Modale sind aus Sicht der Barrierefreiheit bereits herausfordernd.
Ich frage mich, woran Sie hier speziell denken. Beeinflusst die Ästhetik, wie ein Modal angezeigt/verborgen wird, die Barrierefreiheit über die von mir erwähnten Bewegungsprobleme hinaus?
Ja, Modale sind im Grunde Mist, Inline-Inhalte und Vollbild-Erlebnisse sind viel besser. Ich denke tatsächlich, dass die Hinzufügung von Animationen die Erfahrung verbessert, weil wir sehen, woher das Objekt kommt, und seine Präsenz offensichtlicher wird und sich menschlicher anfühlt. Das gesagt, es müsste viel schneller gehen, und ich glaube, dass die Animation der Deckkraft helfen würde.
@Chris – Ich dachte an Benutzer mit vestibulären Störungen oder anderen Problemen, bei denen Bewegung und Änderungen der Deckkraft problematisch sein können. Aber wie Sie in Ihrem Beitrag erwähnt haben, kann dies über Media Queries gemildert werden (vorausgesetzt, der Browser unterstützt dies).
Das Timing und die Kurve dieser Modal-Animation machen mich wirklich unwohl. Tolle Idee aber.
@Josh meinen Sie das Timing und die Kurve der animierten Bilder, oder? Wenn alles durch die Codepen.io Beispiele läuft, ist es einwandfrei. Ich habe gerade angefangen, BS-Modale zu verwenden, ich benutze meine eigene Methode, wenn ich Infografik-Divs brauche. Ich werde das definitiv noch etwas ausprobieren.
Danke, mein Guter
Hallo Chris,
Demo funktioniert nur mit Chrome.
Gibt es Informationen zur (zukünftigen) Browserunterstützung?
Ich frage mich, ob das verwendet werden könnte, um eine Medium-ähnliche Lightbox zu implementieren? https://terrymun.github.io/Fluidbox/demo/index.html