Sticky as a Local Fixed?

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Lassen Sie mich die Bühne etwas bereiten.

Sie haben eine Website und, wie die meisten, scrollt sie.

Diese Website wird Modals haben. Wahrscheinlich werden Sie das Modal mit position: fixed positionieren, damit es unabhängig vom Scrollen vorhersehbar positioniert ist. Es ist möglich, dass das Modal selbst scrollt.

Beachten Sie, dass das Modal einen Schließen-Button hat. Wir können diesen in der oberen rechten Ecke mit position: absolute positionieren, aber wenn unser Modal scrollt, ist das ein Problem.

Wir haben den Schließen-Button hinter dem Scrollen verloren.

Sollte das nicht eine Aufgabe für mehr position: fixed sein, richtig? Nicht wirklich, leider, da es keinen lokalen Kontext für position: fixed gibt.

Nun… eigentlich gibt es das (seltsamerweise) irgendwie. Wenn das Modal eine CSS-Transformation hat (und es könnte bereits eine haben, wenn Sie es mit dem alten left: 50%; transform: translateX(-50%); Trick zentrieren), dann wird der Schließen-Button mit fester Position nach Hause kommen.

Aber… da die Transformation geholfen hat, den Schließen-Button wieder an seinen Platz zu ziehen, sehen Sie, dass er sich wie position: absolute und nicht wie position: fixed verhält. ¯\_(ツ)_/¯

Es gibt hier jedoch eine Möglichkeit. Die Idee ist, dass position: sticky in gewissem Sinne eine lokal begrenzte position: fixed ist. Wenn wir den Schließen-Button sowieso bei top: 0 positionieren, bleibt er dort haften, wenn das Modal nach unten scrollt.

Ich fand diese Möglichkeit einfach interessant. Letztendlich, um ehrlich zu sein, wenn ich Modals hätte, bei denen ich mir Sorgen um das Scrollen mache, würde ich wahrscheinlich einen .modal-header Container und einen .modal-content Container haben. Der Header würde immer oben sitzen und der Container wäre das Ding, das scrollen könnte.