يُمكننا وضع إعلانك هنا 🧡 ويُمكنك التواصل معنا عن طريق صفحة الفيس بوك
شرح CSS Grid
من الاخر كده عشان نسهل الدنيا 😍
لو عاوز تنقل عنصر أقصى اليمين او أقصى اليسار استخدم الfloat
لو عاوز العناصر تكون جمب بعض وفى حالة الشاشات الصغيرة مثل الموبايل تُصبح تحت بعض استخدم الflexbox
لو عاوز تعمل تخطيط كامل للصفحة بتاعتك زي الصورة دي 👇 استخدم ال CSS grid حتى أصلا اسمه Grid Layout و Layout معناها تخطيط او تصميم زي الي في الصورة كدة
لو تفتكر في ال flexbox قلنا ان العناصر في الأساس تعتمد على ان يوجد عنصر اب (parent element) وعناصر داخل هذا الأب (child element) ونفس الكلام في ال CSS grid يوجد عنصر اب وعناصر داخل هذا الاب وللتوضيع أكثر انظر المثال التالي 👇
لما تقسم الموقع بتاعك بال CSS grid ف انت بتعمل خطوتين أساسيتين:
1 يتم تقسيم المساحة الى صفوف واعمدة وهمية (غير مرئية) كما هو موضح بالصورة 👇
2 يتم وضع العناصر داخل هذه الصفوف والاعمدة كما في الصورة 👇
شرح الاكواد
أولاً بالنسبة للعنصر الاب (parent elements)
1display: grid;
- شرحنا خاصية الdisplay في في درس خاص به وإذا أردنا الاستفادة من مميزات ال CSS grid فإننا نضع display: grid; للعنصر الاب ثم نستخدم باقي الاكواد التي بالأسفل.
⚠ وعندما نستخدم هذا الكود فيُمكن ان نتحكم في العناصر رأسياً و افقيا في نفس الوقت؛ على عكس الflexbox الذى يُمكننا فقط من التحكم في العناصر اما رأسياً فقط او افقياً فقط.
2grid-template-columns: 100px 30% 1fr;
وظيفة هذا الكود:
تحديد عدد الاعمدة الوهمية (في هذا الكود 3 أعمدة)
تحديد عرض كل عمود (في هذه الحالة عرض الأول 100px وعرض الثاني 30% من عرض العنصر الاب والعمود الثالث يأخذ باقي المساحة الفارغة) كما هو موضح بالصورة 👇
⚠ الfr اختصار fraction وتعني النسبة نسبه ايه؟ ج/ نسبة المساحة المتبقية مثال علي ذلك: grid-template-columns: 25% 25% 25% 25%; في هذه الحالة يتم تقسيم المساحة الى 4 أعمدة وعرض كل عمود 25% من عرض ال container وايضاً هو هو نفس الكود لو كتبته بالطريقة دي grid-template-columns: 1fr 1fr 1fr 1fr; وتعني تقسيم المساحة الي اربع اعمدة متساوية في العرض مثال علي ذلك اضغط هنا
3grid-template-rows: 100px 110px 120px;
وظيفة هذا الكود:
تحديد عدد الصفوف الوهمية (في هذه الحالة 3 صفوف)
تحديد ارتفاع كل صف (في هذا الكود ارتفاع الصف الأول 100px وارتفاع الصف الثاني 110 px وارتفاع الصف الثالث 120px) كما هو موضح بالصورة 👇
grid-template-rows: 100px 100px 100px 100px; في هذه الحالة يتم تقسيم المساحة الى أربع صفوف وارتفاع كل صف 100px ويُمكن كتابه هذا الكود عن طريق خاصية ال repeat( , ) كالتالي: grid-template-rows: repeat(4, 100px); الشرح:
repeat(ارتفاع الصف, عدد الصفوف); repeat(عرض العمود, عدد الاعمدة);
4gap: المسافة بين الأعمدة المسافة بين الصفوف;
مثال علي ذلك gap: 10px 50px; معنى ذلك ان: - المسافة بين الصفوف 10px - المسافة بين الاعمدة 50px
معلومة ملهاش لازمة 🙃 زمان في بداية ال CSS grid الكود ده كان اسمة grid-gap: وبعد كده بقا اسمه gap: بس كده 🤓
5justify-content: center;
وشرحنا الكود دا في درس ال flexbox؛ اكيد فاكر طبعاً 😊 وظيفة هذا الكود: التحكم في الحركة الافقية (علي محور الx) لجميع العناصر الأطفال (child elements) ولكن - نستبدل ال flex-start ب start - نستبدل ال flex-end ب end
وشرحنا الكود دا في درس ال flexbox؛ اكيد فاكر طبعاً 😊 وظيفة هذا الكود: التحكم في الحركة الرأسية (علي محور الy) لجميع العناصر الأطفال (child elements) ولكن - نستبدل ال flex-start ب start - نستبدل ال flex-end ب end
حتى هذه اللحظة احنا المفروض قسمنا المساحة الى صفوف وأعمدة وهمية (غير مرئية) وحددنا ارتفاع وعرض الخلايا داخل ال grid كما في الصورة 👇
1grid-column: نهاية عرض العنصر / بداية عرض العنصر ;
يعني ايه بقا الكود ده يا صاحبي !! ؟ زي ما انت عارف اننا حتى هذه اللحظة عملنا صفوف وأعمدة وهمية وانا عاوز احط العناصر الchild داخل هذه الصفوف و الاعمدة. كيفية وضع العناصر الchild داخل هذه الصفوف و الاعمدة؟ ج/ عن طريق تحديد بداية ونهاية خط العمود وبداية ونهاية خط الصف. س/ كيفية تحديد بداية ونهاية خط العمود لعنصر معين؟ ج/ عن طريق ارقام الخطوط (الدوائر الحمراء) التي في الأعلى.
انت: طب قول مثال عشان مش فاهم 😊 انا : ثواني بس اشرح الكود التالي واقولك علي مثال 😊
س/ كيفية تحديد بداية ونهاية خط الصف لعنصر معين؟ عن طريق الكود التالي:
2grid-row: نهاية ارتفاع العنصر / بداية ارتفاع العنصر ;
كيف يعني؟ عن طريق ارقام الخطوط (الدوائر الحمراء) التي على اليمين
مثال علي ذلك
إذا أردنا وضع العنصر header في اول خليتين كما هو موضح بالصورة 👇 ماذا نفعل؟
لكي تضع الheader داخل اول خليتين (في الصف الأول): أولا يجب تحديد بداية ونهاية الخط الرأسي ثانياً تحديد بداية ونهاية الخط الأفقي.
أولاً تحديد بداية ونهاية الخط الرأسي عن طريق ارقام الخطوط (الدوائر الحمراء) التي في الأعلى. بداية الخط الرأسي: 1 نهاية الخط الرأسي: 3 ويكون الكود كالتالي:
grid-column:1 / 3;
ثانياً تحديد بداية ونهاية الخط الخط الأفقي عن طريق ارقام الخطوط (الدوائر الحمراء) التي على اليمين. بداية الخط الأفقي: 1 نهاية الخط الأفقي: 2 ويكون الكود كالتالي:
grid-row: 1 / 2
Chapter 2
grid-area
- الطريقة الثانية لعمل ال grid والتي اعتبرها أسهل من الطريقة الاولي (من وجهة نظري) وهي عن طريق ال grid area وأيضا يوجد عنصر اب وعناصر child داخل هذا الاب - وفي هذه الطريقة لا يتم تقسيم الصفحة عن طريق الخطوط الوهمية ولكن عن طريق إعطاء كل عنصر اسم خاص به. وهذه 👇 هي الاكواد المُستخدمة في هذه الطريقة
وكما تلاحظ انه يوجد عدد كبير من الاكواد المُستخدمة في الطريقة الاولي والاختلاف هو:
بالنسبة للعنصر الاب
1 حذف الاكواد التالية grid-template-columns: auto; grid-template-rows: auto; واستبدالها ب grid-template-areas:". . .";
بالنسبة للعناصر ال child
1 حذف الاكواد التالية grid-column: نهاية عرض العنصر / بداية عرض العنصر ; grid-row: نهاية ارتفاع العنصر / بداية ارتفاع العنصر ; واستبدالها ب grid-area: اسم خاص للعنصر;
شرح الاكواد الجديدة
كما قلنا ان في هذه الطريقة لا يتم تقسيم الصفحة عن طريق الخطوط الوهمية ولكن عن طريق إعطاء كل عنصر اسم خاص به. مثال علي ذلك لنفترض اننا نريد تقسيم الصفحة الي 3 أعمدة و3 صفوف كما هو موضح بالصورة 👇 وبالتالي يوجد لدينا 9 خلايا.
فنستخدم الكود التالي: grid-template-areas: ". . ." ". . ."; معني هذا الكود ان لدينا صفين و3 أعمدة والنقط تُشير الي ان هذا الجزء فارغ لا يوجد به أي محتويات وبعد ذلك نُعطي لكل عنصر اسم مُميز خاص به عن طريق الكود التالي: grid-area: اسم خاص للعنصر; مثال علي ذلك: إذا أردنا تقسيم الصفحة كما بالشكل التالي 👇
فإننا نلاحظ تقسيم الصفحة الي 4 أعمدة و 3 صفوف وبالتالي لدينا 12 خلية ونحن نريد وضع العناصر التالية (header, main, sidebar, footer) كما هو موضح داخل الصورة 👆 ونلاحظ انه يوجد جزء فارغ في الصورة بين ال main وال sidebar
ونقوم بذلك عن طريق خطوتين: 1 تسميه كل عنصر ب اسم خاص به عن طريق الكود التالي: grid-area: اسم خاص للعنصر; كما هو موضح بالأكواد 👇
إذا كانت الإعلانات مزعجة بالنسبة لك، فيُمكنك التبرع ب50$ وسيتم إيقاف الإعلانات لمدة شهر لجميع زوار الموقع 🧡 ويُمكنك التواصل معنا عن طريق صفحة الفيس بوك