توقف عن إستخدام Margin مع Flexbox و CSS Grid

إذا كنت ترغب بإستخدام مسافات بين عناصر Flexbox أو CSS Grid وحتى بين Columns فعليك بالتوقف فورًا عن إستخدام Margin لفعل ذلك

دعنا نبدأ معك بالشرح العملي

لنفترض إنك لديك بالفعل كونتينر من نوع grid كما بالكود التالي:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Mohamed Portfolio</title>
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
    <div class="title">mohamedportfolio.com</div>
    <div class="grid">
      <div class="item">div1</div>
      <div class="item">div2</div>
      <div class="item">div3</div>
      <div class="item">div4</div>
    </div>
  </body>
</html>
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.title {
  background: #888;
  color: white;
  font-size: 40px;
  text-transform: uppercase;
  text-align: center;
  line-height: 2;
  padding: 1rem;
  margin-bottom: 4rem;
}

.grid {
  margin: 0 auto;
  width: 600px;
  border: 2px solid #000;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-auto-rows: 100px;
  /* gap: 1rem; */
}
  
.item {
  background: red;
  color: white;
  font-size: 20px;
  /* margin: 1rem; */
  display: flex; /* لإستخدام خواص الفليكسبوكس التي بالأسفل */
  align-items: center; /* جعل النصوص بوسط المربعات أفقيًا */
  justify-content: center; /* جعل النصوص بوسط المربعات عموديًا */
}

شكل الكونتينر قبل أي مسافات

ستجد أن العناصر لا يوجد بينها أي فواصل إفتراضيًا وتراها كما لو كانت قطعة واحدة ، لعلاج هذه النقطة كان البعض يستخدم المارجين ، وستجده في الكود وقد تم تحويله إلى تعليق فقط بداخل item سيليكتور “margin: 1rem;”

الأن وبما إنك تستخدم الفليكسبوكس أو الجريد Flexbox or CSS Grid سيكون بإمكانك أن تستخدم خاصية Gap.

بما إنك ترغب بوضع مسافة بين المربعات التي تقع في صف واحد فإننا سنتخيل أن كل مربع يوجد في عمود منفصل داخل هذا الكونتينر ، سيكون كل ما عليك فعله هو إضافة column-gap بالحجم الذي ترغبه، وليكن مثلًا 1rem ليصبح الكود كالتالي

.grid {
  margin: 0 auto;
  width: 600px;
  border: 2px solid #000;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-auto-rows: 100px;
  column-gap: 1rem; /* وضع مسافة موحدة بين الأعمدة */
}

النتيحة

إستخدام column-gap لإضافة مسافة بين الأعمدة
إستخدام column-gap لإضافة مسافة بين الأعمدة

أما لو كنت ترغب بوضع المسافة بين الصفوف بدلًا من الأعمدة فإستبدل: column-gap: 1rem بـ row-gap: 1rem

وبالطبع لن يظهر ذلك إلا إذا كان هناك أكثر من صف بالفعل، فدعني أقوم بتعديل الكود وعرض النتيجة عليك

وضع مسافة بين الصفوف بإستخدام row-gap
وضع مسافة بين الصفوف بإستخدام row-gap

جيد، الأن توجد مسافة بين الصفوف، ولكن مهلًا.. أين ذهبت المسافة بين الأعمدة؟

لإستخدام كلاهما يمكنك إستخدام row-gap و column gap معًا بنفس الوقت، ولكن الأفضل ولتوفير عنائك هناك كود مختصر shorthand code لكلاهما، فيمكنك فقط إستخدام gap كما بالصورة

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

قد يقول البعض أن إستخدام الكود المختصر غير مجدي في حالة ما كنت ترغب بوضع حجم مختلف للمسافة بين الأعمدة عنه في الصفوف ، ولكن في الحقيقة بنفس الكود المختصر يمكنك إستخدام هذه الميزة أيضًا ولن تكون في حاجة لإستخدام كلا الخاصيتين. فقط إستخدم مثلًا: gap: 1rem 2rem; وقم بتخصيص الحجم كما ترغب.

الأن وقد إنتهيت من وضع المسافات مع ال CSS Grid بإستخدام خاصية gap بدلًا من ال margin ، صدق أو لا تصدق، لا يوجد أي فرق بين ما فعلته للجريد عنه في الفليكسبوكس

دعني فقط أقوم بتحضير الكود ليصبح الكونتينر فليكسبوكس

لاحظ إني قمت بحساب عرض كل عنصر بإستخدام خاصية calc التي سنتحدث عنها لاحقًا، وذلك من خلال قسمة طول الكونتينر كامل بنسبة 100% على عدد العناصر في الصف وهو 4 عناصر، وإستغنيت غن خاصية الكونتينر الخاصة بالجريد مثل grid-template-column

كما إني إستخدمت الطول للعنصر نفسه وجعلت height: 100px بدلًا من إستخدام grid-auto-rows: 100px

الأن دعنا نقوم فقط بإستخدام ال column-gap ونرى النتيجة

إستخدام مسافة بين عناصر flexbox بإستخدام column-gap
إستخدام مسافة بين عناصر flexbox بإستخدام column-gap

نفس النتيجة، ونفس الإستخدام العادي وحتى لو كان بعدة صفوف وأعمدة أيضًا يمكنك إستخدام gap فقط

وخاصية ال gap لا تنطبق على flexbox و grid فقط ، بل يمكنك أن تقوم بإستخدامها على عناصر الأعمدة columns أيضًا.. إليك مثال إستخدمنا فيه خاصية column-count لوضع 4 أعمدة بداخل الكونتينر.

إستخدام gap لوضع مسافة بين الأعمدة مع column-count
إستخدام gap لوضع مسافة بين الأعمدة مع column-count

في هذا المثال إستخدامنا gap ويمكننا أضًا إستخدام column-gap لإعطاء نفس النتيجة، ولكن النتيجة دائمًا يتم تطبيقها على الأعمدة فقط وليس الصفوف، وهي مفيدة إذا أردت إلغاءء المسافات أيضًا بين الأعمدة بإستخدم: column-gap: 0;

نتمنى أن يكون درس اليوم قد نال إعجابكم .. أطيب أمنياتنا للجميع بالتوفيق

Mohamed

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

This Post Has One Comment

  1. Ahmed Abdallah

    شكرا ليك عالتوضيح وفي انتظار كورس CSS Grid يا غالي

Comments are closed.