تموضع CSS

التموضع CSS هو أداة تخطيط قوية تتيح لك التحكم الدقيق في موضع العناصر على الصفحة.

مرجع سريع لخاصية position

القيمة السلوك نقطة المرجع الاستخدام الشائع
static تدفق عادي (افتراضي) السلوك الافتراضي
relative إزاحة من الموضع العادي الموضع الأصلي للعنصر ضبط دقيق، سياق تموضع
absolute مُزال من التدفق أقرب أصل مُتموضع شارات، تراكبات
fixed ثابت في منفذ العرض منفذ العرض تروسيات ثابتة، زر العودة للأعلى
sticky هجين حاوية تمرير + منفذ العرض تروسيات ثابتة

position: relative

يزاح العنصر من موضعه العادي، بدون إزالته من تدفق المستند:

مثال

HTML
<style>
.box {
  position: relative;
  top: 20px;    /* يتحرك للأسفل 20px */
  left: 30px;   /* يتحرك لليمين 30px */
  background: #e3f2fd;
  padding: 10px;
}
</style>
<div class="box">موضع نسبي (مُزاح من الموضع الأصلي)</div>
<p>هذه الفقرة تبقى في التدفق العادي — الصندوق لا يزال يشغل مساحته الأصلية.</p>
▶ جرّب الكود

استخدامات شائعة:

position: absolute

يُزال العنصر من التدفق، موضعه نسبي لأقرب أصل مُتموضع:

مثال

HTML
<style>
.parent {
  position: relative;
  width: 300px;
  height: 200px;
  background: #f5f5f5;
  border: 2px solid #333;
}
.badge {
  position: absolute;
  top: 10px;
  right: 10px;
  background: #e74c3c;
  color: white;
  padding: 4px 8px;
  border-radius: 4px;
  font-size: 12px;
}
</style>
<div class="parent">
  <div class="badge">HOT</div>
  <p>محتوى بطاقة المنتج</p>
</div>
▶ جرّب الكود

نقطة مفتاحية: إذا لم يكن هناك أصل مُتموضع، absolute يوضع نسبياً لمنفذ العرض.

position: fixed

ثابت في منفذ العرض، لا يتحرك مع الصفحة:

مثال

HTML
<style>
.fixed-header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  background: #2c3e50;
  color: white;
  padding: 10px 20px;
  z-index: 1000;
}
</style>
<div class="fixed-header">ترويسة ثابتة — دائماً مرئية في الأعلى</div>
▶ جرّب الكود

استخدامات شائعة:

position: sticky

هجين من relative و fixed — يتحرك بشكل عادي ثم "يلتصق" عند عتبة:

مثال

<style>
.sticky-nav {
  position: sticky;
  top: 0;
  background: #2c3e50;
  color: white;
  padding: 10px;
  z-index: 100;
}
</style>
<div class="sticky-nav">تنقل لاصق — يتحرك مع المحتوى، ثم يلتصق في الأعلى</div>
▶ جرّب الكود

ملاحظات الاستخدام:

z-index (ترتيب التكديس)

عندما تتراكب العناصر، z-index يتحكم في أيها يظهر في الأعلى:

مثال

HTML
<style>
.box1 {
  position: absolute;
  z-index: 10;
  background: #e74c3c;
  width: 100px;
  height: 100px;
}
.box2 {
  position: absolute;
  z-index: 5;
  background: #3498db;
  width: 100px;
  height: 100px;
  left: 30px;
  top: 30px;
}
</style>
<div class="box1">z-index: 10 (في الأعلى)</div>
<div class="box2">z-index: 5 (خلف)</div>
▶ جرّب الكود

ملاحظة: z-index يعمل فقط على العناصر المُتموضعة (ليست static).

سياق التكديس

z-index يُقارن داخل نفس "سياق التكديس". كل عنصر مُتموضع يُنشئ سياق تكديس — z-index الأبناء يُقارن فقط داخل سياق الأصل.


❓ أسئلة شائعة

س ماذا يُستخدم لـ position: relative؟
ج يُستخدم بشكل شائع كمرجع تموضع للأبناء absolutely. أضف `position: relative` إلى أصل (without إزاحة)، وابناء `position: absolute` ستموضع نسبياً لذلك الأصل. without relative على الأصل، absolutely تتموضع نسبياً للصفحة بأكملها.
س تموضع fixed لا يعمل جيداً على المحمول؟
ج fixed يتصرف بشكل غير متسق في Safari المحمول، خاصة مع لوحات المفاتيح المنبثقة أو تمرير الصفحة. استخدم `position: sticky` كبديل لبعض السيناريوهات، أو استخدم JavaScript لكشف المحمول والتعامل معه بشكل خاص.
س z-index مُعيَّن عالٍ لكن لا يزال محجوباً؟
ج z-index يعمل فقط داخل نفس سياق التكديس. إذا كان للأصل z-index، z-index الأبناء يُقارن فقط داخل سياق ذلك الأصل — لن يتجاوز حدود الأصل. تحقق إذا كان الأصل يحتوي على z-index أقل، أو إذا كان الأصل يحتوي على خصائص مثل `opacity` تُنشئ سياقات تكديس جديدة.

📖 ملخص

📝 تمارين

  1. أنشئ "بطاقة منتج" بشارة "HOT" في الزاوية العلوية اليمنى باستخدام position: absolute.
  2. أنشئ شريط تنقل سفلي ثابت أو إشعار حقوق النشر باستخدام position: fixed.
  3. أنشئ "ترويسة لاصقة" — عناوين أقسام تلتصق في الأعلى عند التمرير حتى يدفعها العنوان التالي.
  4. نفّذ توسيط absolute لعنصر أصل (باستخدام absolute + top/left + transform).
100%