لایهبندی (Z-index)
آشنایی با z-index در CSS، کنترل لایهبندی عناصر روی هم و Stacking Context
Z-index چیست؟
z-index مشخص میکند وقتی عناصر روی هم قرار میگیرند، کدام بالاتر (نزدیکتر به کاربر) نمایش داده شود. مثل لایههای فتوشاپ.
نکته مهم: فقط با position کار میکند
/* ❌ بیتأثیر — بدون position */
.box {
z-index: 100; /* کار نمیکند */
}
/* ✅ کار میکند */
.box {
position: relative;
z-index: 100;
}
مقادیر z-index
| مقدار | توضیح |
|---|---|
auto | پیشفرض — همان والد |
| عدد مثبت | بالاتر از پیشفرض |
| عدد منفی | پایینتر از پیشفرض |
0 | همان سطح پیشفرض |
قانون کلی
عدد بزرگتر = لایه بالاتر:
.modal { position: fixed; z-index: 9999; }
.navbar { position: sticky; z-index: 100; }
.dropdown { position: absolute; z-index: 50; }
.card { position: relative; z-index: 10; }
.background { position: absolute; z-index: -1; }
سیستم z-index استاندارد
برای جلوگیری از هرجومرج، یک سیستم لایهبندی تعریف کنید:
| لایه | Z-index | کاربرد |
|---|---|---|
| پسزمینه | -1 | تصاویر پسزمینه |
| base | 0 یا auto | محتوای عادی |
| Dropdown | 100 | منوهای کشویی |
| Sticky/Fixed | 200 | هدر چسبان |
| Overlay | 900 | پوشش تیره |
| Modal | 1000 | پنجره مودال |
| Toast | 1100 | اعلانها |
Stacking Context (بافت لایهبندی)
⚠️ نکته پیشرفته: z-index فقط در همان Stacking Context معنا دارد. یک عنصر با z-index: 9999 داخل یک والد با z-index: 1، نمیتواند بالاتر از عنصری با z-index: 2 خارج از آن والد باشد.
چه چیزی Stacking Context میسازد؟
- عنصر با
positionوz-indexمشخص - عنصر با
opacityکمتر از ۱ - عنصر با
transform - عنصر با
filter - عنصر با
isolation: isolate
مشکل رایج: z-index کار نمیکند
/* ❌ مشکل: z-index بدون position */
.dropdown {
z-index: 100; /* بیتأثیر */
}
/* ✅ راهحل */
.dropdown {
position: absolute;
z-index: 100;
}
بهترین شیوهها
- سیستم z-index استاندارد تعریف کنید و به آن پایبند باشید
- از اعداد تصادفی مثل 999999 خودداری کنید
- از متغیرهای CSS برای z-index استفاده کنید
- هرچه عنصر مهمتر (نزدیکتر به کاربر)، z-index بالاتر
- برای جلوگیری از مشکلات، از
isolation: isolateاستفاده کنید
نکات مهم
- z-index فقط روی عناصر positioned کار میکند
- عدد منفی عنصر را به پسزمینه میفرستد
- Stacking Context میتواند رفتار z-index را غیرمنتظره کند
isolation: isolateیک Stacking Context جدید میسازد بدون تغییر ظاهر- برای دیباگ، از DevTools استفاده کنید تا ببینید کدام عنصر بالاتر است
این مبحث بخشی از دوره آموزش کامل CSS است.