نموذج الصندوق (Box Model) في CSS: مفهوم أساسي للتخطيط
نموذج الصندوق (Box Model) هو أحد أهم المفاهيم في CSS. يفهم هذا المفهوم يساعدك على التحكم في تخطيطات صفحات الويب بشكل دقيق. هذا الدليل الشامل سيساعدك على فهم وإتقان Box Model.
ما هو Box Model؟
Box Model هو نموذج يصف كيفية حساب أبعاد العناصر في CSS. كل عنصر في HTML يعامل كصندوق يحتوي على أربعة مكونات رئيسية: المحتوى، الحشو، الإطار، والهامش.
المكونات الأربعة:
┌─────────────────────────────────┐
│ Margin (الهامش) │
│ ┌─────────────────────────────┐ │
│ │ Border (الإطار) │ │
│ │ ┌─────────────────────────┐ │ │
│ │ │ Padding (الحشو) │ │ │
│ │ │ ┌─────────────────────┐ │ │ │
│ │ │ │ Content (المحتوى) │ │ │ │
│ │ │ └─────────────────────┘ │ │ │
│ │ └─────────────────────────┘ │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────┘
مكونات Box Model:
📦 المحتوى (Content)
المحتوى الفعلي للعنصر (النص، الصور، إلخ)
width: 200px;
height: 100px;
🔄 الحشو (Padding)
المسافة الداخلية بين المحتوى والإطار
padding: 20px;
🔲 الإطار (Border)
الخط الفاصل بين الحشو والهامش
border: 2px solid black;
📏 الهامش (Margin)
المسافة الخارجية بين العنصر والعناصر الأخرى
margin: 10px;
مثال عملي:
HTML:
<div class="box">
هذا هو المحتوى
</div>
CSS:
.box {
width: 200px; /* عرض المحتوى */
height: 100px; /* ارتفاع المحتوى */
padding: 20px; /* حشو داخلي */
border: 2px solid blue; /* إطار أزرق */
margin: 10px; /* هامش خارجي */
background-color: lightblue;
}
النتيجة:
العنصر سيكون:
- عرض المحتوى: 200px
- عرض الحشو: 20px من كل جانب
- عرض الإطار: 2px من كل جانب
- عرض الهامش: 10px من كل جانب
- العرض الإجمالي: 200 + 40 + 4 + 20 = 264px
خصائص الحشو (Padding):
طرق تحديد الحشو:
/* حشو موحد من جميع الجهات */
padding: 20px;
/* حشو مختلف للجهات */
padding: 10px 20px; /* أعلى/أسفل: 10px، يمين/يسار: 20px */
padding: 10px 20px 30px; /* أعلى: 10px، يمين/يسار: 20px، أسفل: 30px */
padding: 10px 20px 30px 40px; /* أعلى، يمين، أسفل، يسار */
/* حشو لكل جهة منفصلة */
padding-top: 10px;
padding-right: 20px;
padding-bottom: 30px;
padding-left: 40px;
مثال تطبيقي:
.card {
padding: 20px; /* حشو موحد */
background: white;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.button {
padding: 10px 20px; /* حشو عمودي وأفقي */
background: #007bff;
color: white;
border: none;
border-radius: 4px;
}
خصائص الإطار (Border):
خصائص الإطار الأساسية:
/* إطار بسيط */
border: 2px solid black;
/* إطار منفصل لكل جهة */
border-top: 1px solid red;
border-right: 2px solid blue;
border-bottom: 3px solid green;
border-left: 4px solid yellow;
/* إطار مع زوايا مدورة */
border: 2px solid black;
border-radius: 10px;
/* إطار دائري */
border-radius: 50%;
أنواع الإطارات:
/* إطار صلب */
border: 2px solid black;
/* إطار منقط */
border: 2px dotted red;
/* إطار متقطع */
border: 2px dashed blue;
/* إطار مزدوج */
border: 4px double green;
/* إطار مجوف */
border: 2px groove purple;
/* إطار بارز */
border: 2px ridge orange;
خصائص الهامش (Margin):
طرق تحديد الهامش:
/* هامش موحد */
margin: 20px;
/* هامش مختلف للجهات */
margin: 10px 20px; /* أعلى/أسفل: 10px، يمين/يسار: 20px */
margin: 10px 20px 30px; /* أعلى: 10px، يمين/يسار: 20px، أسفل: 30px */
margin: 10px 20px 30px 40px; /* أعلى، يمين، أسفل، يسار */
/* هامش لكل جهة منفصلة */
margin-top: 10px;
margin-right: 20px;
margin-bottom: 30px;
margin-left: 40px;
/* هامش تلقائي (للوسط) */
margin: 0 auto;
مثال تطبيقي:
.container {
margin: 0 auto; /* توسيط العنصر */
max-width: 1200px;
}
.card {
margin: 20px; /* مسافة حول البطاقة */
padding: 20px;
background: white;
}
.button {
margin-right: 10px; /* مسافة بين الأزرار */
margin-bottom: 10px;
}
Box Sizing:
content-box (الافتراضي):
/* العرض والارتفاع يشملان المحتوى فقط */
.box {
width: 200px;
height: 100px;
padding: 20px;
border: 2px solid black;
box-sizing: content-box;
}
/* العرض الإجمالي = 200 + 40 + 4 = 244px */
border-box:
/* العرض والارتفاع يشملان المحتوى + الحشو + الإطار */
.box {
width: 200px;
height: 100px;
padding: 20px;
border: 2px solid black;
box-sizing: border-box;
}
/* العرض الإجمالي = 200px (ثابت) */
تطبيق عام:
/* تطبيق border-box على جميع العناصر */
* {
box-sizing: border-box;
}
/* أو تطبيق محدد */
.container {
box-sizing: border-box;
width: 100%;
padding: 20px;
border: 1px solid #ddd;
}
مشاكل شائعة وحلولها:
مشكلة العناصر المتداخلة:
/* ❌ مشكلة: العناصر تتداخل */
.parent {
width: 300px;
padding: 20px;
border: 2px solid black;
}
.child {
width: 100%; /* 100% من 300px = 300px */
padding: 10px;
border: 1px solid red;
/* النتيجة: العنصر يخرج من الحدود */
}
/* ✅ الحل: استخدام border-box */
.parent, .child {
box-sizing: border-box;
}
مشكلة الهامش المتراكب:
/* ❌ مشكلة: الهامش يتراكب */
.box1 {
margin-bottom: 20px;
}
.box2 {
margin-top: 20px;
/* النتيجة: المسافة بينهما 20px وليس 40px */
}
/* ✅ الحل: استخدام padding بدلاً من margin */
.box1 {
padding-bottom: 20px;
}
.box2 {
padding-top: 20px;
}
أمثلة تطبيقية:
بطاقة منتج:
.product-card {
width: 250px;
padding: 20px;
border: 1px solid #ddd;
border-radius: 8px;
margin: 10px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
box-sizing: border-box;
}
.product-card img {
width: 100%;
height: 200px;
object-fit: cover;
border-radius: 4px;
margin-bottom: 15px;
}
.product-card h3 {
margin: 0 0 10px 0;
font-size: 18px;
}
.product-card p {
margin: 0 0 15px 0;
color: #666;
line-height: 1.4;
}
.product-card .price {
font-size: 20px;
font-weight: bold;
color: #007bff;
margin: 0;
}
زر تفاعلي:
.button {
display: inline-block;
padding: 12px 24px;
border: 2px solid #007bff;
border-radius: 6px;
background: #007bff;
color: white;
text-decoration: none;
font-weight: bold;
transition: all 0.3s ease;
box-sizing: border-box;
}
.button:hover {
background: white;
color: #007bff;
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0,123,255,0.3);
}
.button:active {
transform: translateY(0);
box-shadow: 0 2px 4px rgba(0,123,255,0.3);
}
أفضل الممارسات:
📏 استخدام Box Sizing:
- استخدم border-box لتجنب مشاكل الحساب
- طبق box-sizing على جميع العناصر
- تجنب الخلط بين content-box و border-box
🎨 تصميم متسق:
- استخدم نظام spacing موحد
- تجنب الهامش المتراكب
- استخدم padding للعناصر الداخلية
- استخدم margin للعناصر الخارجية
⚡ الأداء:
- تجنب الحسابات المعقدة
- استخدم وحدات نسبية عند الإمكان
- اختبر التصميم على أحجام شاشات مختلفة
أدوات مفيدة:
🔧 Browser DevTools
فحص Box Model في المتصفح
📐 CSS Grid Inspector
تصور التخطيطات المعقدة
🎨 CSS Box Model Generator
أدوات إنشاء Box Model
الخطوات التالية:
- تعلم CSS Grid للتخطيطات المعقدة
- فهم Flexbox للترتيب المرن
- ممارسة Responsive Design
- تعلم CSS Variables
- استخدام CSS Frameworks
Box Model هو أساس التخطيط في CSS. ابدأ في فهمه اليوم!
تعلم CSS معنا