دليل CSS Grid الشامل: شرح عملي مع ورقة غش لتصميم واجهات متجاوبة

دقائق القراءة: 7

مقدمة إلى CSS Grid ولماذا تحتاجها

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

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

واجهة توضيحية لمقال تعليمي شامل حول CSS Grid وتصميم الواجهات المتجاوبة

ما هي CSS Grid؟

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

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

رسم يوضح مفهوم CSS Grid كهيكل لتنظيم عناصر صفحات الويب

وفيما يلي مثالان على شكل التخطيط عند استخدام الشبكة على الشاشات الكبيرة والصغيرة:

عرض سطح المكتب

مثال لتخطيط موقع باستخدام CSS Grid في عرض سطح المكتب

عرض الهاتف المحمول

مثال لتخطيط متجاوب باستخدام CSS Grid على شاشة الهاتف المحمول

بنية CSS Grid وكيف تعمل

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

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

مخطط يشرح بنية CSS Grid وتوزيع العناصر داخل الصفوف والأعمدة

مخطط خصائص CSS Grid

تنقسم خصائص CSS Grid إلى قسمين رئيسيين:

  • خصائص الحاوية أو العنصر الأب Parent Properties.
  • خصائص العناصر الداخلية أو الأبناء Child Properties.

وهذا التقسيم مهم جدًا، لأن بعض الخصائص تُكتب داخل الحاوية مثل .container، بينما خصائص أخرى تُطبّق على العناصر الداخلية مثل .box-1 و.box-2.

مخطط شامل يوضح جميع خصائص CSS Grid للحاوية والعناصر الداخليةتوضيح للخصائص المختصرة في CSS Grid ضمن مخطط الخصائصصورة توضيحية إضافية لخصائص CSS Grid واستخداماتها

إعداد المشروع قبل البدء

قبل تطبيق الأمثلة، يُفضّل أن تكون لديك معرفة أساسية بكل من HTML وCSS، بالإضافة إلى استخدام محرر مثل VS Code.

  1. أنشئ مجلدًا جديدًا باسم Project-1.
  2. افتح المشروع في VS Code.
  3. أنشئ ملفين: index.html وstyle.css.
  4. فعّل إضافة Live Server لتجربة النتائج مباشرة.

ويمكنك أيضًا استخدام CodePen إذا كنت تفضّل بيئة سريعة للتجربة.

خطوات إعداد مشروع CSS Grid باستخدام VS Code وملفات HTML وCSSبداية تنفيذ مشروع CSS Grid عمليًا داخل بيئة التطوير

الهيكل الأساسي للمثال العملي

كود HTML

ابدأ بإنشاء ثلاثة عناصر داخل الحاوية الرئيسية:

<div class="container">
  <div class="box-1">A</div>
  <div class="box-2">B</div>
  <div class="box-3">C</div>
</div>

إعادة ضبط الأنماط الافتراضية

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

تنسيق عنصر body

body {
  font-family: sans-serif;
  font-size: 40px;
  width: 100%;
  min-height: 100vh;
}

تنسيق الصناديق

[class^="box-"] {
  background-color: skyblue;
  display: grid;
  place-items: center;
}

في المثال السابق استخدمنا الخاصية place-items لمحاذاة محتوى كل صندوق في المنتصف أفقيًا وعموديًا.

تفعيل الشبكة وإضافة مسافات

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

فهم العلاقة بين الحاوية والعناصر الداخلية

حتى تعمل CSS Grid بالشكل الصحيح، يجب التمييز بين نوعين من الخصائص:

  • خصائص تُكتب داخل الحاوية الرئيسية مثل .container.
  • خصائص تُكتب داخل العناصر الفرعية مثل .box-*.

بمعنى آخر، الحاوية هي التي تنشئ الشبكة، بينما العناصر الداخلية تحدد كيف تتموضع داخل هذه الشبكة.

تنبيه يوضح أهمية فهم خصائص CSS Grid قبل البدء بالتطبيقرسم يوضح الفرق بين خصائص العنصر الأب وخصائص العناصر الأبناء في CSS Grid

