Ein Div zentrieren, das das Seitenverhältnis beibehält, wenn der Body-Rand vorhanden ist

Avatar of Chris Coyier
Chris Coyier am

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

Andrew Welch hatte neulich eine kleine CSS-Herausforderung, um ein gewöhnliches Div zu machen

• vertikal + horizontal zentriert
• passt sich an den Viewport an mit einem Rand drumherum
• behält ein beliebiges Seitenverhältnis bei
• Kein JS

In diesem Tweet gibt es ein Video, das vielleicht hilft, die Herausforderung zu visualisieren. Ich habe gesehen, wie Paul Bakaus kürzlich darüber bloggte, also ist das ein Thema, das immer wieder auftaucht!

Mark Huot wurde kreativ und wendete Seitenverhältnisse direkt mit width/height an und erzeugte die Ränder durch Subtraktion dieser Abmessungen

Die Idee von Amelia Wattenberger ist, sowohl height/width als auch max-height/max-width mit Viewport-Einheiten festzulegen und es mit dem klassischen translate-Trick zu zentrieren

Eric A. Meyer hat das Gleiche getan, nur mit Flexbox stattdessen zentriert.

Brian Hart verwendete vmin-Einheiten für die Seitenverhältnis-Größe und zentrierte es mit Flexbox

Benoît Rouleau hat das Gleiche getan, aber calc() für die Ränder in einer anderen Einheit verwendet.

Andrew mag Jonathon Melvilles Ansatz sehr. Das meiste davon ist in Tailwind-Klassen, daher ist es für mich etwas schwer zu verstehen, da ich es noch nicht gewohnt bin, Code so anzusehen.

Andrew sagte, er habe sich letztendlich für die vmin-Sache entschieden – obwohl ich sehe, dass er calc() verwendet, um vmin-Einheiten voneinander zu subtrahieren, was nicht wirklich notwendig ist, es sei denn, man möchte die Mathematik sehen, nehme ich an.