HTML & CSS📅 2026-10-28⏱ 8 دقائق قراءة🎨 مقال 9 من 10

Flexbox و CSS Grid — دليل شامل التخطيط الحديث 2026

دليل عملي مفصل لـ Flexbox و CSS Grid — التخطيط المرن والشبكي، مع تمارين وحلول

في المقال السابق، تعلمت الألوان و Box Model. الآن سنتعلم Flexbox و CSS Grid — وهما أداتان حديثتان لبناء أي تخطيط تريده.

في هذا الدليل العملي، سنأخذك خطوة بخطوة لفهم Flexbox و Grid، مع تمارين وحلول.

لماذا التخطيط الحديث؟

قبل Flexbox و Grid:

  • نستخدم float و table (طرق قديمة).
  • صعوبة التوسيط.
  • كود معقد.

مع Flexbox و Grid:

  • ✅ بسيط وسهل.
  • ✅ مرن.
  • ✅ يعمل على كل الأجهزة.

الفرق بين Flexbox و Grid

المعيارFlexboxGrid
الاتجاهبُعد واحد (صف أو عمود)بُعدان (صفوف وأعمدة)
الاستخدامشريط تنقل، بطاقاتتخطيط صفحة كامل
المرونةمرن جداًمرن ومحدد
التعلمأسهلأصعب قليلاً

القاعدة:

  • Flexbox: للتخطيط الخطي (صف أو عمود).
  • Grid: للتخطيط الشبكي (صفوف وأعمدة).

Flexbox

Flexbox هو نظام تخطيط أحادي البعد.

الإعداد

.container {
  display: flex;
}

هذا كل شيء! الآن الأطفال داخل .container سيصطفون أفقياً.

الاتجاه (flex-direction)

.container {
  display: flex;
  flex-direction: row;      /* أفقي (افتراضي) */
  flex-direction: column;   /* عمودي */
  flex-direction: row-reverse;    /* أفقي معكوس */
  flex-direction: column-reverse; /* عمودي معكوس */
}

المحاذاة الأفقية (justify-content)

.container {
  display: flex;
  justify-content: flex-start;    /* البداية (افتراضي) */
  justify-content: flex-end;      /* النهاية */
  justify-content: center;        /* المنتصف */
  justify-content: space-between; /* توزيع متساوٍ */
  justify-content: space-around;  /* حول العناصر */
  justify-content: space-evenly;  /* متساوٍ تماماً */
}

المحاذاة العمودية (align-items)

.container {
  display: flex;
  align-items: stretch;      /* تمدد (افتراضي) */
  align-items: flex-start;   /* البداية */
  align-items: flex-end;     /* النهاية */
  align-items: center;       /* المنتصف */
  align-items: baseline;     /* خط الأساس */
}

الالتفاف (flex-wrap)

.container {
  display: flex;
  flex-wrap: nowrap;   /* بدون التفاف (افتراضي) */
  flex-wrap: wrap;     /* التفاف */
  flex-wrap: wrap-reverse; /* التفاف معكوس */
}

المسافة بين العناصر (gap)

.container {
  display: flex;
  gap: 20px;           /* مسافة موحدة */
  gap: 20px 40px;      /* عمودي أفقي */
}

توسيط عنصر تماماً

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

هذا الكود يُوسّط أي عنصر أفقياً وعمودياً — الطريقة الأسهل!

التحكم في العناصر

.item {
  flex-grow: 1;    /* النمو */
  flex-shrink: 1;  /* الانكماش */
  flex-basis: 200px; /* الحجم الأساسي */

  /* اختصار: */
  flex: 1;          /* grow=1, shrink=1, basis=0 */
  flex: 0 1 auto;   /* افتراضي */
  flex: 1 1 200px;  /* grow=1, shrink=1, basis=200px */
}

أمثلة Flexbox

1. شريط تنقل

nav {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 20px;
  background: #3b82f6;
  color: white;
}

2. بطاقات

.cards {
  display: flex;
  gap: 20px;
  flex-wrap: wrap;
}

.card {
  flex: 1 1 300px;
  background: white;
  padding: 20px;
  border-radius: 12px;
}

3. توسيط