خصائص الحاوية في CSS Grid

عنوان قسم خصائص الحاوية في CSS Grid مع مخطط توضيحي

الخاصية grid-template-columns

تُستخدم هذه الخاصية لتحديد عدد الأعمدة وعرض كل عمود. يمكنك إدخال قيم ثابتة مثل px، أو استخدام auto، أو الاعتماد على الوحدة المرنة fr.

مثال بصري يوضح تأثير grid-template-columns في توزيع الأعمدةتوضيح إضافي لاستخدام grid-template-columns بعروض مختلفة للأعمدة

.container {
  display: grid;
  gap: 20px;
  grid-template-columns: 200px auto 100px;
}

عند استخدام auto، يأخذ العمود المساحة المتبقية. أما الوحدة fr فهي مثالية لتقسيم المساحة بالتساوي بين الأعمدة.

الخاصية grid-template-rows

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

مثال يشرح استخدام grid-template-rows لتحديد ارتفاع الصفوفمخطط بصري لتأثير grid-template-rows على تخطيط العناصر

.container {
  display: grid;
  gap: 20px;
  height: 100vh;
  grid-template-rows: 200px auto 100px;
}

الخاصية grid-template-areas

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

مخطط قياسي يوضح توزيع مناطق CSS Grid داخل تخطيط مرئيمخطط blueprint يشرح استخدام grid-template-areas في CSS Grid

.container {
  display: grid;
  gap: 20px;
  height: 100vh;
  grid-template-areas:
    "A A A A A A A A A A A A"
    "B B B B B B B B B B C C"
    "B B B B B B B B B B C C";
}

ثم نربط كل عنصر باسمه:

.box-1 { grid-area: A; }
.box-2 { grid-area: B; }
.box-3 { grid-area: C; }

الخاصيتان column-gap وrow-gap

تُستخدمان لإضافة مسافات بين الأعمدة والصفوف على التوالي.

صورة توضح تأثير column-gap في ترك مسافات بين أعمدة CSS Grid

.container {
  display: grid;
  height: 100vh;
  grid-template-columns: 100px 100px 100px;
  column-gap: 50px;
}

توضيح تأثير row-gap في ترك مسافات بين صفوف CSS Grid

.container {
  display: grid;
  height: 100vh;
  grid-template-rows: 100px 100px 100px;
  row-gap: 50px;
}

الخاصية justify-items

تتحكم في محاذاة العناصر داخل خلايا الشبكة أفقيًا على المحور X.

مخطط يوضح قيم justify-items في CSS Gridمثال تطبيقي لاصطفاف العناصر أفقيًا باستخدام justify-items

أضف عنصرًا رابعًا:

<div class="container">
  <div class="box-1">A</div>
  <div class="box-2">B</div>
  <div class="box-3">C</div>
  <div class="box-4">D</div>
</div>
.container {
  display: grid;
  gap: 50px;
  height: 100vh;
  grid-template-rows: 200px 200px;
  grid-template-columns: 200px 200px;
  justify-items: end;
}

الخاصية align-items

تؤدي الوظيفة نفسها تقريبًا، ولكن على المحور العمودي Y.

توضيح قيم align-items لمحاذاة العناصر عموديًا داخل CSS Grid

.container {
  display: grid;
  gap: 50px;
  height: 100vh;
  grid-template-rows: 200px 200px;
  grid-template-columns: 200px 200px;
  align-items: center;
}

الخاصية justify-content

تتحكم في تموضع الشبكة كاملة داخل الحاوية أفقيًا.

مخطط يشرح justify-content في CSS Gridمثال عملي لتحريك كامل الشبكة أفقيًا باستخدام justify-content

.container {
  display: grid;
  gap: 50px;
  height: 100vh;
  grid-template-rows: 200px 200px;
  grid-template-columns: 200px 200px;
  justify-content: center;
}

الخاصية align-content

