CSS Asoslari - 14-dars
z-index va stacking context tushunchalarini chuqur o'rganing. z-index qanday ishlaydi, nega ba'zida ishlamay qoladi va stacking context nima ekanligini tushuning.
14-dars
O'zing nomla
1. z-index nima?
z-index — qaysi element boshqasining USTIDA chiqishini belgilaydi.
Oddiy qilib aytganda:
"Qaysi element oldinda, qaysi biri orqada?"
Juda muhim
z-index FAQAT positioned elementlarda ishlaydi
Ya'ni:
- position: relative
- absolute
- fixed
- sticky
❌ position: static → z-index ishlamaydi
Oddiy misol
<div class="box red"></div>
<div class="box blue"></div>
.box {
width: 100px;
height: 100px;
position: absolute;
}
.red {
background: red;
z-index: 1;
}
.blue {
background: blue;
z-index: 2;
}
👉 Blue tepada chiqadi, chunki z-index katta.
z-index qanday ishlaydi?
Brauzer bunday o'ylaydi 🧠:
1️⃣ Elementlar ustma-ust tushdimi? 2️⃣ Ikkalasi ham positionedmi? 3️⃣ z-indexni solishtiraman 4️⃣ Katta qiymat — tepada
2. Nega z-index ishlamay qoladi?
Eng muhim
z-index global emas. U faqat o'z stacking context'i ichida ishlaydi.
Agar shu jumlani tushunsang — z-index endi hech qachon "sirli" bo'lmaydi.
1️⃣ Stacking context nima o'zi?
Stacking context — bu o'zining alohida "layer dunyosi".
Brauzer shunday deydi:
"Bu konteyner ichida kim ustun, kim past — o'ZIM hal qilaman."
2️⃣ Qachon yangi stacking context yaratiladi?
Mana eng muhim trigger'lar 👇
✅ position + z-index
.parent {
position: relative;
z-index: 1;
}
👉 YANGI stacking context
✅ position: fixed
Har doim yangi context
✅ opacity < 1
.box {
opacity: 0.9;
}
👉 Ko'pchilik bilmaydi — yangi context
✅ transform
.box {
transform: translateZ(0);
}
👉 Yangi context (juda ko'p xatolar shu yerda)
✅ filter, perspective, will-change
Bular ham stacking context yaratadi
3️⃣ Klassik REAL XATO (hamma qilgan)
.card {
position: relative;
z-index: 1;
}
.modal {
position: fixed;
z-index: 9999;
}
Lekin .modal baribir pastda chiqyapti 😐
Nega?
Chunki .card ota elementda:
- transform bor
- yoki
- opacity bor
👉 .modal ichkaridagi context'da qamalib qolgan
Qanday hal qilish?
1️⃣ Ota elementdan transform/opacity ni olib tashlash 2️⃣ Modalni to'g'ridan-to'g'ri body'ga qo'yish 3️⃣ Yoki ota elementga ham yuqori z-index berish
Eng ko'p uchraydigan xatolar ro'yxati
❌ Xato 1: position: static bilan z-index ishlatish
.box {
position: static; /* ❌ */
z-index: 999;
}
➡️ Ishlamaydi, chunki static positioned emas
❌ Xato 2: transform bilan yashirilgan stacking context
.parent {
transform: scale(1); /* Ko'rinmaydi, lekin context yaratadi */
}
.child {
z-index: 9999; /* Parent context'ida qamalgan */
}
➡️ Child parent context'idan chiqa olmaydi
❌ Xato 3: opacity bilan yashirilgan context
.container {
opacity: 0.99; /* 1 dan kichik = yangi context */
}
.modal {
z-index: 10000; /* Container context'ida */
}
➡️ Modal container ichida qoladi
❌ Xato 4: Nested z-index'lar noto'g'ri ishlatilgan
.parent {
position: relative;
z-index: 1;
}
.child {
position: relative;
z-index: 100; /* Parent context'ida 100 */
}
.sibling {
position: relative;
z-index: 2; /* Parent context'ida 2 */
}
➡️ Child z-index: 100 bo'lsa ham, u parent context'ida. Sibling esa parent context'ida 2. Lekin parent o'zi boshqa context'da 1 bo'lsa, child ham o'sha context'da qoladi.
Stacking context qanday ishlaydi? (detal)
Brauzer har bir stacking context'ni alohida "quti" sifatida ko'radi:
Root Context (z-index: auto)
├── Context A (z-index: 1)
│ ├── Element 1 (z-index: 10)
│ └── Element 2 (z-index: 5)
├── Context B (z-index: 2)
│ └── Element 3 (z-index: 1000)
└── Element 4 (z-index: 3)
Natija:
- Element 4 eng tepada (root context'da 3)
- Keyin Context B (root context'da 2)
- Keyin Context A (root context'da 1)
Element 3 z-index: 1000 bo'lsa ham, u faqat Context B ichida yuqori. Context B o'zi root'da 2, shuning uchun Element 4 (3) tepada.
Praktik maslahatlar
✅ Maslahat 1: Modal va overlay uchun body'ga to'g'ridan-to'g'ri qo'ying
<body>
<div class="content">...</div>
<div class="modal">...</div> <!-- Body'ga to'g'ri -->
</body>
✅ Maslahat 2: transform ishlatayotganda ehtiyot bo'ling
Agar transform kerak bo'lsa, modalni ota elementdan tashqariga chiqaring.
✅ Maslahat 3: z-index'lar uchun naming convention
:root {
--z-dropdown: 1000;
--z-sticky: 1020;
--z-fixed: 1030;
--z-modal-backdrop: 1040;
--z-modal: 1050;
--z-popover: 1060;
--z-tooltip: 1070;
}
Bu tartibni saqlashga yordam beradi.
Xulosa
z-index ishlashi uchun:
- Element positioned bo'lishi kerak (relative, absolute, fixed, sticky)
- Stacking context'ni tushunish kerak
- transform, opacity, filter kabi xususiyatlar yangi context yaratishini bilish kerak
- Modal va overlay'lar uchun body'ga to'g'ridan-to'g'ri qo'yish yaxshiroq
Agar z-index ishlamasa — stacking context'ni tekshiring! 🔍