تم توليد هذا المقال عبر أدوات الذكاء الاصطناعي (إصدار 4.0) لتقديم إجابة تقنية دقيقة ومباشرة.
يُعد CSS Flexbox نظام تخطيط أحادي البعد مصممًا لتوزيع المساحة ومحاذاة العناصر داخل حاوية. تكمن قوته الأساسية في قدرته على توفير تحكم دقيق ومرن في كيفية ترتيب العناصر وتوزيعها، مما يجعله أداة لا غنى عنها في بناء واجهات المستخدم المتجاوبة التي تتكيف بسلاسة مع أحجام الشاشات المختلفة.
تُعالج المحاذاة في Flexbox عبر محورين: المحور الرئيسي (main-axis) والمحور المتقاطع (cross-axis). يعتمد اتجاه هذين المحورين على قيمة خاصية flex-direction المطبقة على الحاوية المرنة (flex container).
display: flex; أو display: inline-flex;)، بينما تُطبق خصائص الترتيب الفردي على العناصر المرنة (flex items).
المحاذاة على المحور الرئيسي (main-axis):
تُستخدم خاصية justify-content للتحكم في كيفية توزيع المساحة الحرة بين العناصر المرنة وعلى طول المحور الرئيسي. القيم الشائعة تشمل:
flex-start: تجمع العناصر في بداية المحور الرئيسي.flex-end: تجمع العناصر في نهاية المحور الرئيسي.center: تُوسّط العناصر على المحور الرئيسي.space-between: توزع المساحة الحرة بالتساوي بين العناصر، مع وضع العنصر الأول في البداية والأخير في النهاية.space-around: توزع المساحة الحرة بالتساوي حول العناصر، مما يترك مسافة متساوية على جانبي كل عنصر.space-evenly: توزع المساحة الحرة بالتساوي بين العناصر وحولها، مما يضمن مسافات متساوية تمامًا بين جميع العناصر وعلى الأطراف.
.container {
display: flex;
justify-content: space-between; /* توزيع العناصر مع مسافات متساوية بينها */
}
المحاذاة على المحور المتقاطع (cross-axis):
تُستخدم خاصية align-items للتحكم في كيفية محاذاة العناصر المرنة على طول المحور المتقاطع. القيم الشائعة تتضمن:
flex-start: تجمع العناصر في بداية المحور المتقاطع.flex-end: تجمع العناصر في نهاية المحور المتقاطع.center: تُوسّط العناصر على المحور المتقاطع.stretch: تمد العناصر لملء الحاوية على طول المحور المتقاطع (القيمة الافتراضية، بشرط ألا يكون للعنصر ارتفاع محدد).baseline: تُحاذي العناصر بناءً على خط الأساس للنص بداخلها.
.container {
display: flex;
height: 200px; /* لتوضيح المحاذاة الرأسية */
align-items: center; /* توسيط العناصر رأسياً */
}
يمكن تجاوز محاذاة عنصر فردي باستخدام خاصية align-self، والتي تقبل نفس قيم align-items.
.item:nth-child(2) {
align-self: flex-end; /* محاذاة العنصر الثاني إلى نهاية المحور المتقاطع */
}
التباعد بين العناصر (Spacing):
للتحكم في التباعد بين العناصر المرنة، يوفر Flexbox خاصية gap (أو row-gap و column-gap). هذه الخاصية تُطبق على الحاوية المرنة وتُنشئ مسافة ثابتة بين العناصر دون الحاجة إلى استخدام الهوامش (margin) على العناصر الفردية، مما يقلل من تعقيد CSS ويحسن من سهولة الصيانة.
.container {
display: flex;
gap: 20px; /* مسافة 20 بكسل بين جميع العناصر */
/* أو: */
row-gap: 15px;
column-gap: 10px;
}
في بعض الحالات، قد يكون استخدام margin ضروريًا لتحقيق تأثيرات تباعد محددة، خاصة margin: auto; لدفع العناصر إلى أقصى الحدود المتاحة.
.item-left {
margin-right: auto; /* يدفع العنصر إلى اليسار، ويدفع العناصر الأخرى إلى اليمين */
}
الاستجابة (Responsiveness):
تكمن قوة Flexbox في طبيعته المتجاوبة. يمكن تغيير خصائص المحاذاة والتباعد بسهولة باستخدام استعلامات الوسائط (media queries) لتكييف التخطيط مع أحجام الشاشات المختلفة. على سبيل المثال، يمكن تغيير flex-direction من row إلى column وتعديل justify-content و align-items لضمان أفضل عرض على الأجهزة المحمولة.
.container {
display: flex;
flex-direction: row;
justify-content: space-between;
}
@media (max-width: 768px) {
.container {
flex-direction: column; /* تحويل التخطيط إلى عمودي على الشاشات الأصغر */
align-items: center; /* توسيط العناصر أفقياً في الوضع العمودي */
gap: 10px;
}
}
ما الفرق بين justify-content: space-around; و space-evenly;؟
space-around يوزع المساحة الحرة بالتساوي حول كل عنصر، مما يعني أن المسافة بين العناصر تكون ضعف المسافة على الأطراف. أما space-evenly فيوزع المساحة الحرة بالتساوي تمامًا بين جميع العناصر وعلى الأطراف، مما يضمن تباعدًا متسقًا بصريًا.
المصدر:
صوان محور XYZ
شكر خاص لـ GEMINI وجمال الحزازي.