Footer lengket dengan display: flex
Solusi yang terinspirasi oleh catatan kaki Philip Walton .
Penjelasan
Solusi ini hanya berlaku untuk :
- Chrome ≥ 21.0
- Firefox ≥ 20.0
- Internet Explorer ≥ 10
- Safari ≥ 6.1
Ini didasarkan pada flex
tampilan , meningkatkan flex-grow
properti, yang memungkinkan suatu elemen tumbuh dengan tinggi atau lebar (ketika flow-direction
diatur ke salah satu column
ataurow
masing masing), untuk menempati ruang ekstra dalam wadah.
Kami juga akan memanfaatkan vh
unit, 1vh
yang didefinisikan sebagai :
1/100 dari ketinggian viewport
Karena itu ketinggiannya 100vh
adalah cara ringkas untuk memberi tahu elemen untuk merentangkan ketinggian viewport penuh.
Ini adalah bagaimana Anda akan menyusun halaman web Anda:
----------- body -----------
----------------------------
---------- footer ----------
----------------------------
Agar footer menempel di bagian bawah halaman, Anda ingin ruang antara tubuh dan footer tumbuh sebanyak yang diperlukan untuk mendorong footer di bagian bawah halaman.
Karenanya tata letak kita menjadi:
----------- body -----------
----------------------------
---------- spacer ----------
<- This element must grow in height
----------------------------
---------- footer ----------
----------------------------
Penerapan
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>
Anda bisa bermain dengannya di JSFiddle .
Keanehan Safari
Ketahuilah bahwa Safari memiliki implementasi flex-shrink
properti yang cacat , yang memungkinkan barang menyusut lebih dari ketinggian minimum yang diperlukan untuk menampilkan konten. Untuk memperbaiki masalah ini, Anda harus menetapkan flex-shrink
properti secara eksplisit ke 0 ke .content
dan footer
pada contoh di atas:
.content { flex-shrink: 0; }
.footer { flex-shrink: 0; }