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:
auto-fill: يُنشئ أكبر عدد ممكن من الأعمدة التي تناسب، حتى لو كانت فارغةauto-fit: مثل auto-fill، لكن يطوي الأعمدة الفارغة
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. لتغيير التخطيط، فقط اضبط قالب النص — لا حاجة لإعادة موضع الأبناء.📖 ملخص
- Grid هو نظام تخطيط ثنائي البُعد قوي
- حدد بنية الشبكة بـ
grid-template-columnsوgrid-template-rows - استخدم وحدة
frلتوزيع المساحة المتناسب - أنشئ شبكات مرنة بـ
repeat()وminmax() gapتُعيّن مسافة؛auto-fill/auto-fitمعminmaxتُنشئ شبكات متجاوبة حقاً
📝 تمارين
أساسي
- أنشئ حاوية شبكة 3×3، كل خلية 100px×100px، فجوة 10px.
- استخدم وحدة
1frلتخطيط "عمودين" (يسار 1fr، يمين 3fr).
متوسط
- أنشئ شبكة بطاقات متكيفة بـ
repeat(auto-fill, minmax(150px, 1fr))— حجم المتصفح لرؤية تغييرات الأعمدة. - أنشئ تخطيط "ثلاثة صفوف وعمودين كلاسيكي": ترويسة (تمتد لعمودين)، قائمة يسار، محتوى يمين، تذييل (تمتد لعمودين).
تحدٍ
- أنشئ معرض صور متجاوب: سطح المكتب 4 أعمدة، جهاز لوحي 2 أعمدة، محمول عمود واحد، باستخدام
auto-fill+minmax. - استخدم
grid-template-areasلتخطيط مدونة كاملة (ترويسة، تنقل، محتوى رئيسي، شريط جانبي، تذييل).