Fungsi float
float mendorong elemen ke satu sisi wadahnya dan membiarkan teks yang mengikutinya mengalir di sekelilingnya:
Margin pada kotak float menjaga teks agar tidak menempel. Margin adalah cara mengatur celah itu; teksnya sendiri tidak bisa diberi margin ke arah float.
Nilai-nilainya
| Nilai | Hasil |
|---|---|
none (default) | Tidak ada float |
left | Didorong ke tepi kiri |
right | Didorong ke tepi kanan |
inline-start | Didorong ke awal baris: kiri dalam bahasa Inggris, kanan dalam bahasa Arab atau Ibrani |
inline-end | Didorong ke akhir baris |
inline-start dan inline-end mengikuti arah tulisan, jadi tata letak yang dibuat dengannya tercermin dengan benar di halaman yang ditulis dari kanan ke kiri. Elemen yang di-float juga menjadi block: display: inline diubah menjadi block, jadi width dan height berlaku bahkan pada span atau img.
Gambar float di dalam teks
Penggunaan klasiknya: gambar di dalam artikel, dengan teks yang mengalir di sekelilingnya. Float satu gambar ke setiap sisi:
clear: menghentikan teks mengalir
clear berarti "mulai di bawah float sebelumnya di sisi ini". Pakai pada elemen yang tidak boleh berada di samping float, seperti judul bagian berikutnya:
Judul pertama berdesakan di samping float. Judul kedua dimulai di bawahnya. clear menerima left, right, both, inline-start, inline-end, dan none.
Induk yang mengempis, dan flow-root
Float berada di luar alur normal, jadi wadah yang semua anaknya di-float tidak punya apa-apa di dalam alur dan mengempis menjadi setinggi nol. Background dan border-nya akhirnya hanya berupa garis tipis di atas float:
display: flow-root membuat block formatting context baru, yang selalu membungkus float-nya. Kode lama memakai "clearfix" untuk hasil yang sama:
.clearfix::after {
content: "";
display: block;
clear: both;
}
overflow: hidden atau auto juga menampung float, dengan efek samping memotong konten; lihat overflow.
Float bukan untuk tata letak
Sebelum ada flexbox dan grid, seluruh tata letak halaman dibangun dari kolom-kolom float, dengan clearfix dan hitungan lebar di mana-mana. Masa itu sudah berlalu: float tidak bisa menengahkan, tidak bisa membuat kolom sama tinggi, dan rusak saat ukuran konten berubah. Pakai display: flex atau display: grid untuk baris dan kolom, dan simpan float untuk membuat teks mengelilingi sesuatu. Untuk menengahkan gambar alih-alih membuat teks mengelilinginya, lihat cara membuat gambar di tengah.
Mengikuti sebuah bentuk
shape-outside membuat teks mengikuti sebuah bentuk, bukan persegi panjang float. Properti ini hanya berfungsi pada elemen yang di-float:
.avatar {
float: left;
width: 120px; height: 120px;
border-radius: 50%;
shape-outside: circle(50%);
margin-inline-end: 16px;
}
Kesalahan umum
- Induk dengan tinggi nol. Semua anaknya di-float. Tambahkan
display: flow-root. - Float untuk kolom atau navigasi. Pakai flexbox atau grid.
- Berharap ada
float: center. Nilai itu tidak ada. Tengahkan dengan flexbox, grid, ataumargin: 0 auto. - Konten setelah float ikut mengalir padahal seharusnya tidak. Beri
clear: both, atau taruh float beserta teksnya di wadahflow-root. leftdanrightfisik di situs multibahasa. Pakaiinline-startdaninline-endsupaya tata letaknya tercermin di bahasa yang ditulis dari kanan ke kiri.
Pertanyaan yang sering diajukan
Apa fungsi float di CSS?
Float mengeluarkan elemen dari alur normal dan mendorongnya ke tepi kiri atau kanan wadahnya. Teks dan konten inline yang datang setelahnya mengalir di sekelilingnya.
Apa fungsi clear?
clear memindahkan elemen ke bawah float sebelumnya di sisi yang ditentukan: clear: left, clear: right, atau clear: both. Dengan cara inilah kamu menghentikan konten agar tidak mengalir di samping float.
Kenapa induk dari elemen float tingginya nol?
Float berada di luar alur normal, jadi induk yang hanya punya anak float tidak punya konten di dalam alur dan mengempis. Tambahkan display: flow-root pada induk, dan induk itu akan membesar untuk menampung float-nya.
Apa itu clearfix?
Trik agar induk menampung float-nya, biasanya berupa pseudo-element ::after dengan clear: both. Sekarang display: flow-root pada induk melakukan pekerjaan yang sama dalam satu baris.
Perlukah saya memakai float untuk tata letak?
Tidak. Float dipakai untuk kolom sebelum flexbox dan grid ada. Pakai flexbox atau grid untuk tata letak, dan simpan float untuk tugas aslinya: membuat teks mengelilingi gambar atau kutipan.