ToolHub
View All Posts

CSS Flexbox مقابل Grid: متى تستخدم كل تخطيط

CSS Flexbox و CSS Grid هما أقوى نظامي تخطيط في CSS الحديث. على الرغم من أنهما يمكن أن ينتجا نتائج متشابهة أحيانًا، إلا أنهما أدوات مختلفة جوهريًا مصممة لمشكلات مختلفة. اختيار التخطيط المناسب لكل حالة يجعل CSS الخاص بك أنظف وأكثر قابلية للصيانة وأكثر قابلية للتنبؤ. يقدم هذا الدليل مقارنة مفصلة وأمثلة عملية على الكود لتتمكن من اتخاذ قرارات التخطيط بثقة.

ما هو CSS Flexbox؟

تخطيط الصندوق المرن في CSS، المعروف باسم Flexbox، هو نموذج تخطيط أحادي البعد. يتفوق في توزيع المساحة على طول محور واحد (صف أفقي أو عمود رأسي). يجعل Flexbox العناصر داخل الحاوية قادرة على التمدد والنمو والانكماش والمحاذاة الذاتية بناءً على المساحة المتاحة.

صُمم Flexbox لحل مشكلات التخطيط الشائعة التي كانت صعبة السمعة في CSS التقليدي: توسيط العناصر رأسيًا، وتوزيع المساحة بالتساوي بين العناصر الشقيقة، وإعادة ترتيب المحتوى دون تغيير HTML. قبل Flexbox، اعتمد المطورون على العوامات وحيل inline-block وتخطيطات الجداول لتحقيق هذه التأثيرات.

مفاهيم Flexbox الأساسية

مثال Flexbox: شريط التنقل

.navbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0 24px;
  height: 64px;
}

.navbar__logo {
  flex-shrink: 0;
}

.navbar__links {
  display: flex;
  gap: 16px;
  list-style: none;
}

يستخدم شريط التنقل هذا Flexbox مع justify-content: space-between لدفع الشعار إلى اليسار والروابط إلى اليمين. تتم محاذاة العناصر رأسيًا باستخدام align-items: center. هذا تخطيط كلاسيكي أحادي البعد حيث يكون Flexbox هو الخيار الطبيعي.

ما هو CSS Grid؟

تخطيط CSS Grid هو نظام تخطيط ثنائي البعد. يتعامل مع الصفوف والأعمدة في وقت واحد، مما يمنحك تحكمًا دقيقًا في موضع وحجم العناصر داخل هيكل شبكي. يتيح لك Grid تعريف مسارات ومناطق وقواعد وضع صريحة، مما ينشئ تخطيطات معقدة بأقل قدر من الكود.

صُمم Grid لتخطيطات مستوى الصفحة وهياكل المكونات المعقدة حيث تحتاج إلى التحكم في كلا البعدين. يقدم مفاهيم مثل مناطق الشبكة المسماة و auto-fill و auto-fit وأحجام الصفوف والأعمدة الصريحة التي تجعل التخطيطات المستحيلة سابقًا مباشرة.

مفاهيم Grid الأساسية

مثال Grid: تخطيط الصفحة

.page {
  display: grid;
  grid-template-columns: 250px 1fr;
  grid-template-rows: 64px 1fr 48px;
  grid-template-areas:
    "header  header"
    "sidebar content"
    "footer  footer";
  min-height: 100vh;
}

.page__header  { grid-area: header; }
.page__sidebar { grid-area: sidebar; }
.page__content { grid-area: content; }
.page__footer  { grid-area: footer; }

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

Flexbox مقابل Grid: مقارنة جنبًا إلى جنب

