CSSGrid
- ما هو Grid
- البدء باستخدام Grid
- الفرق بين Flex و Grid
- الخاصية grid-template-columns
- الخاصية grid-template-rows
- الخصائص grid-column-start grid-column-end grid-column
- الخصائص grid-row-start grid-row-end grid-row
- الخاصية grid-auto-flow
- الخاصية grid-auto-columns
- الخاصية grid-auto-rows
- الخصائص grid-row-gap grid-column-gap gap
- الخاصية grid-template-areas
- الخاصية grid-template
ما هو Grid
Grid هو مجموعة من الخصائص التي يمكنك استخدامها لتحديد مواقع و أحجام العناصر بشكل مرن جداً مهما كان مخطط التصميم معقد.
في هذا الدرس سنتعرف على جميع الخصائص التالية و القيم التي يمكن إعطائها لها:
column-gap gap grid grid-auto-columns grid-auto-flow grid-auto-rows grid-column grid-column-end grid-column-gap grid-column-start grid-gap grid-row grid-row-end grid-row-gap grid-row-start grid-template grid-template-areas grid-template-columns grid-template-rows row-gap
البدء باستخدام Grid
لتفهم كيف تستطيع ترتيب العناصر بأسلوب Grid سنفترض بدايةً أنه عندنا العناصر التالية.
أول شيء يجب فعله للبدء باستخدام أسلوب Grid هو وضع العناصر بداخل عنصر آخر ليكون بمثابة حاوية لها كالتالي و يمكنك إعطاء كل واحد منهم كلاس ليكون الوصول إليهم أسهل عند تحديد مواقعهم.
الآن يجب إعطاء العنصر الذي يمثّل الحاوية الخاصية display:grid; كما يلي.
ملاحظة: العناصر ستظهر تحت بعضها البعض و سبب ذلك أننا لم نحدد مواقعها.
بعد فعل الخطوات السابقة يمكنك استخدام باقي خصائص Grid لتحديد مواقع العناصر الموجودة في الحاوية بالشكل و الطريقة التي تريدها كما سترى في الأمثلة القادمة.
الفرق بين Flex و Grid
Flex يعتبر خيار أسهل و أنسب إن كان المراد عرض العناصر وراء بعضها البعض أفقياً أو عمودياً، و هو يغنيك تماماً عن استخدام الخاصية float.
Grid هو الخيار الأفضل إذا كان المراد عرض العناصر في مواقع و أحجام محددة أفقياً و عمودياً، فهو فعلياً يتيح لك بناء جدول <table> يمكن التحكم بمواقع عناصره بشكل مرن أكثر.
يمكنك استخدام Flex و Grid جنباً إلى جنب لترتيب عناصر الصفحة بالشكل الذي تريده.
الخاصية grid-template-columns
يمكنك استخدام هذه الخاصية لتحديد عدد العناصر الأقصى في كل سطر.
في المثال التالي قمنا باستخدام الخاصية grid-template-columns لتقسيم الحاوية أفقياً، و قد قمنا بإعطاءها 3 قيم auto مما يعني أن عدد العناصر الأقصى على كل سطر هو ثلاثة و أحجام الأعمدة يتم تحديدها بشكل تلقائي على قدر حاجتها.
مثال
النتيجة
الخاصية grid-template-rows
يمكنك استخدام هذه الخاصية لتحديد طول العناصر الأقصى في كل سطر.
في المثال التالي قمنا باستخدام الخاصية grid-template-rows لتحديد كم سيكون طول كل سطر منهم.
ملاحظة: هنا كل قيمة يتم وضعها يتم إعتبارها الطول المراد وضعه للسطر بحسب ترتيبه.
هنا السطرين الأول و الثالث أعطيناهما القيمة auto مما يعني أن طولهما سيتحدد بشكل تلقائي نسبةً لأطول عنصر موضوع فيهم، أم السطر الثاني فجعلنا حجمه 100 بكسل.
مثال
النتيجة
الخصائص grid-column-start grid-column-end grid-column
الهدف الأساسي لهذه الخصائص هو جعل العنصر يظهر على أكثر من عمود في ذات السطر، و فيما يلي فائدة كل واحدة منها:
- الخاصية grid-column-start يمكنك استخدامها لتحديد من أي عمود سيبدأ العنصر.
- الخاصية grid-column-end يمكنك استخدامها لتحديد قبل أي عمود سيتوقف العنصر.
- الخاصية grid-column هي اختصار للخاصيتين grid-column-start و grid-column-end.
في المثال التالي قمنا باستخدام الخاصية grid-column-start لتحديد أن العنصر سيبدأ من العمود الأول، و الخاصية grid-column-end لتحديد أنه سيتوقف قبل العنصر الثالث.
المثال الأول
النتيجة
في المثال التالي قمنا باستخدام الخاصية grid-column لتحديد أن العنصر سيبدأ من العمود الأول و سيتوقف قبل العنصر الثالث و بالتالي سنحصل على نفس نتيجة المثال السابق.
المثال الثاني
النتيجة
في المثال التالي قمنا باستخدام الكلمة المفتاحية span مع الخاصية grid-column لتحديد أن العنصر سيبدأ من العمود الأول و سيتمدد على عمودين و بالتالي سنحصل على نفس نتيجة المثال السابق أيضاً.
المثال الثالث
النتيجة
الخصائص grid-row-start grid-row-end grid-row
الهدف الأساسي لهذه الخصائص هو جعل العنصر يظهر على أكثر من سطر في ذات السطر، و فيما يلي فائدة كل واحدة منها:
- الخاصية grid-row-start يمكنك استخدامها لتحديد من أي سطر سيبدأ العنصر.
- الخاصية grid-row-end يمكنك استخدامها لتحديد قبل أي سطر سيتوقف العنصر.
- الخاصية grid-row هي اختصار للخاصيتين grid-row-start و grid-row-end.
في المثال التالي قمنا باستخدام الخاصية grid-row-start لتحديد أن العنصر سيبدأ من السطر الأول، و الخاصية grid-row-end لتحديد أنه سيتوقف قبل السطر الثالث.
المثال الأول
النتيجة
في المثال التالي قمنا باستخدام الخاصية grid-column لتحديد أن العنصر سيبدأ من السطر الأول و سيتوقف قبل السطر الثالث و بالتالي سنحصل على نفس نتيجة المثال السابق.
المثال الثاني
النتيجة
في المثال التالي قمنا باستخدام الكلمة المفتاحية span مع الخاصية grid-row لتحديد أن العنصر سيبدأ من السطر الأول و سيتمدد على سطرين و بالتالي سنحصل على نفس نتيجة المثال السابق أيضاً.
المثال الثالث
النتيجة
يمكنك إظهار العنصر على أكثر من سطر و أكثر من عمود في ذات الوقت.
إظهار العنصر على أكثر من عمود و سطر
في المثال التالي قمنا باستخدام الخاصية grid-row لجعل العنصر يبدأ من السطر الأول إلى السطر الثاني و قمنا باستخدام الخاصية grid-column لجعله يظهر من العمود الأول إلى العمود الثاني.
مثال
النتيجة
الخاصية grid-auto-flow
إذا لم تكن سترتب العناصر في مواقع محددة في الحاوية، يمكنك استخدام الخاصية grid-auto-flow لجعل العناصر تصطف أفقياً أو عمودياً في المساحات المتوفرة. فيما يلي القيم التي يمكنك إعطاءها لها.
القيمة | إستخدامها |
---|---|
row | لجعل العناصر تصطف وراء بعضها البعض على ذات السطر إن كان هناك مساحات متوفرة، و هذه هي القيمة الإفتراضية. |
column | لجعل العناصر تصطف تحت بعضها البعض مع محاولة ملئ العمود قبل الإنتقال للعمود التالي. |
dense | لجعل العناصر تصطف في أي مكان متاح إن كانت أحجامها متفاوتة و بدون الإهتمام للترتيب الذي تم وضعها فيه. |
row dense | لجعل العناصر تصطف وراء بعضها البعض على ذات السطر في أي مكان متاح إن كانت أحجامها متفاوتة و بدون الإهتمام للترتيب الذي تم وضعها فيه. |
column dense | لجعل العناصر تصطف وراء بعضها البعض على ذات العمود في أي مكان متاح إن كانت أحجامها متفاوتة و بدون الإهتمام للترتيب الذي تم وضعها فيه. |
في المثال التالي قمنا بتقسيم الحاوية لثلاث أعمدة و جعلنا طول العناصر في كل عمود يتم تحديده بشكل تلقائي.
العنصرين الأول و الثاني جعلناهما يظهران على عمودين.
الخاصية grid-auto-flow أضفناها للحاوية و قمنا بإعطائها القيمة row لكي يتم صف العناصر في السطر المتاح حالياً، الأمر الذي سيجعل العنصر الثاني يظهر على السطر التالي لأنه لا يوجد مساحة له في السطر الأول، و العنصر الثالث سيظهر بجانب العنصر الثاني لأنه يوجد مساحة كافية لعرضه.
المثال الأول
النتيجة
في المثال التالي قمنا بإعطاء الخاصية grid-auto-flow القيمة column لكي يتم صف العناصر في العمود المتاح حالياً، الأمر الذي سيجعل العنصر الخامس يظهر في أعلى العمود الثالث حيث المساحة متوفرة له.
المثال الثاني
النتيجة
في المثال التالي قمنا بإعطاء الخاصية grid-auto-flow القيمة dense لكي يتم صف العناصر في أي مكان متوفر.
المثال الثالث
النتيجة
في المثال التالي قمنا بإعطاء الخاصية grid-auto-flow القيمة row dense لكي يتم صف العناصر في أي مكان متوفر على ذات السطر.
ملاحظة: العناصر ستترتب كما في المثال السابق لأنه في الحالتين العناصر سيتم صفها سطراً سطراً.
المثال الرابع
النتيجة
في المثال التالي قمنا بإعطاء الخاصية grid-auto-flow القيمة column dense لكي يتم صف العناصر في أي مكان متوفر و بشكل عمودي.
المثال الخامس
النتيجة
الخاصية grid-auto-columns
يمكنك استخدام الخاصية grid-auto-columns لتحديد عرض الأعمدة. فيما يلي القيم التي يمكنك إعطاءها لها.
القيمة | إستخدامها |
---|---|
auto | لجعل عرض الأعمدة يتحدد بشكل تلقائي. |
1fr | لجعل عرض الأعمدة متساوية. |
min-content | لجعل عرض الأعمدة يتحدد نسبةً للعنصر الذي يحتاج أقل عرض. |
max-content | لجعل عرض الأعمدة يتحدد نسبةً للعنصر الذي يحتاج أكبر عرض. |
minmax() | دالة تستخدم لتحديد أصغر و أكبر عرض ممكن للأعمدة. بين أقواسها نضع القيمة الأصغر، يليها فاصلة، يليها القيمة الأكبر. |
fit-content() | دالة تستخدم لتحديد العرض الأقصى الذي يمكن أن تصل إليه الأعمدة. بين أقواسها نضع قيمة واحدة تمثل العرض الأقصى الذي يمكن أن يصل له كل عمود. ملاحظة: هنا عرض الأعمدة يتحدد بشكل تلقائي نسبةً لما تحتويه العناصر و لكنه إذا وصل للحجم الأقصى فإنه لا يتجاوزه. |
في المثال التالي قمنا بإعطاء الخاصية grid-auto-columns القيمة auto لجعل عرض الأعمدة يتحدد بشكل تلقائي.
ملاحظة: عرض الأعمدة قد يظهر لك بشكل متساوي في حال كان حجمها صغير جداً نسبةً للمساحة المتوفرة في الحاوية.
المثال الأول
النتيجة
في المثال التالي قمنا بإعطاء الخاصية grid-auto-columns القيمة min-content لجعل أحجام الأعمدة تتحدد بشكل تلقائي نسبةً لأصغر عنصر موجود في العمود.
المثال الثاني
النتيجة
في المثال التالي قمنا بإعطاء الخاصية grid-auto-columns القيمة 1fr لجعل أحجام الأعمدة تنقسم بشكل متساوي.
المثال الثالث
النتيجة
في المثال التالي قمنا بإعطاء الخاصية grid-auto-columns الدالة minmax() كقيمة لتحديد أصغر و أكبر حجم مراد للأعمدة.
المثال الرابع
النتيجة
الخاصية grid-auto-rows
يمكنك استخدام الخاصية grid-auto-rows لتحديد طول الأسطر. فيما يلي القيم التي يمكنك إعطاءها لها.
القيمة | إستخدامها |
---|---|
auto | لجعل طول الأسطر يتحدد بشكل تلقائي. |
1fr | لجعل طول الأسطر متساوي. |
min-content | لجعل طول الأسطر يتحدد نسبةً للعنصر الذي يحتاج أقل طول. |
max-content | لجعل طول الأسطر يتحدد نسبةً للعنصر الذي يحتاج أكبر طول. |
minmax() | دالة تستخدم لتحديد أصغر و أكبر عرض ممكن للأسطر. بين أقواسها نضع القيمة الأصغر، يليها فاصلة، يليها القيمة الأكبر. |
fit-content() | دالة تستخدم لتحديد العرض الأقصى الذي يمكن أن تصل إليه الأسطر. بين أقواسها نضع قيمة واحدة تمثل الطول الأقصى الذي يمكن أن يصل له كل سطر. ملاحظة: هنا طول الأسطر يتحدد بشكل تلقائي نسبةً لما تحتويه العناصر و لكنه إذا وصل للحجم الأقصى فإنه لا يتجاوزه. |
في المثال التالي قمنا بإعطاء الخاصية grid-auto-rows القيمة auto لجعل طول الأسطر يتحدد بشكل تلقائي.
ملاحظة: طول الأسطر قد يظهر لك بشكل متساوي في حال كانت تحتاج سطر واحد فقط للظهور كما في المثال التالي، و بالطبع يمكنك إضافة المزيد من الكلام بداخل أي عنصر حتى تلاحظ كيف سيتغير طول السطر بأكمله.
المثال الأول
النتيجة
في المثال التالي قمنا بإعطاء الخاصية grid-auto-rows القيمة min-content لجعل أحجام الأعمدة تتحدد بشكل تلقائي نسبةً لأصغر عنصر موجود في العمود.
المثال الثاني
النتيجة
في المثال التالي قمنا بإعطاء الخاصية grid-auto-rows القيمة 1fr لجعل أحجام الأعمدة تنقسم بشكل متساوي.
المثال الثالث
النتيجة
(Extra Height Affect All)
في المثال التالي قمنا بإعطاء الخاصية grid-auto-rows الدالة minmax() كقيمة لتحديد أصغر و أكبر حجم مراد للأعمدة.
المثال الرابع
النتيجة
الخصائص grid-row-gap grid-column-gap gap
الهدف الأساسي لهذه الخصائص هو إضافة هامش بين العناصر، و فيما يلي فائدة كل واحدة منها:
- الخاصية grid-row-gap يمكنك استخدامها لإضافة هامش بين الأسطر.
- الخاصية grid-column-gap يمكنك استخدامها لإضافة هامش بين الأعمدة.
- الخاصية gap يمكنك استخدامها لإضافة هامش بين الأسطر و الأعمدة.
في الإصدار الثاني من CSS كانت أسماء هذه الخصائص تكتب بدون grid- في أولها كما يلي:
- الخاصية grid-row-gap كان إسمها row-gap.
- الخاصية grid-column-gap كان إسمها column-gap.
- الخاصية grid-gap كان إسمها gap.
في المثال التالي قمنا باستخدام الخاصية grid-row-gap لإضافة هامش بمقدار 10 بكسل بين الأسطر.
المثال الأول
النتيجة
في المثال التالي قمنا باستخدام الخاصية grid-column-gap لإضافة هامش بمقدار 10 بكسل بين الأعمدة.
المثال الثاني
النتيجة
في المثال التالي قمنا باستخدام الخاصية grid-gap لإضافة هامش بمقدار 10 بكسل بين الأسطر و الأعمدة.
المثال الثالث
النتيجة
الخاصية grid-template-areas
يمكنك استخدام الخاصية grid-template-areas لتقسيم الحاوية إلى مناطق مع إعطاء كل منطقة منها إسم محدد.
بعدها يجب إضافة الخاصية grid-area لكل عنصر في الحاوية و إعطائه إسم المنطقة التي نريد وضعه فيها كقيمة.
كيفية تسمية المناطق
عند تقسيم الحاوية إلى مناطق فإننا نكتبها بشكل مريح على النحو التالي ليكون التعامل معها أسهل.
أسماء المناطق المكررة بجانب بعضها بشكل منطقي يقوم المتصفح بدمجها كمنقطة واحدة بشكل تلقائي لك.
Header | Header |
Navbar | Main |
Navbar | Footer |
Header | |
Navbar | Main |
Footer |
في المثال التالي قمنا باستخدام الخاصية grid-template-areas لتحديد أسماء المناطق التي سيتم تخصيصها في كل سطر في الحاوية، و من ثم قمنا باستخدام الخاصية grid-area لتحديد أي عنصر سيظهر في أي منطقة.
المثال الأول
النتيجة
في المثال التالي قمنا بتقسيم الحاوية إلى مناطق، بعدها قمنا بإضافة هامش بمقدار 10 بكسل بين الأسطر و الأعمدة، و من ثم قمنا بجعل حجم العمود الأول 150 بكسل و العمود الثاني يظهر على كل المساحة المتاحة.
المثال الثاني
النتيجة
الخاصية grid-template
يمكنك استخدام الخاصية grid-template لتقسيم الحاوية لمناطق لها أسماء محددة و كذلك تحديد أحجام الأعمدة و الأسطر دفعة واحدة. إذاً هي اختصار للخصائص التالية:
- grid-template-areas
- grid-template-columns
- grid-template-rows
في المثال التالي قمنا بتقسيم الحاوية إلى مناطق مع تحديد أن عرض العمود الأول هو 150 بكسل و العمود الثاني يظهر على كل المساحة المتاحة. كما أن أننا وضعنا هامش بمقدار 10 بكسل بين الأعمدة و الأسطر.
المثال الأول
النتيجة
في المثال التالي قمنا بإعادة المثال السابق مع جعل السطر الأول طوله 90 بكسل، السطر الثاني مطابق لحجم الشاشة و السطر الثالث 50 بكسل.
المثال الثاني
النتيجة