Grid mit Tailwind CSS und 1fr?
Seit längerem beschäftige ich mich mal wieder mit Tailwind CSS und stoße gleich am Anfang auf ein eigentlich simples Problem, für was ich aber keine einfach Lösung finde.
Ich versuche ein einfaches Layout zu erstellen, welches als Grundgerüst ein Grid hat, bei dem der Header und Footer eine explizite Höhe haben und der Main-Bereich flexibel ist. Das Layout sollte auch bei wenig Inhalt immer 100vh haben, so dass der Footer immer unten ist.
Mit reinem CSS wäre das einfach so lösbar:
CSS
.grid {
min-height: 100vh;
display: grid;
grid-template-columns: 1fr;
grid-template-rows: 5rem 1fr 7rem;
}
HTML
<div class="grid">
<header>Header</header>
<main>Main</main>
<footer>Footer</footer>
</div>
Mit TailwindCSS bekomme ich das irgendwie nicht hin – zumindest nicht ohne Custom-CSS. Ich kann mir aber kaum vorstellen, dass sich dies nicht auch mit dem vorhandenen Set realisieren lässt.
Hat hier jemand eine Idee, wie ich das mit TailwindCSS am einfachsten umsetze?
1 Antwort
Innerhalb einer Flexbox kannst du das footer-Element mit einem Auto Margin herunterdrücken (lies dazu hier).
Plain-CSS-Lösung:
.container {
display: flex;
flex-direction: column;
min-height: 100vh;
}
.container > footer {
margin-top: auto;
}
Abgeleitet auf Tailwind:
<div class="flex flex-col min-h-screen">
<header>Header</header>
<main>Main content</main>
<footer class="mt-auto">Footer</footer>
</div>
Bei einem Grid kannst du die Zeilenhöhe so setzen:
<div class="grid grid-rows-[5rem,1fr,2rem] min-h-screen">
Der Auto Margin wird dann nicht mehr benötigt (im Grid würde er innerhalb des Grid Tracks wirken).
Danke aber ich brauche das für CSS Grid und nicht für Flexbox. Das Layout wird insgesamt schon noch komplizierter und die notwendigen Anpassungen für verschiedene Größen lassen sich mit CSS Grid deutlich besser realisieren.