Klebrige Fußzeile mit display: flex
Lösung inspiriert von Philip Waltons klebriger Fußzeile .
Erläuterung
Diese Lösung gilt nur für :
- Chrome ≥ 21,0
- Firefox ≥ 20,0
- Internet Explorer ≥ 10
- Safari ≥ 6.1
Es basiert auf der flexAnzeige und nutzt die flex-growEigenschaft, die es einem Element ermöglicht, entweder in der Höhe oder in der Breite zu wachsen (wenn das auf eines oder jeweils eingestellt ist), um den zusätzlichen Platz im Container zu belegen.flow-directioncolumnrow
Wir werden uns Hebelwirkung auch die vhEinheit, wo 1vhwird wie definiert :
1/100 der Höhe des Ansichtsfensters
Daher ist eine Höhe 100vheine präzise Möglichkeit, einem Element mitzuteilen, dass es die gesamte Höhe des Ansichtsfensters überspannen soll.
So würden Sie Ihre Webseite strukturieren:
----------- body -----------
----------------------------
---------- footer ----------
----------------------------
Damit die Fußzeile am unteren Rand der Seite bleibt, soll der Abstand zwischen Körper und Fußzeile so groß werden, wie es erforderlich ist, um die Fußzeile am unteren Rand der Seite zu verschieben.
Daher wird unser Layout:
----------- body -----------
----------------------------
---------- spacer ----------
<- This element must grow in height
----------------------------
---------- footer ----------
----------------------------
Implementierung
body {
margin: 0;
display: flex;
flex-direction: column;
min-height: 100vh;
}
.spacer {
flex: 1;
}
/* make it visible for the purposes of demo */
.footer {
height: 50px;
background-color: red;
}
<body>
<div class="content">Hello World!</div>
<div class="spacer"></div>
<footer class="footer"></footer>
</body>
Sie können damit bei der JSFiddle spielen .
Safari-Macken
Beachten Sie, dass Safari eine fehlerhafte Implementierung der flex-shrinkEigenschaft aufweist , die es Elementen ermöglicht, mehr als die Mindesthöhe zu verkleinern, die zum Anzeigen des Inhalts erforderlich wäre. Um dieses Problem zu beheben, müssen Sie die flex-shrinkEigenschaft explizit auf 0 .contentund footerim obigen Beispiel setzen:
.content { flex-shrink: 0; }
.footer { flex-shrink: 0; }