Flexbox أم Grid؟ دليل المحترفين
ليس مجرد شرح للخصائص، بل فهم للمنطق البرمجي الذي سيجعلك تتقن بناء أي واجهة مهما بلغت تعقيدها.
لماذا نحتاج لهذا الدليل؟
في السابق، كان توزيع العناصر في CSS أشبه بالكابوس، نستخدم float و inline-block ونقضي ساعات في تعديل بكسل واحد. ظهور Flexbox ثم Grid أحدث ثورة حقيقية، لكنها خلقت سؤالاً جديداً لدى المبرمجين: "متى أستخدم هذا ومتى أستخدم ذاك؟".

السر ليس في أيهما "أفضل"، بل في أيهما "أنسب" للمهمة المطلوبة. دعنا نغوص في التفاصيل التقنية.
أولاً: Flexbox - سيد الاتجاه الواحد
يعتمد Flexbox على فلسفة Content-out، أي أن توزيع المساحات يعتمد على حجم المحتوى الموجود داخل العناصر. هو مثالي عندما تريد مواءمة مجموعة من العناصر في صف أو عمود بنسبة مرنة.
الخصائص الجوهرية التي يجب أن تحفظها:
flex-direction: تحدد المحور الأساسي (Main Axis). هل العناصر ستصطف أفقياً أم رأسياً؟justify-content: تتحكم في توزيع العناصر على المحور الأساسي (بداية، نهاية، منتصف، أو توزيع مسافات متساوية).align-items: تتحكم في محاذاة العناصر على المحور المتقاطع (Cross Axis).
.container {
display: flex;
justify-content: space-between;
align-items: center;
}
عند تصميم شريط التنقل (Navbar)، توزيع الأزرار في الفوتر، أو وضع أيقونة بجانب نص داخل زر. باختصار: عندما لا يهمك أين تنتهي العناصر، بل يهمك كيف تصطف بجانب بعضها.
ثانياً: CSS Grid - مهندس الهياكل
على عكس Flexbox، يعتمد Grid على فلسفة Layout-in. أنت تبني الشبكة (الأعمدة والصفوف) أولاً، ثم تضع العناصر بداخلها. هو ملك الأبعاد الثنائية (أفقي ورأسي معاً).
أقوى ما يميز الجريد:
- وحدة Fr: وحدة ذكية تمثل "كسر" من المساحة المتاحة، تجعلك تقسم الشاشة لنسب مئوية بدون حسابات معقدة.
grid-template-areas: تسمح لك بتسمية مناطق الموقع (Header, Sidebar) وترتيبها كأنك ترسم لوحة.gap: ميزة ثورية لإضافة مسافات بين العناصر دون الحاجة لـmarginالمتعب.
.layout {
display: grid;
grid-template-columns: 250px 1fr;
grid-template-rows: auto 1fr auto;
gap: 20px;
}
عندما تبني الهيكل الأساسي للموقع، أو شبكة صور (Gallery) متداخلة، أو لوحة تحكم (Dashboard) تحتوي على مربعات إحصائيات متفاوتة الأحجام.
المواجهة المباشرة: الفرق الجوهري
| الميزة | Flexbox | CSS Grid |
|---|---|---|
| الأبعاد | بُعد واحد (1D) | بُعدين (2D) |
| المنطق | المحتوى أولاً (Content-first) | الهيكل أولاً (Layout-first) |
| المحاذاة | ممتاز في المحاذاة الداخلية | ممتاز في التقسيم الخارجي |
| التداخل | صعب جداً عمل عناصر متداخلة | سهل جداً عبر نظام الخطوط (Lines) |
الأسئلة الأكثر شيوعاً (FAQ)
fr و minmax()، لكنه يوفر مجهوداً جباراً لاحقاً.
flex أو grid-cols-3 بشكل صحيح.
float متفوقاً هي عندما تريد أن "يلتف" النص حول صورة (كما في المقالات المطبوعة). عدا ذلك، لا تستخدم Float أبداً للتخطيط.
كلمة أخيرة لمطوري كوداتي..
الاحتراف ليس في معرفة الكود، بل في معرفة "لماذا" تستخدم هذا الكود. المقال القادم في قسم "مكتبة الأكواد" سيكون تطبيقاً عملياً؛ حيث سنشاركك أكواد جاهزة مبنية على Flexbox لتصميم واجهات احترافية بضغطة زر.
ليست هناك تعليقات:
إرسال تعليق