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 flex
Anzeige und nutzt die flex-grow
Eigenschaft, 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-direction
column
row
Wir werden uns Hebelwirkung auch die vh
Einheit, wo 1vh
wird wie definiert :
1/100 der Höhe des Ansichtsfensters
Daher ist eine Höhe 100vh
eine 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-shrink
Eigenschaft 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-shrink
Eigenschaft explizit auf 0 .content
und footer
im obigen Beispiel setzen:
.content { flex-shrink: 0; }
.footer { flex-shrink: 0; }