.hero {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
  background: linear-gradient(135deg, #667eea, #764ba2);
}

CSS Grid

CSS Grid هو نظام تخطيط ثنائي البعد.

الإعداد

.container {
  display: grid;
}

تعريف الأعمدة (grid-template-columns)

.container {
  display: grid;
  grid-template-columns: 200px 200px 200px; /* 3 أعمدة */
  grid-template-columns: 1fr 1fr 1fr;       /* 3 أعمدة متساوية */
  grid-template-columns: repeat(3, 1fr);    /* نفس السابق */
  grid-template-columns: 1fr 2fr 1fr;       /* نسب مختلفة */
}

الوحدة fr: جزء من المساحة المتبقية.

تعريف الصفوف (grid-template-rows)

.container {
  display: grid;
  grid-template-rows: 100px 200px 100px;
  grid-template-rows: repeat(3, 1fr);
}

المسافات (gap)

.container {
  display: grid;
  gap: 20px;
  gap: 20px 40px; /* عمودي أفقي */
}

التخطيط بالمناطق (grid-template-areas)

.container {
  display: grid;
  grid-template-areas:
    "header header header"
    "sidebar main main"
    "footer footer footer";
  grid-template-columns: 200px 1fr 1fr;
  grid-template-rows: 80px 1fr 60px;
  min-height: 100vh;
}

.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }

النتيجة: تخطيط صفحة كامل بسهولة!

التوسيط في Grid

.container {
  display: grid;
  place-items: center;
  min-height: 100vh;
}

place-items: center = align-items + justify-items.

auto-fit و minmax

.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 20px;
}

الفائدة: شبكة تلقائية تتكيف مع حجم الشاشة!

جدول خصائص Flexbox

الخاصيةالوظيفة
display: flexتفعيل Flexbox
flex-directionالاتجاه
justify-contentمحاذاة أفقية
align-itemsمحاذاة عمودية
flex-wrapالالتفاف
gapالمسافة
flexحجم العنصر

جدول خصائص Grid

الخاصيةالوظيفة
display: gridتفعيل Grid
grid-template-columnsالأعمدة
grid-template-rowsالصفوف
gapالمسافة
grid-template-areasالمناطق
place-itemsمحاذاة
auto-fitتكيف تلقائي
minmax()حد أدنى وأقصى

أمثلة عملية

1. شريط تنقل (Flexbox)

<nav class="navbar">
  <div class="logo">شعاري</div>
  <ul class="links">
    <li><a href="/">الرئيسية</a></li>
    <li><a href="/about">من نحن</a></li>
    <li><a href="/contact">اتصل</a></li>
  </ul>
  <button>تسجيل الدخول</button>
</nav>
.navbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 20px 40px;
  background: #1e293b;
  color: white;
}

.links {
  display: flex;
  gap: 30px;
  list-style: none;
}

.links a {
  color: white;
  text-decoration: none;
}

2. شبكة منتجات (Grid)

<div class="products">
  <div class="product">منتج 1</div>
  <div class="product">منتج 2</div>
  <div class="product">منتج 3</div>
  <div class="product">منتج 4</div>
  <div class="product">منتج 5</div>
  <div class="product">منتج 6</div>
</div>
.products {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 20px;
  padding: 40px;
}

.product {
  background: white;
  padding: 20px;
  border-radius: 12px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}

3. تخطيط صفحة كامل (Grid)

<div class="layout">
  <header>الرأس</header>
  <aside>الشريط الجانبي</aside>
  <main>المحتوى الرئيسي</main>
  <footer>التذييل</footer>
</div>
.layout {
  display: grid;
  grid-template-areas:
    "header header"
    "sidebar main"
    "footer footer";
  grid-template-columns: 250px 1fr;
  grid-template-rows: 80px 1fr 60px;
  min-height: 100vh;
  gap: 20px;
  padding: 20px;
}

header { grid-area: header; background: #3b82f6; }
aside { grid-area: sidebar; background: #f3f4f6; }
main { grid-area: main; background: white; }
footer { grid-area: footer; background: #1e293b; color: white; }

4. توسيط عنصر

Flexbox:

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

Grid:

.container {
  display: grid;
  place-items: center;
  min-height: 100vh;
}

تمارين عملية

تمرين 1: صف أفقي

أنشئ 3 عناصر في صف أفقي.

الحل:

.container {
  display: flex;
  gap: 20px;
}

.item {
  flex: 1;
  padding: 20px;
  background: #3b82f6;
  color: white;
}

تمرين 2: توسيط

وسّط عنصراً في منتصف الشاشة.

الحل:

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

تمرين 3: شريط تنقل

أنشئ شريط تنقل: شعار يسار، روابط يمين.

الحل:

.navbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 20px;
  background: #3b82f6;
  color: white;
}

.links {
  display: flex;
  gap: 20px;
  list-style: none;
}

تمرين 4: شبكة 3 أعمدة

أنشئ شبكة من 3 أعمدة متساوية.

الحل:

.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}

تمرين 5: شبكة تلقائية

أنشئ شبكة تتكيف مع حجم الشاشة.

الحل:

.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 20px;
}

تمرين 6: بطاقة مع صورة ونص

أنشئ بطاقة: صورة يسار، نص يمين (أو العكس).

الحل:

.card {
  display: flex;
  gap: 16px;
  align-items: center;
  padding: 16px;
  background: white;
  border-radius: 12px;
}

.card img {
  width: 80px;
  height: 80px;
  border-radius: 50%;
  object-fit: cover;
}

تمرين 7: تخطيط صفحة

أنشئ تخطيط: header، sidebar، main، footer.

الحل:

.layout {
  display: grid;
  grid-template-areas:
    "header header"
    "sidebar main"
    "footer footer";
  grid-template-columns: 200px 1fr;
  grid-template-rows: 80px 1fr 60px;
  min-height: 100vh;
  gap: 20px;
}

header { grid-area: header; }
aside { grid-area: sidebar; }
main { grid-area: main; }
footer { grid-area: footer; }

تمرين 8: معرض صور

أنشئ معرضاً بشبكة تلقائية.

الحل:

.gallery {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 16px;
}

.gallery img {
  width: 100%;
  height: 200px;
  object-fit: cover;
  border-radius: 12px;
}

حل المشاكل الشائعة

🔴 المشكلة 1: العناصر لا تصطف

السبب: لم تُفعّل Flexbox.

الحل:

.container {
  display: flex;  /* ← ضروري */
}

🔴 المشكلة 2: gap لا يعمل

السبب: gap لا يعمل مع display: inline.

الحل: تأكد من display: flex أو display: grid.

🔴 المشكلة 3: الشبكة لا تتكيف

السبب: استخدام قيم ثابتة بدلاً من fr.

الحل:

/* ❌ */
grid-template-columns: 300px 300px 300px;

/* ✅ */
grid-template-columns: repeat(3, 1fr);

🔴 المشكلة 4: Overflow في Flexbox

السبب: المحتوى أكبر من الحاوية.

الحل:

.container {
  display: flex;
  flex-wrap: wrap;
}

جدول مقارنة سريعة

الحالةاستخدم
شريط تنقلFlexbox
بطاقات في صفFlexbox
توسيط عنصرFlexbox
تخطيط صفحةGrid
معرض صورGrid
شبكة منتجاتGrid

قائمة تحقق نهائية

المهمةالحالة
فهم Flexbox⬜
استخدام justify-content و align-items⬜
توسيط عنصر بـ Flexbox⬜
فهم CSS Grid⬜
grid-template-columns و areas⬜
auto-fit و minmax⬜
حل التمارين الثمانية⬜

ماذا بعد هذا المقال؟

الآن بعد أن أتقنت Flexbox و Grid، أنت جاهز للمقال الأخير:

  1. مشروع متكامل — موقع شخصي كامل.

الخلاصة

في هذا المقال، تعلمت:

  • ✅ Flexbox للتخطيط الخطي.
  • ✅ justify-content و align-items.
  • ✅ CSS Grid للتخطيط الشبكي.
  • ✅ grid-template-columns و grid-template-areas.
  • ✅ auto-fit و minmax.
  • ✅ توسيط عنصر (Flexbox و Grid).
  • ✅ حل 8 تمارين عملية.

تذكر: Flexbox و Grid هما أداتان قويتان. أتقنهما، وستتمكن من بناء أي تخطيط.

📚 مقالات ذات صلة

HTML & CSS

مشروع متكامل — موقع شخصي بـ HTML و CSS 2026

مشروع عملي شامل لبناء موقع شخصي متكامل بـ HTML و CSS — مع الأقسام، التصميم المتجاوب، والحركات

HTML & CSS

الألوان و Box Model في CSS — دليل شامل 2026

دليل عملي مفصل للألوان و Box Model في CSS — أنظمة الألوان، Padding، Margin، Border، مع تمارين وحلول

HTML & CSS

مقدمة في CSS — دليل شامل 2026

دليل عملي مفصل لمقدمة CSS — الربط، المحددات، الخصائص، الأولويات، مع تمارين وحلول