الميزةFlexboxGrid
البعدأحادي البعد (صف أو عمود)ثنائي البعد (صفوف وأعمدة)
مدفوع بالمحتوىنعم، العناصر تحدد التخطيطلا، يُعرَّف هيكل التخطيط أولاً
المحاذاةالمحور الرئيسي + المحور المتقاطعمحور الكتلة + المحور السطري
دعم الفجوةنعم (خاصية gap)نعم (خاصية gap)
وضع العناصرتسلسلي (ترتيب المصدر)صريح (أي موضع شبكي)
التداخلغير مدعوم مباشرةمدعوم عبر وضع الشبكة
التجاوبباستخدام flex-wrapباستخدام auto-fit/auto-fill
أفضل استخدامالتنقل، أشرطة الأدوات، محتوى البطاقاتتخطيط الصفحة، المعارض، لوحات المعلومات

متى تستخدم Flexbox

عندما تكون مشكلة التخطيط لديك أحادية البعد في المقام الأول، فإن Flexbox هو الخيار الصحيح. إليك أكثر السيناريوهات شيوعًا:

1. أشرطة التنقل والقوائم

التنقل هو في الأساس صف (أو عمود) من العناصر. يوزع Flexbox المساحة بين العناصر، ويتعامل مع الفائض بأناقة، ويجعل المحاذاة الرأسية للعناصر بسيطة. تستبدل خاصية gap التباعد القديم القائم على margin بين عناصر القائمة.

2. توسيط المحتوى

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

حل التوسيط الثلاثي هذا هو أحد أكثر أنماط Flexbox المحبوبة. قبل Flexbox، كان التوسيط الرأسي يتطلب حيلًا تشمل table-cell أو التموضع المطلق مع transform أو حيل line-height. Flexbox يجعله بلا مجهود.

3. محاذاة محتوى البطاقات

عندما تحتوي البطاقات على عنوان ووصف وزر إجراء، وتريد أن يبقى الزر دائمًا في الأسفل بغض النظر عن طول المحتوى، يتعامل Flexbox مع هذا بأناقة:

.card {
  display: flex;
  flex-direction: column;
}

.card__content {
  flex: 1;
}

flex: 1 في منطقة المحتوى يجعلها تنمو لتملأ المساحة المتاحة، دافعًا الزر إلى أسفل البطاقة. يعمل هذا بغض النظر عن كمية النص في البطاقة.

4. تخطيط صفوف النماذج

عناصر النموذج التي تحتاج إلى ترتيب في صف واحد وقابلة لتغيير الحجم، مثل حقل بحث وزر إرسال، مثالية لـ Flexbox. يمكن لحقل الإدخال أن ينمو ليملأ المساحة المتاحة بينما يحتفظ الزر بحجمه الطبيعي.

5. كائن الوسائط

نمط كائن الوسائط الكلاسيكي (صورة على اليسار، نص على اليمين) هو توافق طبيعي مع Flexbox. تحتفظ الصورة بعرضها الطبيعي بينما يملأ النص المساحة المتبقية.

متى تستخدم CSS Grid

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

1. تخطيط الصفحة الكاملة

التخطيط على مستوى الصفحة مع رأس وشريط جانبي ومنطقة محتوى وتذييل هو حالة استخدام Grid المثالية. المناطق الشبكية المسماة تجعل التخطيط قابلاً للقراءة والصيانة:

.layout {
  display: grid;
  grid-template-columns: 1fr;
  grid-template-areas:
    "header"
    "content"
    "sidebar"
    "footer";
}

@media (min-width: 768px) {
  .layout {
    grid-template-columns: 1fr 300px;
    grid-template-areas:
      "header  header"
      "content sidebar"
      "footer  footer";
  }
}

لاحظ كيف تعيد نقاط التوقف المتجاوبة تعريف قالب الشبكة ببساطة. تبقى العناصر مخصصة لمناطق الشبكة الخاصة بها، ويعيد التخطيط هيكلة نفسه تلقائيًا. هذا أنظف بكثير من إعادة ترتيب حاويات Flexbox عند نقاط التوقف المختلفة.

2. شبكات البطاقات والمعارض

.gallery {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 24px;
}

ينشئ هذا التصريح الوحيد شبكة بطاقات متجاوبة تضبط عدد الأعمدة تلقائيًا بناءً على العرض المتاح. كل بطاقة بعرض 280px على الأقل لكنها تنمو لتملأ المساحة المتبقية. لا حاجة لاستعلامات الوسائط. نمط auto-fill مع minmax هذا هو أحد أقوى تقنيات Grid.

