Float & Clear — CSS

Coba liat majalah cetak: foto sering di pinggir, terus teks mengalir membungkus foto — gak overlap, gak ngosongin space, rapat tapi rapi. Itu float di dunia…

float menggeser sebuah elemen, biasanya gambar, ke pinggir kiri atau kanan, lalu teks di sekitarnya mengalir mengitarinya. Bayangin halaman majalah: foto di pinggir kiri, tulisannya mengalir rapat di sebelah kanan foto, lalu lanjut di bawahnya. clear adalah pasangannya: dia menyuruh elemen berhenti mengalir di samping float dan mulai di bawahnya.

🧪 Tebakan cepat: sebuah kotak berbingkai berisi gambar yang di-float dan satu baris teks. Bingkainya membungkus gambar atau cuma teksnya? Tebak dulu, jawabannya ada di bagian "Parent yang kempes".

Gambar di kiri, teks di kanan

<img src="danau.jpg" alt="Danau Toba">
<p>Danau Toba terbentuk dari letusan gunung api purba. Di tengahnya sekarang ada Pulau Samosir.</p>

<style>
img {
  float: left;
  margin-right: 16px;
}
</style>

Hasilnya, gambar di kiri dan teks di kanan, kayak di majalah. Tanpa float, cuma satu baris teks yang sejajar dengan bagian bawah gambar, sisanya turun ke bawah gambar.

Di latihan, aturan img { } sudah ada, isinya komentar /* tulis CSS di sini */. Ganti komentar itu dengan baris-baris CSS-nya, di dalam kurung kurawal yang sama.

Kiri, kanan, atau gak sama sekali

clear: mulai di bawah float

Paragraf kedua juga ikut mengalir di samping gambar selama masih ada ruang. Kalau kamu mau dia mulai di bawah gambar, kasih clear:

.paragraf-kedua {
  clear: both;
}

clear: both artinya "jangan sejajar dengan float mana pun, kiri maupun kanan". Ada juga clear: left (cuma lewat float kiri) dan clear: right.

Parent yang kempes

Elemen yang di-float gak dihitung buat tinggi parent-nya (elemen yang membungkusnya). Jadi kotak berbingkai yang isinya gambar float dan satu baris teks cuma setinggi teksnya, dan gambarnya nongol keluar dari bawah bingkai. Itu jawaban tebakannya: cuma teksnya.

Solusinya, kasih parent-nya display: flow-root:

.kartu {
  display: flow-root;
}

Sekarang bingkainya membungkus gambar juga. Di kode lama kamu bakal ketemu cara yang lebih ribet bernama clearfix: elemen kosong ::after di parent yang diberi clear: both. overflow: auto di parent juga bisa, karena efek sampingnya sama.

⚠️ Jebakan yang sering ketemu

TL;DR: float: left atau float: right menggeser elemen ke pinggir dan bikin teks mengalir di sebelahnya. Kasih margin di sisi yang menghadap teks. clear: both bikin elemen mulai di bawah float. Kalau parent-nya kempes karena anaknya di-float, kasih parent-nya display: flow-root (cara lamanya: clearfix).

Yang akan kamu pelajari