Positioning CSS
Kuasai penempatan elemen di halaman web! Pelajari berbagai nilai properti `position` CSS (static, relative, absolute, fixed, sticky) dan cara kerjanya.
Materi ini akan membantu kita memahami cara menempatkan elemen secara lebih presisi di halaman.
Memposisikan Elemen di Tempat yang Pas: Jurus Sakti Properti position
CSS!
Udah bisa bikin elemen, ngasih style, bahkan ngubah bentuknya pake transform
? Keren! Tapi, gimana kalau kamu pengen naro satu elemen numpuk di atas elemen lain? Atau bikin header yang nempel terus di atas layar pas halaman di-scroll? Atau ngasih catatan kecil yang posisinya pas di sebelah gambar tertentu?
Nah, buat ngatur penempatan elemen yang lebih "bebas" dari alur normal dokumen, CSS nyediain properti position
. Properti ini, digabung sama properti offset (top
, right
, bottom
, left
), ngasih kamu kontrol penuh buat "mindahin" elemen dari posisi aslinya.
Ada lima nilai utama buat properti position
yang perlu kamu tau:
static
(Ini Nilai Default-nya)relative
absolute
fixed
sticky
Yuk, kita bedah satu-satu biar gak bingung!
1. position: static;
- Si Normal yang Gak Neko-Neko
Ini adalah nilai default buat semua elemen HTML.
- Cara Kerja:
- Elemen bakal ditempatin sesuai alur normal dokumen (normal document flow). Elemen blok bakal numpuk vertikal, elemen inline bakal ngalir sejajar.
- Properti offset (
top
,right
,bottom
,left
) danz-index
GAK BAKAL NGEFEK ke elemen yangposition: static;
.
- Kapan Dipake?: Ya ini bawaannya. Kamu jarang banget perlu nulis
position: static;
secara eksplisit, kecuali kalau mau "ngembaliin" elemen yang sebelumnya udah di-setposition
lain jadi normal lagi.
.elemen-biasa {
position: static; /* Ini default, jadi gak akan ada perubahan visual */
top: 50px; /* Gak ngefek! */
left: 50px; /* Gak ngefek juga! */
}
2. position: relative;
- Geser Dikit dari Posisi Asli
Dengan position: relative;
, kamu bisa menggeser posisi elemen dari posisi normalnya, tapi elemen itu tetep ngambil ruang di posisi aslinya di alur dokumen.
- Cara Kerja:
- Elemennya masih dianggep ada di posisi normalnya di layout, jadi elemen lain gak bakal geser buat ngisi "bekas" tempatnya.
- Baru setelah itu, elemennya digeser pake properti
top
,right
,bottom
,left
. Pergeserannya ini relatif terhadap posisi normalnya sendiri. - Elemen dengan
position: relative;
bisa jadi konteks penempatan (containing block) buat elemen anaknya yang punyaposition: absolute;
(ini penting, nanti kita bahas).
- Kapan Dipake?:
- Buat ngasih sedikit offset visual ke elemen tanpa ngerusak layout sekitarnya.
- Paling sering dipake buat jadi "induk" atau "patokan" buat elemen
position: absolute;
yang ada di dalemnya.
.geser-dikit {
position: relative;
left: 20px; /* Geser 20px ke kanan dari posisi normalnya */
top: 10px; /* Geser 10px ke bawah dari posisi normalnya */
background-color: lightcoral;
}
.elemen-lain {
background-color: lightblue;
/* Elemen ini gak bakal geser meskipun .geser-dikit dipindahin */
}
Kalau kamu inspect, .geser-dikit
bakal keliatan pindah, tapi "ruang kosong" seukuran dia masih ada di posisi awalnya.
3. position: absolute;
- Bebas Lepas dari Alur Normal!
Nah, ini yang seru! Dengan position: absolute;
, elemen diangkat keluar sepenuhnya dari alur normal dokumen. Dia jadi kayak "hantu" yang gak ngambil ruang sama sekali di layout aslinya.
- Cara Kerja:
- Elemen lain bakal nganggap elemen
absolute
ini gak ada, jadi mereka bakal ngisi ruang yang tadinya ditempatin elemenabsolute
itu. - Posisinya ditentuin pake
top
,right
,bottom
,left
relatif terhadap elemen induk terdekatnya yang punyaposition
selainstatic
(biasanyarelative
,absolute
, ataufixed
). - Kalau gak ada induk yang
position
-nya non-static, dia bakal ngacu ke elemen<body>
atau blok penampung awal (initial containing block).
- Elemen lain bakal nganggap elemen
- Kapan Dipake?:
- Buat naro elemen numpuk di atas elemen lain (misal, ikon di atas gambar, pop-up, tooltip).
- Buat bikin layout yang posisinya presisi banget di dalem sebuah kontainer.
.kontainer-induk {
position: relative; /* PENTING! Biar jadi patokan buat .anak-absolut */
width: 300px;
height: 200px;
background-color: lightgreen;
padding: 10px;
}
.anak-absolut {
position: absolute;
top: 20px; /* 20px dari atas .kontainer-induk */
right: 20px; /* 20px dari kanan .kontainer-induk */
background-color: orange;
padding: 15px;
}
Di contoh ini, .anak-absolut
bakal ada di pojok kanan atas (dengan offset 20px) di dalem .kontainer-induk
. Kalau .kontainer-induk
gak punya position: relative;
, si .anak-absolut
bakal ngacunya ke <body>
.
4. position: fixed;
- Nempel Terus di Layar!
position: fixed;
mirip sama absolute
karena elemennya juga diangkat keluar dari alur normal dokumen. Tapi bedanya, elemen fixed
ini posisinya relatif terhadap viewport browser (jendela browser), bukan terhadap elemen induk.
- Cara Kerja:
- Elemen bakal "nempel" di posisi tertentu di layar, gak peduli kamu scroll halamannya sejauh apapun.
- Posisinya ditentuin pake
top
,right
,bottom
,left
ngacu ke tepi jendela browser.
- Kapan Dipake?:
- Buat bikin header atau navigasi yang nempel di atas pas di-scroll.
- Buat tombol "Back to Top".
- Buat pop-up atau notifikasi yang selalu keliatan di layar.
.header-nempel {
position: fixed;
top: 0;
left: 0;
width: 100%; /* Biar lebarnya penuh layar */
background-color: #333;
color: white;
padding: 10px;
z-index: 100; /* Biar selalu di atas konten lain, nanti dibahas */
}
.tombol-ke-atas {
position: fixed;
bottom: 20px;
right: 20px;
background-color: dodgerblue;
color: white;
padding: 10px;
border-radius: 5px;
}
5. position: sticky;
- Si Hybrid yang Nempel Pas Udah Lewat
position: sticky;
ini kayak gabungan antara relative
dan fixed
.
- Cara Kerja:
- Awalnya, elemen
sticky
ini berperilaku kayakposition: relative
(ngikutin alur normal). - Tapi, pas kamu nge-scroll halaman dan elemen ini nyampe di posisi offset tertentu (yang kamu tentuin pake
top
,right
,bottom
, atauleft
), dia bakal berubah jadi kayakposition: fixed;
dan nempel di situ. - Offset (
top
,right
,bottom
,left
) ini wajib diset biarsticky
bisa kerja. Offset ini nentuin "batas" di mana dia mulai nempel. - Elemen
sticky
"nempel" di dalem kontainer induk terdekatnya yang punya mekanisme scrolling.
- Awalnya, elemen
- Kapan Dipake?:
- Buat judul section yang nempel di atas pas section-nya di-scroll.
- Buat sidebar yang ikut scroll sampe batas tertentu terus nempel.
- Navigasi sekunder.
.judul-seksi-nempel {
position: sticky;
top: 0; /* Bakal nempel di atas viewport pas udah nyampe 0px dari atas */
background-color: white;
padding: 10px;
border-bottom: 1px solid lightgray;
z-index: 50;
}
/* Pastikan parent dari .judul-seksi-nempel ini punya cukup tinggi */
/* atau bisa di-scroll biar efek sticky keliatan */
Dukungan browser buat sticky
udah bagus, tapi kadang ada kelakuan aneh kalau parent-nya punya overflow
tertentu.
Properti Offset: top
, right
, bottom
, left
Properti-properti ini (top
, right
, bottom
, left
) dipake buat nentuin posisi akhir elemen kalau position
-nya adalah relative
, absolute
, fixed
, atau sticky
.
- Nilainya bisa pake unit panjang (
px
,em
,%
, dll.). - Persentase (%) diitung berdasarkan dimensi elemen induk penampungnya (containing block).
Properti z-index
: Ngatur Tumpukan Elemen
Kalau kamu punya beberapa elemen yang position
-nya non-static dan saling numpuk, properti z-index
nentuin urutan tumpukannya (mana yang di atas, mana yang di bawah).
- Cara Kerja:
- Elemen dengan nilai
z-index
lebih besar bakal tampil di atas elemen denganz-index
lebih kecil. - Nilainya bisa angka positif, negatif, atau
0
. Defaultnyaauto
(yang kira-kira sama kayak0
). z-index
cuma ngefek ke elemen yang punyaposition
selainstatic
.- Elemen dengan
z-index
akan membuat stacking context baru. Ini konsep yang agak dalem, tapi intinya, anak-anak dari elemen yang punyaz-index
akan ditumpuk relatif terhadap parent itu, gak peduliz-index
elemen lain di luar parent itu.
- Elemen dengan nilai
.modal-popup {
position: fixed;
/* ... style lain ... */
z-index: 1000; /* Biar popup selalu paling atas */
}
.overlay-gelap {
position: fixed;
/* ... style lain ... */
z-index: 999; /* Di bawah popup, tapi di atas konten biasa */
}
.header-nempel {
position: fixed; /* atau sticky */
/* ... style lain ... */
z-index: 100; /* Di atas konten biasa, tapi di bawah overlay/popup */
}
Menguasai properti position
ini bener-bener ngebuka banyak banget kemungkinan buat ngatur layout dan bikin efek visual yang menarik. Awalnya mungkin kerasa agak membingungkan bedanya relative
sama absolute
, tapi dengan banyak nyoba dan liat efeknya langsung di browser, pasti bakal makin paham.
Ingat, position: relative;
sering jadi "jangkar" buat anak-anaknya yang position: absolute;
. Dan fixed
atau sticky
asyik buat elemen yang mau "nempel".
Kuis Positioning CSS
Pertanyaan 1 dari 5
Apa nilai default dari properti `position` untuk semua elemen HTML?