3. تخطيط لوحات المعلومات

لوحة المعلومات التي تحتوي على أدوات بأحجام مختلفة تمتد عبر صفوف وأعمدة متعددة مثالية لـ Grid. يمكنك وضع العناصر في مواضع شبكية محددة وتمديدها عبر المسارات:

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

.widget--wide { grid-column: span 2; }
.widget--tall { grid-row: span 2; }
.widget--hero { grid-column: span 2; grid-row: span 2; }

4. تخطيطات المجلات والتحرير

عندما يحتاج المحتوى إلى التداخل أو وضعه في مواضع غير متسلسلة، فإن Grid هو نظام تخطيط CSS الوحيد الذي يدعم هذا بشكل أصلي. يمكنك وضع العناصر على خطوط شبكية محددة، مما ينشئ تركيبات متداخلة بدون تموضع مطلق.

5. تخطيط الكأس المقدسة

تخطيط "الكأس المقدسة" الشهير (رأس، جسم ثلاثي الأعمدة مع أشرطة جانبية بعرض ثابت ومركز مرن، تذييل) سهل للغاية مع Grid:

.holy-grail {
  display: grid;
  grid-template-columns: 200px 1fr 200px;
  grid-template-rows: auto 1fr auto;
  min-height: 100vh;
}

دمج Flexbox و Grid

النهج الأكثر فعالية ليس الاختيار بين Flexbox و Grid، بل دمجهما استراتيجيًا. نمط شائع وموصى به هو استخدام Grid للتخطيط الكلي (هيكل الصفحة) و Flexbox للتخطيط الجزئي (داخل المكونات).

مثال: لوحة معلومات باستخدام Grid و Flexbox

/* Grid for the page structure */
.dashboard {
  display: grid;
  grid-template-columns: 250px 1fr;
  grid-template-rows: 64px 1fr;
  grid-template-areas:
    "sidebar header"
    "sidebar main";
  min-height: 100vh;
}

/* Flexbox for the header content */
.dashboard__header {
  grid-area: header;
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0 24px;
}

