يُمكننا وضع إعلانك هنا 🧡 ويُمكنك التواصل معنا عن طريق صفحة الفيس بوك
Flexbox شرح
- لو سألتني ما هو اهم درس في الCSS ؛ هقولك ومن غير تفكير ال flexbox - لو عاوز تبقى مُحترف في الCSS يبقى لازم تحترف خاصية ال flexbox - ال flexbox يعتمد في الأساس ان يوجد عنصر أب (parent element) وعناصر داخل هذا الأب (child element) وللتوضيع أكثر انظر المثال التالي:
- شرحنا خاصية الdisplay في في درس خاص به وإذا أردنا الاستفادة من مميزات ال flexbox فإننا نضع display: flex; للعنصر الاب ثم نستخدم باقيالاكواد التي بالأسفل.
⚠ وعندما نستخدم هذا الكود يجب ان تعرف ان هناك المحور الأفقي (X-axis) ← والمحور الرأسي (Y-axis) ↓ وسوف نلاحظ ان جميع العناصر الأطفال تم ترتيبهم افقياً على محور ال X؛ واهم سؤال في العالم هل العناصر سوف يتم ترتيبهم من اليمين الى اليسار ولا من اليسار الى اليمين؟ والاجابة هنا عميقة شوية 😂 لان بيتم ترتيب العناصر من بداية المحور الى نهاية المحور سؤال كمان معلش 😊 كيف يتم تحديد بداية ونهاية المحور الأفقي x-axis ←؟ ج/ على حسب ال dir وال dir اما dir="rtl" او dir="ltr" - اذا كان ال dir="rtl" معنى ذلك ان بداية المحور هي جهة اليمين - اذا كان ال dir="ltr" معنى ذلك ان بداية المحور هي جهة اليسار مثال على ذلك :
عرفنا فوق 👆 ان العناصر تلقائي بتكون على محور الX ولكن اذا اردنا تغيير ذلك واردنا ان يتم ترتيب العناصر على محور الY من اعلى الى اسفل نستخدم خاصية ال flex-direction وتكون قيمتها flex-direction: column;
⚠ ال flex-direction يُعبر عن اتجاه المحور
وهذه اهم قيم الflex-direction
flex-direction:
row;
- ترتب العناصر على محور الX من بداية المحور الى نهاية المحور - وهى القيمة الافتراضية
قلنا قبل كده 👆 ان العناصر الchild يتم ترتيبهم أفقي على محور الX ولكن سنواجه مشاكل عند عرض الموقع على الشاشات الصغيرة مثل الموبايل و المشاكل هي :
اختفاء أجزاء من العناصر الchild بسبب ان عرض هذه العناصر اكبر من عرض الشاشة
تَقلص او تصغير عرض العنصر الchild
ونحل المشاكل دي عن طريق خاصية ال flex-wrap: wrap; ما هي وظيفة ال flex-wrap: wrap; ؟ وظيفتها جعل العناصر الchild تنتقل الى السطر التالي في حالة ان لا يوجد مساحة كافيه لعرض العناصر الchild بحجمها الطبيعي
والقيمة الافتراضية هي flex-wrap: nowrap; وتعني عدم انتقال العناصر الى السطر التالي.
بما اننا سوف نستخدم ال flex-directionوال flex-wrap كثيرا فالرجالة صحاب الCSS 😂 عملوا لنا اختصار وهو flex-flow وتكون: - اول قيمة هي قيمة الflex-direction - والقيمة الثانية هي قيمة الflex-wrap
5justify-content: center;
يستخدم هذا الكود لمحاذاة العناصر الchild في المحور الرئيسي. مثال على ذلك: - إذا كان ال flex-direction: row; فانه سوف يتم محاذاة العناصر على محور الX - وإذا كان ال flex-direction: column; فانه سوف يتم محاذاة العناصر على محور الY
وهذه اهم قيم ال justify-content
justify-content:
center;
جعل العناصر في المنتصف على محور الX في حالة ال flex-direction: row;
الكود ده بالضبط عكس ال justify-content من حيث المحور لأنه يُستخدم لمحاذاة العناصر الchild في المحور الثانوي مثال على ذلك - إذا كان ال flex-direction: row; فانه سوف يتم محاذاة العناصر على على محور الY - وإذا كان ال flex-direction: column; فانه سوف يتم محاذاة العناصر على محور الX
وهذه اهم قيم ال align-content
align-content:
center;
جعل العناصر في المنتصف على محور الY في حالة ال flex-direction: row;
⚠ من الأخر يعنى لو عاوز العنصر يكون في المنتصف رأسيًا وأفقيًا نستخدم justify-content: center; و align-content: center;
B- الأكواد الخاصة بالعناصر التي بداخل العنصر الاب (child elements)
1flex-grow: 0;
2flex-shrink: 1;
3flex-basis: auto;
4flex: 0 1 auto;
5order: 0;
شرح الاكواد
1flex-grow: 0;
متى نستخدم خاصية ال flex-grow؟ تُستخدم هذه الخاصية عندما يكون عرض الcontainer اكبر من مجموع عرض العناصر الchild
- وبالتالي يوجد مساحة فارغة داخل الcontainer واذا اردنا العناصر الchild ان تتمدد (grow) حتى لا يصبح هناك مساحة فارغة داخل الcontainer فإننا نستخدم خاصية الflex-grow - والقيمة الافتراضية لل flex-growهي 0 ومعناها ان العنصر الchild لا يتمدد وعندما يكون ال flex-grow: 1; فمعنى ذلك اننا نسمح لهذا العنصر بالتمدد حتى يأخذ المساحة المتبقية من الcontainer
سؤال معلش يا صاحبي 😊 هل ينفع تكون قيمة ال flex-grow غير ال الصفر والواحد؟ ج/ الإجابة هتكون بالتفصيل في الفيديو يا صديقي 😊 عشان صعب إني اشرحها كتابة لازم عملي
2flex-shrink: 1;
متى نستخدم خاصية ال flex-shrink ؟ تُستخدم هذه الخاصية عندما يكون مجموع عرض العناصر الchild اكبر من عرض الcontainer ونستخدمها ليه اصلاً؟ نستخدمها عندما لا نريد من العنصر الchild ان ينكمش (shrink) لان العناصر الchild اذا كان حجمها كبير فإنها تتقلص تلقائياً
ليه معرفش عرضة؟ لان ببساطة مجموع عرض العناصر الchild يساوى 360وبالتالي اكبر من عرض الcontainer الذى عرضة 300px ولمنع حدوث الshrink للعناصر الchild نضع flex-shrink: 0;
⚠المُلخص 1- إذا كان قيمة ال flex-shrink تساوى 1 فمعنى ذلك اننا نسمح للعنصر بالتقلص (shrink) إذا كان عرض العناصر الchild اكبر من عرض الcontainer 2- وإذا كانت قيمة ال flex-shrink تساوى 0 فمعنى ذلك اننا لا نسمح للعنصر بالتقلص (shrink)
3flex-basis: auto;
خاصية الflex-basis هي التي تُحدد عرض او ارتفاع العنصر الchild ايواااا يعنى ال flex-basis بتحدد عرض العنصر ولا ارتفاع العنصر؟؟؟ 🤔 ج/ والله على حسب ال flex-direction - في حالة ان ال flex-direction: row; فإن ال flex-basis تُحدد عرض العنصر - في حالة ان ال flex-direction: column; فإن ال flex-basis تُحدد ارتفاع العنصر وقيمة الauto هي القيمة الافتراضية. - ويُمكن تحديد عرض العنصر عن طريق ال px او ال % - وانا اُفضل تحديد عرض العنصر عن طريق ال % من حجم الcontainer
والقيمة الإفتراضية هى flex-basis: auto; ومعني ذلك معنى ذلك ان العنصر في العرض او الطول الطبيعي له .
4flex: 0 1 auto;
هذا هو الكود المختصر لتحديد قيم ال flex-grow و flex-shrink و flex-basis بدلاً من كتابة كل كود منفصل والقيم الافتراضية هي : flex: 0 1 auto;
معنى كل قيمة
0 : معني ذلك اننا لا نسمح للعنصر بالامتداد (grow) اذا كانت هناك مساحة فارغة داخل الcontainer
1 : معني ذلك اننا نسمح للعنصر بالتقلص(shrink) اذا كان عرض العنصر اكبر من عرض الcontainer
Auto : معنى ذلك ان العنصر في العرض او الطول الطبيعي
5order: 0;
نستخدم هذا الكود لترتيب العناصر الchild والعنصر الذى يحتوى على قيمة اقل هذا هو العنصر الذى يكون في بداية الترتيب
- في حالة ان ال flex-direction: row; وأيضا ال dir="ltr" فإن الترتيب سوف يبدأ من اليسار الى اليمين
- في حالة ان ال flex-direction: row; وأيضا ال dir="rtl" فإن الترتيب سوف يبدأ من اليمين الى اليسار
- في حالة ان ال flex-direction: column; فإن الترتيب سون يبدأ من اعلى الى أسفل
1- عشان نطبق خاصية الflexbox فأننا نضع display: flex; داخل العنصر الأب (الcontainer) 2- بعض الأكواد خاصة بالعنصر الأب (الcontainer) والبعض الأخر خاص بالعناصر الchild (التي داخل الcontainer) 3- العناصر الflex يتم ترتيبهم على محور واحد فقط سواء المحور الأفقي او الرأسي وانت المسؤول عن تحديد المحور واهم حاجة في الليلة دي كلها انك تكون عارف فين بداية المحور ونهاية المحور. ودا اهم لينك تقدر تفهم منه ال flexbox بالتطبيق
من الأخر خالص يعني 😍 😍
انا المسئول انى اخليك تفهم كل كود من دول بيعمل ايه بالتفصيل وهتفهم مِنى وكل حاجة بس لما هتيجي تطبق مع نفسك هتلاقى الموضوع صعب جدا 😢
والحل 😍 إنك تتمرن كتييييير على ال flex-box قبل ما تعمل تطبيقات مع نفسك؛ يعني بردو انت هتعمل ايه؟؟ هتروح على اليوتيوب وتكتب flexbox examples وتبدأ بقا تطبق على ال flexbox بمزاج يا صاحبي؛ ودي قائمة بفيديوهات تطبيقية على ال flexbox flexbox examples
إذا كانت الإعلانات مزعجة بالنسبة لك، فيُمكنك التبرع ب50$ وسيتم إيقاف الإعلانات لمدة شهر لجميع زوار الموقع 🧡 ويُمكنك التواصل معنا عن طريق صفحة الفيس بوك