تتحكم في تموضع الشبكة كاملة عموديًا داخل الحاوية.

توضيح align-content في CSS Grid مع قيم المحاذاة العموديةمثال يوضح كيفية تموضع كامل الشبكة عموديًا باستخدام align-content

.container {
  display: grid;
  gap: 50px;
  height: 100vh;
  grid-template-rows: 200px 200px;
  grid-template-columns: 200px 200px;
  align-content: center;
}

صورة استراحة وسط الشرح في درس CSS Grid

خصائص العناصر الداخلية في CSS Grid

عنوان قسم خصائص العناصر الداخلية في CSS Grid

الآن ننتقل إلى الخصائص التي تطبَّق على العناصر نفسها داخل الشبكة، وهي مفيدة جدًا عند الحاجة إلى تغيير حجم عنصر معيّن أو نقله إلى موقع محدد.

مقياس الشبكة وفهم نقاط البداية والنهاية

لفهم خصائص مثل grid-column وgrid-row، عليك أولًا استيعاب فكرة خطوط الشبكة Grid Lines. كل خلية تبدأ من خط وتنتهي عند خط آخر، ويمكنك استخدام الأرقام أو الكلمة المفتاحية span لتحديد الامتداد.

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

أنشئ أربعة عناصر لتجربة الخصائص التالية:

<div class="container">
  <div class="box-1">A</div>
  <div class="box-2">B</div>
  <div class="box-3">C</div>
  <div class="box-4">D</div>
</div>

ولتسهيل بناء الشبكة، يمكن استخدام الدالة repeat():

grid-template-columns: repeat(5, 1fr);

وهذا يعادل كتابة:

grid-template-columns: 1fr 1fr 1fr 1fr 1fr;

الوحدة fr تعني جزءًا نسبيًا من المساحة المتاحة، وهي ممتازة عند الرغبة في تقسيم العرض أو الارتفاع بالتساوي.

الخاصية grid-column

تُستخدم هذه الخاصية لتمديد العنصر عبر أكثر من عمود. وهي اختصار للخاصيتين grid-column-start وgrid-column-end.

.container {
  display: grid;
  gap: 20px;
  height: 100vh;
  grid-template-columns: repeat(12, 1fr);
  grid-template-rows: repeat(12, 1fr);
}

شبكة مكونة من 12 عمودًا و12 صفًا باستخدام CSS Grid

القيمة الافتراضية لعنصر واحد تكون عادة:

grid-column-start: 1;
grid-column-end: 2;

/* الصيغة المختصرة */
grid-column: 1 / 2;

ويمكن كتابتها أيضًا باستخدام span:

grid-column: span 1;

إذا أردت أن يمتد العنصر الأول عبر مساحة أكبر:

.box-1 {
  grid-column: 1 / 10;
}

نتيجة تمديد عنصر عبر عدة أعمدة باستخدام grid-column

كما يمكنك استخدام الصيغة الأبسط:

.box-1 {
  grid-column: span 9;
}

ملاحظة توضيحية حول طريقة حساب امتداد grid-column في CSS Grid

الخاصية grid-row

هذه الخاصية تؤدي الدور نفسه، لكن على مستوى الصفوف بدل الأعمدة.

.box-1 {
  grid-row: 1 / 11;
}

والصيغة البديلة باستخدام span هي:

.box-1 {
  grid-row: span 10;
}

نتيجة دمج عدة صفوف لعنصر واحد باستخدام grid-row

الخاصية grid-area

تعمل هذه الخاصية مع grid-template-areas، حيث يتم أولًا تعريف مناطق التخطيط داخل الحاوية، ثم إسناد اسم المنطقة لكل عنصر داخلي.

مخطط 12x12 يوضح توزيع المناطق داخل CSS Gridرسم يوضح أسماء المناطق المستخدمة داخل grid-template-areas

.container {
  display: grid;
  gap: 20px;
  height: 100vh;
  grid-template-areas:
    "A A A A A A A A A A A A"
    "B B B B B B B B B B C C"
    "B B B B B B B B B B C C";
}