/* Flexbox for sidebar menu items */
.dashboard__nav {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

في هذا المثال، يعرّف Grid هيكل الصفحة العام، بينما يتعامل Flexbox مع المحاذاة داخل كل قسم. هذا الفصل بين الاهتمامات يحافظ على CSS منظمًا وهادفًا.

أنماط التصميم المتجاوب

نمط Flexbox المتجاوب: الالتفاف

.tag-list {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.tag {
  flex-shrink: 0;
}

التفاف Flexbox مثالي لقوائم الوسوم ومجموعات الرقائق وأي مجموعة من العناصر تتدفق بشكل طبيعي إلى السطر التالي عندما تنفد المساحة الأفقية. يحتفظ كل عنصر بحجمه الطبيعي.

نمط Grid المتجاوب: الملء التلقائي

.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 24px;
}

ينشئ Grid auto-fill شبكة متجاوبة حقًا بدون أي استعلامات وسائط. يضبط عدد الأعمدة تلقائيًا بناءً على عرض الحاوية، بعرض 300px على الأقل لكل عمود. هذا أقوى من التفاف Flexbox لأن العناصر تتمدد لتملأ الصف بالتساوي.

نمط Grid المتجاوب: التكديس

.layout {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
}

@media (min-width: 768px) {
  .layout {
    grid-template-columns: 1fr 1fr;
  }
}

@media (min-width: 1024px) {
  .layout {
    grid-template-columns: 1fr 1fr 1fr;
  }
}

الأخطاء الشائعة وكيفية تجنبها

دعم المتصفحات

يتمتع كل من Flexbox و Grid بدعم ممتاز من المتصفحات في عام 2026:

المتصفحدعم Flexboxدعم Grid
Chromeمدعوم بالكامل (منذ v29)مدعوم بالكامل (منذ v57)
Firefoxمدعوم بالكامل (منذ v28)مدعوم بالكامل (منذ v52)
Safariمدعوم بالكامل (منذ v9)مدعوم بالكامل (منذ v10.1)
Edgeمدعوم بالكامل (منذ v12)مدعوم بالكامل (منذ v16)
iOS Safariمدعوم بالكامل (منذ v9)مدعوم بالكامل (منذ v10.3)
Samsung Internetمدعوم بالكامل (منذ v1.5)مدعوم بالكامل (منذ v6.2)

كلتا التقنيتين مدعومتان بالكامل في جميع المتصفحات الرئيسية منذ سنوات. لا يوجد سبب لتجنب أي منهما في تطوير الويب الحديث بسبب مشكلات التوافق. خاصية gap في Flexbox كانت آخر ميزة رئيسية تحصل على دعم عالمي، وهي متاحة في جميع المتصفحات منذ عام 2021.

دليل القرار السريع

عند بدء تخطيط جديد، اسأل نفسك هذه الأسئلة:

قاعدة عملية: Flexbox للمكونات، Grid للصفحات. إذا كان بإمكانك رسم خط في اتجاه واحد ويكون منطقيًا، استخدم Flexbox. إذا كنت بحاجة إلى خطوط في اتجاهين، استخدم Grid.

تعمل مع CSS؟ جرب أدوات ضغط وتنسيق CSS المجانية الخاصة بنا لتحسين أوراق الأنماط الخاصة بك.

ضغط CSSتنسيق CSS

الأسئلة الشائعة

هل يجب استخدام Flexbox أم Grid؟

Flexbox للتخطيطات أحادية البعد (صف أو عمود) حيث تحتاج العناصر إلى التمدد بمرونة وتوزيع المساحة ديناميكيًا. Grid للتخطيطات ثنائية البعد حيث تحتاج إلى التحكم في كل من الصفوف والأعمدة. تستفيد العديد من التخطيطات من الجمع بينهما: Grid لهيكل الصفحة العام، و Flexbox لمحاذاة مستوى المكونات.

هل يمكن استخدام Flexbox و Grid معًا؟

نعم، يمكن لـ Flexbox و Grid العمل معًا بشكل مثالي، وهذا هو النهج الموصى به. Grid للتخطيط الكلي (مناطق الصفحة، شبكات البطاقات)، و Flexbox للتخطيط الجزئي (عناصر التنقل، مجموعات الأزرار، محاذاة محتوى البطاقات). إنهما متكاملان وليسا متنافسين.

هل CSS Grid أفضل من Flexbox؟

لا يوجد أفضل بشكل عام. Grid يتفوق في التخطيطات ثنائية البعد مع تحكم دقيق في الصفوف والأعمدة، بينما Flexbox متفوق في توزيع المحتوى أحادي البعد والمحاذاة. Grid يمنحك تحكمًا أوضح في الوضع؛ Flexbox أكثر مرونة للمحتوى الديناميكي. اختر بناءً على احتياجات تخطيطك.

هل CSS Grid مدعوم في جميع المتصفحات؟

CSS Grid مدعوم في جميع المتصفحات الحديثة، بما في ذلك Chrome و Firefox و Safari و Edge. الدعم عالمي منذ عام 2017. Internet Explorer 11 لديه تنفيذ جزئي باستخدام بادئة -ms-، لكن Microsoft لم تعد تدعم IE. لتطوير الويب الحديث، Grid لديه دعم كامل من المتصفحات.

متى يجب تجنب استخدام CSS Grid؟

تجنب Grid للتخطيطات البسيطة أحادية الاتجاه حيث يكون Flexbox أبسط وأكثر ملاءمة، مثل توسيط عنصر واحد أو محاذاة عناصر التنقل في صف أو توزيع المساحة بين عدد قليل من العناصر الشقيقة. تجنب Grid أيضًا عندما يجب أن يحدد حجم المحتوى التخطيط بدلاً من أن يحدد هيكل الشبكة وضع المحتوى.

ToolHub's collection of 300+ free online tools including CSS grid generators, flexbox tools, and more — no sign-up required.