Property position menentukan bagaimana sebuah elemen diposisikan di halaman. Ini adalah salah satu topik yang paling penting sekaligus paling membingungkan bagi pemula CSS.
Setelah menentukan jenis positioning, kamu bisa menggeser elemen menggunakan property:
.elemen {
position: /* ... */;
top: 10px; /* jarak dari atas */
right: 20px; /* jarak dari kanan */
bottom: 10px; /* jarak dari bawah */
left: 20px; /* jarak dari kiri */
}
Semua elemen HTML secara default menggunakan static — elemen mengikuti alur normal dokumen dan top/right/bottom/left tidak berpengaruh:
.normal {
position: static; /* tidak perlu ditulis — ini default */
}
Elemen tetap di posisi normalnya dalam alur dokumen, tapi bisa digeser relatif dari posisi normal-nya. Ruang yang ditinggalkan tetap ada:
.relatif {
position: relative;
top: 20px; /* geser 20px ke bawah dari posisi normalnya */
left: 30px; /* geser 30px ke kanan */
}
Selain untuk menggeser elemen, position: relative juga digunakan sebagai anchor (jangkar) untuk elemen absolute di dalamnya.
Elemen keluar dari alur normal dokumen dan diposisikan relatif terhadap ancestor terdekat yang memiliki position bukan static. Jika tidak ada, relatif terhadap <html>:
/* Parent harus punya position: relative sebagai jangkar */
.parent {
position: relative;
width: 300px;
height: 200px;
}
.badge {
position: absolute;
top: 10px;
right: 10px; /* menempel di sudut kanan atas parent */
}
<div class="parent">
<img src="produk.jpg">
<span class="badge">Baru!</span>
</div>
Elemen diposisikan relatif terhadap viewport (jendela browser) dan tetap di tempatnya saat halaman di-scroll:
.navbar {
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 1000;
background: white;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.tombol-kembali-atas {
position: fixed;
bottom: 24px;
right: 24px;
}
Kombinasi antara relative dan fixed — elemen mengikuti scroll sampai batas tertentu, lalu "menempel" di posisi yang ditentukan:
.header-tabel {
position: sticky;
top: 0; /* menempel di atas saat di-scroll sampai sana */
background: white;
z-index: 10;
}
.sidebar {
position: sticky;
top: 80px; /* menempel 80px dari atas viewport */
}
Ketika elemen saling tumpang tindih, z-index menentukan mana yang tampil di atas. Nilai lebih besar = tampil di atas:
.bawah { z-index: 1; }
.tengah { z-index: 2; }
.atas { z-index: 3; } /* tampil paling atas */
z-indexhanya bekerja pada elemen yang memilikipositionselainstatic.
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
z-index: 999;
}
.modal {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); /* centering sempurna */
background: white;
padding: 32px;
border-radius: 12px;
z-index: 1000;
}
| Nilai | Alur Normal? | Relatif terhadap | Ikut scroll? |
|---|---|---|---|
static |
Ya | — | Ya |
relative |
Ya (ruang tetap ada) | Posisi normalnya sendiri | Ya |
absolute |
Tidak | Parent positioned terdekat | Ya |
fixed |
Tidak | Viewport | Tidak |
sticky |
Ya (awalnya) | Viewport (setelah batas) | Sebagian |
💡 Tips: Selalu pastikan ada
position: relativepada parent ketika menggunakanposition: absolutepada child. Tanpanya, elemen akan melompat ke posisi tak terduga relatif terhadap<html>. 📌
Kursus
CSS Dasar
Kategori
Display & Posisi
Durasi Pelajaran
20 menit