توضيح إسناد أسماء المناطق للعناصر الداخلية باستخدام grid-area

.box-1 { grid-area: A; }
.box-2 { grid-area: B; }
.box-3 { grid-area: C; }

الخاصية justify-self

تُستخدم لمحاذاة عنصر واحد فقط أفقيًا داخل خليته.

توضيح قيم justify-self لمحاذاة عنصر واحد داخل CSS Grid

.container {
  display: grid;
  gap: 25px;
  height: 100vh;
  grid-template-rows: 1fr 1fr;
  grid-template-columns: 1fr 1fr;
}

.box-1 {
  justify-self: start;
}

الخاصية align-self

تُستخدم لمحاذاة عنصر واحد عموديًا داخل خليته.

توضيح قيم align-self لمحاذاة عنصر واحد عموديًا في CSS Grid

.container {
  display: grid;
  gap: 25px;
  height: 100vh;
  grid-template-rows: 1fr 1fr;
  grid-template-columns: 1fr 1fr;
}

.box-1 {
  align-self: start;
}

الخصائص المختصرة في CSS Grid

مخطط يوضح الخصائص المختصرة في CSS Grid

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

place-content

اختصار للخاصيتين align-content وjustify-content.

مثال يوضح الخاصية المختصرة place-content في CSS Grid

align-content: center;
justify-content: end;

place-content: center / end;

place-items

اختصار للخاصيتين align-items وjustify-items.

مثال يوضح استخدام place-items كخاصية مختصرة في CSS Grid

align-items: end;
justify-items: center;

place-items: end / center;

place-self

اختصار للخاصيتين align-self وjustify-self.

شرح place-self لمحاذاة عنصر واحد باستخدام خاصية مختصرة في CSS Grid

align-self: start;
justify-self: end;

place-self: start / end;

grid-template

اختصار للخاصيتين grid-template-rows وgrid-template-columns.

مثال يوضح اختصار grid-template في CSS Grid

grid-template-rows: 100px 100px;
grid-template-columns: 200px 200px;

grid-template: 100px 100px / 200px 200px;

gap وgrid-gap

كلتاهما تؤديان الوظيفة نفسها، وتُستخدمان كاختصار للخاصيتين row-gap وcolumn-gap.

توضيح الخاصية gap كاختصار للمسافات في CSS Grid

row-gap: 20px;
column-gap: 30px;

gap: 20px 30px;

ورقة غش سريعة لأهم خصائص CSS Grid

الخاصية الاستخدام
display: grid تفعيل نظام الشبكة على الحاوية
grid-template-columns تحديد عدد الأعمدة وأحجامها
grid-template-rows تحديد عدد الصفوف وارتفاعاتها
grid-template-areas إنشاء مخطط مرئي للمناطق داخل الشبكة
gap إضافة مسافات بين الصفوف والأعمدة
justify-items محاذاة العناصر داخل الخلايا أفقيًا
align-items محاذاة العناصر داخل الخلايا عموديًا
justify-content محاذاة الشبكة كاملة أفقيًا
align-content محاذاة الشبكة كاملة عموديًا
grid-column تمديد العنصر عبر عدة أعمدة
grid-row تمديد العنصر عبر عدة صفوف
justify-self محاذاة عنصر واحد أفقيًا
align-self محاذاة عنصر واحد عموديًا

نصائح عملية لاستخدام CSS Grid باحتراف

  • استخدم fr عندما تريد توزيع المساحات بشكل مرن ومتساوٍ.
  • اعتمد على grid-template-areas إذا كان التخطيط معقدًا وتريد كودًا أسهل في القراءة.
  • لا تُكثر من القيم الثابتة مثل px إلا عند الحاجة الدقيقة.
  • ادمج CSS Grid مع Media Queries للحصول على تجاوب أفضل.
  • استخدم الخصائص المختصرة مثل place-items وgap لتقليل طول الكود.

الخلاصة التقنية

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *