حاوية Grid CSS

Grid CSS هو نظام تخطيط ثنائي البُعد قوي يتيح لك التحكم في الصفوف والأعمدة في وقت واحد.

خصائص حاوية Grid

مرجع سريع

الخاصية القيم الغرض
display: grid إنشاء حاوية شبكة
grid-template-columns 100px 1fr 2fr، repeat(3, 1fr) تعريفات الأعمدة
grid-template-rows 100px auto، repeat(3, 100px) تعريفات الصفوف
gap 10px، 10px 20px فجوة بين العناصر
grid-template-areas "header header" "main aside" مناطق شبكة مسماة

وحدة fr

وحدة fr توزع المساحة المتبقية بشكل متناسب:

مثال

HTML
<style>
.container {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr; /* نسبة 1:2:1 */
  gap: 10px;
  background: #f5f5f5;
  padding: 10px;
}
.item {
  background: #3498db;
  color: white;
  padding: 20px;
  text-align: center;
}
</style>
<div class="container">
  <div class="item">1fr</div>
  <div class="item">2fr (ضعف العرض)</div>
  <div class="item">1fr</div>
</div>
▶ جرّب الكود

repeat()

دالة repeat() تُقلل التكرار:

مثال

HTML
<style>
.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr); /* نفس: 1fr 1fr 1fr */
  gap: 10px;
  background: #f5f5f5;
  padding: 10px;
}
.item {
  background: #e74c3c;
  color: white;
  padding: 20px;
  text-align: center;
}
</style>
<div class="container">
  <div class="item">عمود 1</div>
  <div class="item">عمود 2</div>
  <div class="item">عمود 3</div>
</div>
▶ جرّب الكود

minmax() + auto-fill/auto-fit

تُنشئ شبكات متجاوبة تُعدّل عدد الأعمدة تلقائياً:

مثال

HTML
<style>
.grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 15px;
  background: #f5f5f5;
  padding: 15px;
}
.item {
  background: #2ecc71;
  color: white;
  padding: 20px;
  text-align: center;
  border-radius: 4px;
}
</style>
<div class="grid">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
</div>
▶ جرّب الكود

auto-fill مقابل auto-fit:

grid-template-areas

حدد التخطيط بمناطق مسمى:

مثال

HTML
<style>
.layout {
  display: grid;
  grid-template-areas:
    "header header header"
    "sidebar main aside"
    "footer footer footer";
  grid-template-columns: 200px 1fr 200px;
  grid-template-rows: 60px 1fr 40px;
  gap: 10px;
  min-height: 100vh;
}
.header { grid-area: header; background: #2c3e50; color: white; }
.sidebar { grid-area: sidebar; background: #34495e; color: white; }
.main { grid-area: main; background: #ecf0f1; }
.aside { grid-area: aside; background: #34495e; color: white; }
.footer { grid-area: footer; background: #2c3e50; color: white; }
.layout > * { padding: 20px; display: flex; align-items: center; justify-content: center; }
</style>
<div class="layout">
  <header class="header">ترويسة</header>
  <aside class="sidebar">شريط جانبي</aside>
  <main class="main">المحتوى الرئيسي</main>
  <aside class="aside">جانبي</aside>
  <footer class="footer">تذييل</footer>
</div>
▶ جرّب الكود

❓ أسئلة شائعة

س كيف أختار بين Grid و Flexbox؟
ج أحادي البُعد (صف أو عمود واحد) يستخدم Flexbox، ثنائي البُعد (تحكم متزامن في صف وعمود) يستخدم Grid. معظم الصفحات تستخدم كليهما: Grid لهيكل الصفحة العام، Flexbox للترتيبات المحلية. استخدامهما معاً في صفحة واحدة طبيعي تماماً.
س ما الفرق بين وحدات fr والنسب المئوية؟
ج `fr` توزع المساحة المتبقية، النسب المئوية توزع العرض الكلي. مع الفجوة، `fr` تطرح الفجوة تلقائياً قبل حساب النسب، النسب المئوية لا تفعل ذلك. `1fr 1fr 1fr` مع فجوة لا تزال أثلاثاً مثالية، بينما `33.33% 33.33% 33.33%` تفيض.
س كيف أستخدم grid-template-areas؟
ج حدد التخطيط بمناطق مسمى: `grid-template-areas: "header header" "sidebar main" "footer footer";` ثم اسناد الأبناء بـ `grid-area: header`. لتغيير التخطيط، فقط اضبط قالب النص — لا حاجة لإعادة موضع الأبناء.

📖 ملخص

📝 تمارين

أساسي

  1. أنشئ حاوية شبكة 3×3، كل خلية 100px×100px، فجوة 10px.
  2. استخدم وحدة 1fr لتخطيط "عمودين" (يسار 1fr، يمين 3fr).

متوسط

  1. أنشئ شبكة بطاقات متكيفة بـ repeat(auto-fill, minmax(150px, 1fr)) — حجم المتصفح لرؤية تغييرات الأعمدة.
  2. أنشئ تخطيط "ثلاثة صفوف وعمودين كلاسيكي": ترويسة (تمتد لعمودين)، قائمة يسار، محتوى يمين، تذييل (تمتد لعمودين).

تحدٍ

  1. أنشئ معرض صور متجاوب: سطح المكتب 4 أعمدة، جهاز لوحي 2 أعمدة، محمول عمود واحد، باستخدام auto-fill + minmax.
  2. استخدم grid-template-areas لتخطيط مدونة كاملة (ترويسة، تنقل، محتوى رئيسي، شريط جانبي، تذييل).
100%