هوامش وحشو CSS
المسافات في CSS تأتي بنوعين: حشو وهامش. هما خصائص أساسية للتحكم في "الفراغ الداخلي" و"المسافة الخارجية" للعناصر.
مرجع سريع لخصائص المسافات
| الخاصية | القيم الشائعة | الغرض |
|---|---|---|
padding |
16px، 10px 20px، 10px 5px 15px 20px |
حشو (أعلى، يمين، أسفل، يسار) |
padding-top/right/bottom/left |
16px، 5% |
حشو جانب واحد |
margin |
20px، 0 auto، 10px 0 20px 0 |
هامش (أعلى، يمين، أسفل، يسار) |
margin-top/right/bottom/left |
10px، auto |
هامش جانب واحد |
auto |
margin: 0 auto |
توسيط عناصر قطعية أفقياً |
💡 قاعدة اختصار الهامش: 4 قيم (أعلى، يمين، أسفل، يسار) → 3 قيم (أعلى، يمين+يسار، أسفل) → 2 قيم (أعلى+أسفل، يمين+يسار) → 1 قيمة (جميع الجوانب متساوية).
الحشو
padding هو المسافة بين منطقة المحتوى والحدود — "الفراغ الداخلي" للعنصر.
مثال
HTML
<style>
.box {
padding: 20px; /* 20px من جميع الجوانب */
background: #fff3e0;
border: 1px solid #ffb74d;
}
</style>
<div class="box">حشو 20px يُنشئ مسافة بين المحتوى والحدود</div>
تعيين جوانب فردية
مثال
HTML
<style>
.box {
padding-top: 10px;
padding-right: 20px;
padding-bottom: 30px;
padding-left: 40px;
background: #fce4ec;
border: 1px solid #e91e63;
}
</style>
<div class="box">حشو مختلف: أعلى 10px، يمين 20px، أسفل 30px، يسار 40px</div>
قواعد اختصار الحشو
💡 خدعة الذاكرة: اختصار الحشو/الهامش يبدأ من "الأعلى" مع عقارب الساعة — أعلى، يمين، أسفل، يسار. لا تتذكر؟ فكّر "مع عقارب الساعة من الساعة 12." قيمتان تعنيان "أعلى+أسفل، يمين+يسار."
CSS
/* قيمة واحدة: جميع الجوانب متساوية */
padding: 20px;
/* قيمتان: أعلى+أسفل، يمين+يسار */
padding: 10px 20px;
/* ثلاث قيم: أعلى، يمين+يسار، أسفل */
padding: 10px 20px 30px;
/* أربع قيم: أعلى، يمين، أسفل، يسار (مع عقارب الساعة) */
padding: 10px 20px 30px 40px;
حالات استخدام الحشو الشائعة
مثال
HTML
<style>
/* إضافة حشو للزر لقابلية نقر أفضل */
.button {
padding: 12px 24px;
background: #3498db;
color: white;
border: none;
border-radius: 4px;
}
/* فراغ محتوى البطاقة */
.card {
padding: 20px;
border: 1px solid #ddd;
border-radius: 8px;
background: #f9f9f9;
}
/* منطقة نقر عنصر التنقل */
.nav-item {
padding: 10px 16px;
background: #e8eaf6;
display: inline-block;
}
</style>
<button class="button">زر</button>
<div class="card">محتوى البطاقة مع مسافة مريحة من الحدود</div>
<nav class="nav-item">عنصر تنقل</nav>
ملاحظات الحشو
📌 ملاحظة العنصر السطري: حشو
<span> و<a> والعناصر السطرية الأخرى يعمل فقط أفقياً. إذا أردت مناطق نقر مثالية على العناصر السطرية، اضبط display: inline-block.
- منطقة الحشو تُظهر لون خلفية العنصر والصور
- الحشو يجعل العناصر "أكبر" (ما لم تستخدم
box-sizing: border-box) - العناصر السطرية (مثل
<span>) حشوها يعمل فقط أفقياً
الهامش
margin هو المسافة بين حدود العنصر والعناصر الأخرى — "المسافة الخارجية" للعنصر.
مثال
HTML
<style>
.box {
margin: 20px; /* 20px من جميع الجوانب */
background: #e8f5e9;
border: 1px solid #66bb6a;
padding: 10px;
}
</style>
<div class="box">هامش 20px يُبقي مسافة 20px من العناصر الأخرى</div>
قواعد اختصار الهامش
نفس الحشو:
CSS
margin: 20px; /* جميع الجوانب متساوية */
margin: 10px 20px; /* أعلى+أسفل، يمين+يسار */
margin: 10px 20px 30px; /* أعلى، يمين+يسار، أسفل */
margin: 10px 20px 30px 40px; /* أعلى، يمين، أسفل، يسار */
حالات استخدام الهامش الشائعة
مثال
HTML
<style>
/* توسيط حاوية */
.container {
width: 1200px;
margin: 0 auto; /* توسيط أفقي */
background: #e3f2fd;
padding: 10px;
}
/* مسافة بين العناصر */
.box {
margin-bottom: 20px;
}
/* مسافة تحت العناوين */
h1 {
margin-bottom: 16px;
}
</style>
<div class="container">عنصر حاوية مع عناصر أبناء بداخلها</div>
<div class="box">عنصر صندوق يوضح تنسيق نموذج الصندوق</div>
<h1>عنوان المستوى الأول</h1>
استخدام margin: auto للتوسيط
margin: 0 auto يمكنه توسيط عنصر قطعي أفقياً داخل أصله:
مثال
HTML
<style>
.box {
width: 400px; /* يجب تحديد العرض */
margin: 0 auto; /* توسيط أفقي */
}
</style>
<div class="box">عنصر صندوق يوضح تنسيق نموذج الصندوق</div>
تداخل الهامش
⚠️ فخ كلاسيكي: الهوامش العمودية المتجاورة تتداخل في الأكبر — يُسمى "تداخل الهامش." أبسط إصلاح هو إضافة
overflow: hidden أو padding: 1px لعنصر الأصل. استخدام حاوية flex يمنع هذا أيضاً.
هذا مفهوم CSS مهم — الهوامش العمودية المتجاورة تتداخل في واحد، تأخذ القيمة الأكبر.
السيناريو 1: أشقاء متجاورون
مثال
HTML
<style>
.box1 {
margin-bottom: 30px;
}
.box2 {
margin-top: 20px;
}
/* المسافة الفعلية 30px (القيمة الأكبر)، وليست 50px */
</style>
<div class="box1">صندوق 1</div>
<div class="box2">صندوق 2</div>
السيناريو 2: عناصر أصلية-تابعة
عندما لا يحتوي الأصل على حشو أو حدود أو محتوى، هامش الابن "يخترق" خارج الأصل:
مثال
HTML
<style>
.parent {
background: #eee;
/* لا حشو أو حدود */
}
.child {
margin-top: 20px; /* هذا الهامش يجعل الأصل "يسقط" أيضاً */
}
</style>
<div class="parent">حاوية أصلية</div>
<div class="child">محتوى تابع</div>
طرق التجنب:
- أضف
padding: 1pxللأصل (أو أي قيمة موجبة) - أضف
border: 1px solid transparentللأصل - أضف
overflow: hiddenللأصل - استخدم تخطيط flex أو grid
السيناريو 3: عناصر فارغة
عنصر قطعي بدون محتوى أو حشو أو حدود سيكون له أيضاً تداخل في الهوامش العلوية والسفلية.
حالات عدم تداخل الهامش
- الهوامش الأفقية (يمين/يسار) لا تتداخل
- أبناء تخطيط flex لا يتداخلون
- العناصر العائمة لا تتداخل
- العناصر المتموضعة absolutely لا تتداخل
اختيار الحشو مقابل الهامش
| السيناريو | استخدم أيهما |
|---|---|
| منع نص الزر من لمس الحواف | حشو |
| إبعاد بطاقتين عن بعضهما | هامش |
| إبعاد المحتوى عن الحدود | حشو |
| توسيط حاوية في الصفحة | margin: auto |
| التحكم في حجم منطقة الخلفية | حشو |
طريقة قرار بسيطة: هل يجب أن تغطي الخلفية هذه المنطقة؟ إذا نعم، استخدم حشو؛ إذا لا، استخدم هامش.
❓ أسئلة شائعة
س ما هو تداخل الهامش؟
ج الهوامش العمودية المتجاورة تتداخل في الأكبر. مثلاً، عنصر لديه `margin-bottom: 30px`، والتالي لديه `margin-top: 20px` — المسافة الفعلية 30px وليست 50px. إضافة `overflow: hidden` للأصل أو استخدام تخطيط flex يمنع هذا.
س ماذا لو جعل الحشو العناصر كبيرة جداً؟
ج اضبط عالمياً `box-sizing: border-box`. هذا يشمل الحشو والحدود في العرض/الارتفاع الكلي للعنصر، مانعاً التوسع. تقريباً جميع المشاريع الحديثة تفعل هذا.
س ما شروط توسيط margin: 0 auto؟
ج يجب أن يكون للعنصر عرض صريح (ليس auto) ويجب أن يكون عنصراً قطيعياً (display: block). العناصر السطرية وعناصر المستوى القطري بدون عرض مُعيَّن لا يمكن توسيطها بـ margin: auto.
📖 ملخص
- الحشو والهامش هما خصائص المسافة الأكثر استخداماً في تخطيط CSS
- الحشو يتحكم في الفراغ الداخلي، والهامش يتحكم في المسافة الخارجية
- فهم قواعد اختصارهما وفخ "تداخل الهامش" هو معرفة أساسية لتخطيطات موثوقة
- تعيين
box-sizing: border-boxعالمياً في بداية المشروع يمنع الحشو من توسيع العناصر ويُبسط حسابات الأبعاد
📝 تمارين
- أنشئ صفحة "مجموعة بطاقات" بـ 3 بطاقات، باستخدام الهامش للتحكم في المسافة بين البطاقات.
- أنشئ شريط تنقل باستخدام الحشو للتحكم في المسافة من النص إلى الحدود في كل عنصر تنقل.
- وضح "تداخل الهامش" وحله ب طريقتين مختلفتين على الأقل.
- استخدم
margin: 0 autoلتوسيط حاوية بعرض 800px أفقياً في الصفحة.



