CSS: حاوية Grid CSS

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

1. خصائص حاوية Grid

(1) مرجع سريع

الخاصية القيم الغرض
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" مناطق شبكة مسماة

2. وحدة 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>
▶ جرّب الكود

3. 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>
▶ جرّب الكود

4. 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:


5. 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 لتخطيط مدونة كاملة (ترويسة، تنقل، محتوى رئيسي، شريط جانبي، تذييل).
Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%