Ich habe folgende Struktur:
<body>
<div id="main-wrapper">
<header>
</header>
<nav>
</nav>
<article>
</article>
<footer>
</footer>
</div>
</body>
Ich lade dynamisch Inhalte in das <article>
mit Javascript. Aus diesem Grund kann sich die Höhe des <article>
Blocks ändern.
Ich möchte, dass sich der <footer>
Block am Ende der Seite befindet, wenn viel Inhalt vorhanden ist, oder am Ende des Browserfensters, wenn nur wenige Inhaltszeilen vorhanden sind.
Im Moment kann ich das eine oder andere machen ... aber nicht beides.
Weiß also jemand, wie ich das machen kann - lassen Sie den <footer>
am unteren Rand der Seite / des Inhalts oder am unteren Rand des Bildschirms bleiben, je nachdem, welcher niedriger ist.
Antworten:
Ryan Faits klebrige Fußzeile ist sehr schön, aber ich finde, dass die Grundstruktur fehlt *.
Flexbox-Version
Wenn Sie das Glück haben, Flexbox verwenden zu können, ohne ältere Browser unterstützen zu müssen, werden klebrige Fußzeilen trivial einfach und unterstützen eine dynamisch große Fußzeile.
Der Trick, um Fußzeilen mit Flexbox am Boden festzuhalten, besteht darin, dass andere Elemente im selben Container vertikal gebogen werden. Alles was es braucht ist ein Wrapper-Element voller Höhe mit
CSS:display: flex
und mindestens einem Geschwister mit einemflex
Wert größer als0
:Code-Snippet anzeigen
Wenn Sie keine Flexbox verwenden können, ist meine Basisstruktur der Wahl:
Welches ist nicht so weit weg von:
Der Trick, um die Fußzeile zum Festhalten zu bringen, besteht darin, die Fußzeile an der unteren Polsterung ihres enthaltenen Elements zu verankern. Dies erfordert, dass die Höhe der Fußzeile statisch ist, aber ich habe festgestellt, dass die Fußzeilen normalerweise statisch hoch sind.
HTML: CSS:Code-Snippet anzeigen
Wenn die Fußzeile verankert ist,
CSS:#main-wrapper
müssen Sie jetzt#main-wrapper
mindestens die Höhe der Seite haben, es sei denn, die untergeordneten Elemente sind länger. Dies geschieht, indem man#main-wrapper
einmin-height
von hat100%
. Sie müssen sich auch daran erinnern, dass seine Elternhtml
undbody
so groß wie die Seite sein müssen.Code-Snippet anzeigen
Natürlich sollten Sie mein Urteilsvermögen in Frage stellen, da dieser Code dazu führt, dass die Fußzeile vom unteren Rand der Seite abfällt, selbst wenn kein Inhalt vorhanden ist. Der letzte Trick besteht darin, das von der verwendete Box-Modell
CSS:#main-wrapper
so zu ändern , dass dasmin-height
von100%
die100px
Polsterung enthält.Code-Snippet anzeigen
Und da haben Sie es, eine klebrige Fußzeile mit Ihrer ursprünglichen HTML-Struktur. Stellen Sie einfach sicher, dass das
footer
'sheight
gleich#main-wrapper
' istpadding-bottom
, und Sie sollten eingestellt sein.* Der Grund, warum ich Fehler an der Struktur von Fait finde, ist, dass die Elemente
.footer
und.header
auf verschiedenen Hierarchieebenen festgelegt werden, während ein unnötiges.push
Element hinzugefügt wird .quelle
#main-wrapper *:first-child { margin-top: 0; }
, sonst wäre die Seite am oberen Rand des ersten Kindes zu lang (was auf kurzen Seiten zu einer unnötigen Bildlaufleiste führt).Die klebrige Fußzeile von Ryan Fait ist eine einfache Lösung, die ich in der Vergangenheit mehrmals verwendet habe.
Grundlegendes HTML :
CSS :
Übersetzen Sie dies so, dass es dem ähnelt, was Sie bereits mit etwas in dieser Richtung erzielt haben:
HTML :
CSS:
Vergessen Sie nicht, das Negativ am Wrapper-Rand so zu aktualisieren, dass es der Höhe Ihrer Fußzeile entspricht, und drücken Sie div. Viel Glück!
quelle
Ich wollte dieses Problem lösen, ohne zusätzliche Markups hinzuzufügen, und habe daher die folgende Lösung verwendet:
Sie müssen die Höhen von Kopf-, Navigations- und Fußzeile kennen, um die Mindesthöhe für den Artikel einstellen zu können. Wenn der Artikel nur wenige Inhaltszeilen enthält, bleibt die Fußzeile am unteren Rand des Browserfensters hängen, andernfalls wird der gesamte Inhalt unterschritten.
Diese und andere oben veröffentlichte Lösungen finden Sie hier: https://css-tricks.com/couple-takes-sticky-footer/
quelle