CSS position: static, relative, absolute, fixed va sticky
Asoslar3 daqInnovialabs tahririyati
Qisqacha
static — oddiy oqim, relative elementni joyini saqlagan holda suradi, absolute va fixed uni oqimdan chiqarib pozitsiyalangan ajdod yoki oynadan hisoblaydi, sticky esa ota element ichida aylantirganda yopishadi.
Qisqa javob
position xususiyati ikki narsani hal qiladi: element oddiy oqimda qoladimi va top, right, bottom, left nimadan hisoblanadi.
| Qiymat | Oqimdami? | Koordinatalar nimadan hisoblanadi | Odatiy qo‘llanilishi |
|---|---|---|---|
static | Ha | Ishlamaydi | Standart holat |
relative | Ha, joy saqlanadi | O‘zining odatiy joyidan | Kichik surish, absolute uchun tayanch |
absolute | Yo‘q | Eng yaqin pozitsiyalangan ajdoddan | Kartadagi belgi, ochiladigan menyu |
fixed | Yo‘q | Brauzer oynasidan | Shapka, «yuqoriga» tugmasi, chat vidjeti |
sticky | Ha | Chegaraga yetguncha relative kabi | Jadvalning yopishqoq sarlavhasi, yon menyu |
Har bir qiymat misolda
static. Elementlar hujjatdagi matn kabi ketma-ket keladi. Bunday elementga top va z-index ta’sir qilmaydi.
relative. Element vizual suriladi, lekin uning asl joyi bo‘sh qoladi — qo‘shnilar qimirlamaydi.
.note { position: relative; top: 8px; left: 8px; }
relative ning asosiy amaliy foydasi — elementni absolute pozitsiyalangan bolalar uchun tayanch qilish.
absolute. Element oqimdan chiqariladi: qo‘shnilar u yo‘qdek yaqinlashadi. Koordinatalar position qiymati static bo‘lmagan eng yaqin ajdoddan hisoblanadi.
.card { position: relative; }
.card .badge { position: absolute; top: 12px; right: 12px; }
fixed. Element oynaga mahkamlanadi va aylantirganda qimirlamaydi. Uning ostida kontent qoladi, shuning uchun qat’iy shapka balandligini oraliq bilan qoplash kerak.
sticky. Gibrid: element chegaraga (masalan, top: 0) yetguncha oqimda bo‘ladi, keyin yopishadi — lekin faqat ota element doirasida.
.table-head { position: sticky; top: 0; }
Containing block: koordinatalar nimadan hisoblanadi
Containing block — koordinatalar va foizlar hisoblanadigan to‘rtburchak.
absoluteuchun —positionqiymatistaticbo‘lmagan eng yaqin ajdod. Bunday ajdod bo‘lmasa — sahifaning boshlang‘ich bloki, va element hujjat burchagiga «uchib ketadi».fixeduchun — brauzer oynasi. Lekin biror ajdoddatransform,filteryokiperspectivebo‘lsa,fixedshu ajdoddan hisoblanadi va aylantirganda qat’iy bo‘lmay qoladi.- Xuddi shu xususiyatlar (
transform,filter) ajdodniabsoluteuchun ham tayanchga aylantiradi.
z-index va stacking context
z-index ustma-ust joylashish tartibini boshqaradi, lekin faqat pozitsiyalangan elementlarda (shuningdek flex va grid elementlarida) ishlaydi.
Asosiy tushuncha — stacking context. Bu ichida z-index qiymatlari faqat o‘zaro solishtiriladigan «qatlam». Yangi kontekstni, masalan, quyidagilar yaratadi:
autodan farqliz-indexbilan birgaposition: relative/absolute;position: fixedvasticky;- 1 dan kichik
opacity,transform,filter; isolation: isolate.
Shuning uchun z-index: 9999 li modal oyna shapka ostida qolishi mumkin: agar u o‘z konteksti va z-index: 1 bo‘lgan ota element ichida tursa, shapkada esa z-index: 2 bo‘lsa, bola ota elementdan yuqoriga chiqa olmaydi. Yechim — sonni kattalashtirish emas, modalni hujjat ildiziga yaqinroq ko‘chirish yoki ota elementlarning z-index ini tuzatish.
Nega sticky yopishmaydi
Ro‘yxat bo‘yicha tekshiring:
- Chegara berilmagan.
top(yokibottom) siz sticky relative kabi ishlaydi. - Ajdodda
overflow: hidden,autoyokiscrollbor. Sticky oynaga emas, eng yaqin aylantiriladigan ajdodga yopishadi. Agar bu ajdodning o‘zi aylantirilmasa, effekt bo‘lmaydi. - Ota element elementning o‘zidan baland emas. Sticky faqat ota element ichida harakatlanadi. Ota element balandligi elementga teng bo‘lsa, yopishishga joy yo‘q.
- Element flex-konteynerda cho‘zilgan. Flex qatorida elementlar standart bo‘yicha butun balandlikka cho‘ziladi.
align-self: flex-startyordam beradi.
Nega absolute «sakraydi»
- Ota elementda
position: relativeyo‘q — koordinatalar uzoqroq ajdoddan yoki sahifadan hisoblanadi. top/leftberilmagan — element oqimda turadigan joyida qoladi va qo‘shni kontent bilan birga siljiydi.- Foizlar elementning o‘zidan emas, containing block o‘lchamidan hisoblanadi. Markazlash uchun aniq o‘lchamlar bilan
inset: 0; margin: autoyokitransform: translate(-50%, -50%)dan foydalaning.