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 flextampilan , meningkatkan flex-growproperti, yang memungkinkan suatu elemen tumbuh dengan tinggi atau lebar (ketika flow-directiondiatur ke salah satu columnataurow masing masing), untuk menempati ruang ekstra dalam wadah.
Kami juga akan memanfaatkan vhunit, 1vhyang didefinisikan sebagai :
1/100 dari ketinggian viewport
Karena itu ketinggiannya 100vhadalah 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-shrinkproperti yang cacat , yang memungkinkan barang menyusut lebih dari ketinggian minimum yang diperlukan untuk menampilkan konten. Untuk memperbaiki masalah ini, Anda harus menetapkan flex-shrinkproperti secara eksplisit ke 0 ke .contentdan footerpada contoh di atas:
.content { flex-shrink: 0; }
.footer { flex-shrink: 0; }