خاصية z-index: نظرة عامة مفصلة. تراكب السياقات أو عندما لا يعمل مؤشر z

02.06.2019

خاصية z-index css ليست مثل أي خاصية css أخرى. العديد من المطورين، عندما واجهوا ذلك، كانوا في حيرة من أمرهم بسبب الاستخدام غير الصحيح. ومع ذلك، بمجرد أن تصبح أكثر دراية بـ z-index، ستدرك أن هذه الخاصية بسيطة جدًا وتوفر طريقة فعالة لحل العديد من مشكلات التخطيط.

لنبدأ تدوينتنا بمقدمة. تحدد الخاصية z-index مستوى المكدس لعنصر html. يشير "مستوى المكدس" إلى موضع العنصر على المحور Z، بشكل عمودي على المحور X والمحور Y. يقع العنصر الذي تم تعيين أعلى قيمة له في أعلى المكدس.

إذا لم يكن كل شيء واضحًا في البداية، فأعتقد أنه بعد عرض التمثيل ثلاثي الأبعاد لـ "مستوى المكدس" (المحور Z) سيصبح الأمر أكثر وضوحًا:


يتم تحديد ترتيب المكدس الطبيعي، أو ترتيب العناصر على المحور Z، من خلال عدد من العوامل. فيما يلي قائمة توضح الترتيب الذي تم به تكديس العناصر، بدءًا من الأسفل:

  1. خلفية وحدود العنصر الذي ينشئ سياق المكدس
  2. العناصر ذات سياق المكدس السلبي، بترتيب المظهر
  3. عناصر كتلة غير موضعية وغير عائمة، حسب ترتيب ظهورها
  4. العناصر العائمة غير موضوعة حسب ترتيب ظهورها
  5. العناصر المضمنة، حسب ترتيب الظهور
  6. العناصر مرتبة حسب ظهورها

لا تحتوي هذه الكتل الثلاث على مؤشر z مخصص لها.

كل الأسرار أم لماذا هناك ارتباك؟
الهدف الأساسي من خاصية z-index هو تغيير ترتيب المكدس العادي، ولكن إذا تم استخدامه بشكل غير صحيح، فقد يكون مضللاً. يحدث هذا المفهوم الخاطئ لأن خاصية z-index ستعمل فقط على العناصر التي لها خاصية موضع بإحدى القيم الثلاث: ثابتة أو نسبية أو مطلقة.

الاستخدام
يمكن أن تؤثر خاصية z-index على ترتيب العناصر لكل من العناصر المضمنة والكتلة، ويتم تعيينها عن طريق تعيين قيمة عدد صحيح موجب أو سالب، أو القيمة auto. تمنح القيمة auto العنصر نفس ترتيب الطبقة مثل العنصر الأصلي.

#صندوق(
الموضع: نسبي؛ مؤشر z: 100؛
}
باستخدام مثال، سأوضح كيف يمكنك استخدام z-index لتغيير الترتيب المعتاد للعناصر بنفس الكتل كما في المثال الأول:

جميل وبسيط، ولكن في ظل ظروف معينة، في متصفحات مثل IE6 وFirefox 2، يمكن التعامل مع خاصية z-index بشكل مختلف.

IE6: أعط عنصر التحديد أولوية أكبر!
الحقيقة هي أن متصفحًا رائعًا مثل IE6 لا يريد عرض العنصر بأي شكل من الأشكال يظهر فوق كل شيء. في الوقت الحالي أعرف حلين فقط: استخدام iframe واستخدام جافا سكريبت.

باستخدام آي فريم:



حظر النص

باستخدام جافا سكريبت:
لن أعرض عليك مثالا، لأن التنفيذ بسيط وفعال للغاية. يمكنك فقط إخفاء العنصر