Menu
flag Ar iconالعربيةdown icon

justify-content وalign-items في CSS: كل القيم

تضع justify-content عناصر flex على المحور الرئيسي، وتضعها align-items على المحور العرضي. شاهد كل القيم جنبًا إلى جنب مع القياس، وشبكة محاذاة قابلة للنقر، وalign-self، وأسباب عدم عمل justify-content أحيانًا.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

justify-content وalign-items بجملة واحدة لكل منهما

في حاوية flex، تنشر justify-content العناصر على المحور الرئيسي (على امتداد الصف)، وتصفّها align-items على المحور العرضي (صعودًا ونزولًا في الصف). كلتاهما توضع على الحاوية:

الصندوق موسّط في الاتجاهين: على البعد نفسه من حافتي البداية والنهاية، ومن الأعلى والأسفل. احذف height: 140px ولن يبقى لـ align-items: center ما تفعله، لأن الحاوية تتقلص إلى ارتفاع العنصر نفسه.

كل قيم justify-content مع القياس

كل صف أدناه هو العناصر الثلاثة نفسها مع justify-content مختلفة. الأرقام في التسمية فوق كل صف هي الفجوات التي تركها المتصفح: قبل العنصر الأول، وبين العناصر، وبعد الأخير.

عرض الحاوية 420px والعناصر تأخذ 180px، فتبقى 240px من المساحة الحرة. أين تذهب:

القيمةتذهب المساحة الحرةالفجوات في المثال
flex-start (وstart)كلها بعد العناصر0 / 0 / 0 / 240
centerنصفها قبل ونصفها بعد120 / 0 / 0 / 120
flex-end (وend)كلها قبل العناصر240 / 0 / 0 / 0
space-betweenبين العناصر فقط0 / 120 / 120 / 0
space-aroundمتساوية على جانبي كل عنصر، فتحصل الأطراف على النصف40 / 80 / 80 / 40
space-evenlyكل الفجوات متساوية، بما فيها الأطراف60 / 60 / 60 / 60

تتبع flex-start اتجاه flex، وتتبع start اتجاه الكتابة. لا تختلفان إلا مع row-reverse أو column-reverse، حيث تكون flex-start في الطرف المعكوس.

كل قيم align-items

تعمل align-items بشكل متعامد مع الصف. للعناصر أدناه ارتفاعات مختلفة كي ترى ما تفعله كل قيمة بها:

القيمةما يحدث على المحور العرضي
stretch (الافتراضي)العناصر التي بلا ارتفاع مضبوط تكبر لتملأ الحاوية
flex-start (وstart)تقع العناصر في الأعلى، بارتفاعها الخاص
centerتتوسط العناصر، بارتفاعها الخاص
flex-end (وend)تقع العناصر في الأسفل
baselineتتحرك العناصر كي تشترك أسطر النص الأولى في خط أساس واحد

في صندوق baseline تقع التسميات الثلاث «Ag» على خط واحد رغم أن الأولى أكبر والثانية فوقها حشو. هذه هي القيمة المناسبة لصف يخلط عنوانًا كبيرًا بنص صغير، أو تسمية بحقل إدخال.

انقر للمحاذاة

انقر أي خلية في الشبكة ذات الثلاثة في ثلاثة. ينتقل الصندوق إليها، وتُطبع أدناه CSS التي تضعه هناك:

تغيّر صفوف الأداة align-items، وتغيّر أعمدتها justify-content. الخلية الوسطى هي «توسيط div» الكلاسيكي.

في العمود، تتبادل الخاصيتان

تتبع justify-content المحور الرئيسي دائمًا. مع flex-direction: column يكون المحور الرئيسي عموديًا، فتحرك justify-content العناصر صعودًا ونزولًا وتحركها align-items عرضيًا:

إن خلطت بينهما، بدّل الخاصيتين بدل إعادة كتابة التخطيط.

align-self والهوامش التلقائية: عنصر واحد فقط

align-self على عنصر تتجاوز align-items لذلك العنصر. لا توجد justify-self في flexbox؛ لتحريك عنصر واحد على المحور الرئيسي، أعطه هامشًا auto، فيأخذ كل المساحة الحرة على ذلك الجانب:

ينزل العنصر الأخضر وحده إلى الأسفل، ويُدفع العنصر الكهرماني إلى الطرف البعيد من الصف بينما يبقى الآخرون في البداية.

حين توجد عدة أسطر: align-content

تحاذي align-items العناصر داخل سطرها. وحين تلتف الحاوية على عدة أسطر، تباعد align-content بين الأسطر نفسها، وتقبل قيم justify-content نفسها. لا تفعل شيئًا في حاوية nowrap، التي يملأ سطرها الوحيد ارتفاع الحاوية دائمًا. تعرضها صفحة flex-wrap.

أخطاء شائعة

  • الخلط بين المحورين. justify-content هي اتجاه الانسياب، وalign-items متعامدة معه. في العمود يكون التوسيط العمودي justify-content: center.
  • لا مساحة حرة. العنصر الذي عليه flex: 1 يأخذ كل المساحة، فلا يبقى لـ justify-content ما توزعه. ويحدث الشيء نفسه حين تكون الحاوية inline-flex وبعرض عناصرها تمامًا.
  • لا ارتفاع لـ align-items. الحاوية التي بارتفاع محتواها لا تترك شيئًا للمحاذاة. اضبط height أو min-height.
  • البحث عن justify-self في flexbox. تُتجاهل هناك. استخدم margin-inline-start: auto (أو margin-left: auto) على العنصر.
  • align-items: stretch لا تمدّ. العنصر الذي له height خاص يحتفظ به. احذف الارتفاع (استخدم min-height إن كان يحتاج إلى حد أدنى).
  • وضع الخاصيتين على العناصر. كلتاهما توضع على حاوية flex. وحدها align-self توضع على العنصر.

الأسئلة الشائعة

ما الفرق بين justify-content وalign-items؟

توزّع justify-content العناصر على المحور الرئيسي، وهو اتجاه انسيابها (أفقي في flex-direction: row). وتضعها align-items على المحور العرضي (عمودي في الصف). وفي العمود تتبادلان: تصبح justify-content عمودية.

ما الفرق بين space-between وspace-around وspace-evenly؟

لا تضع space-between أي مسافة قبل العنصر الأول ولا بعد الأخير وتقسم الباقي بين العناصر. وتعطي space-around كل عنصر مسافة متساوية على جانبيه، فتحصل الأطراف على نصف فجوة. أما space-evenly فتجعل كل الفجوات متساوية، بما فيها الأطراف.

لماذا لا تعمل justify-content؟

غالبًا لا توجد مساحة حرة لتوزيعها: لعنصر ما flex-grow أو flex: 1، أو الحاوية بعرض عناصرها فقط (مثلًا display: inline-flex أو حاوية عائمة). وتحقق أيضًا أن display: flex على الأب لا على العناصر.

لماذا لا توسّط align-items center عموديًا؟

الحاوية على الأرجح بارتفاع محتواها تمامًا، فلا يوجد ما يُوسَّط داخله. أعطِ حاوية flex ارتفاعًا أو min-height، وستتحرك العناصر إلى منتصفها.

ماذا تفعل align-self؟

تتجاوز align-self قيمة align-items الخاصة بالحاوية لعنصر واحد. مثلًا align-self: flex-end على ابن واحد تنقل ذلك الابن وحده إلى نهاية المحور العرضي بينما يبقى الآخرون حيث وضعتهم align-items.

هل توجد justify-self في flexbox؟

لا. يتجاهل flexbox الخاصية justify-self، لأن المحور الرئيسي مشترك بين كل العناصر. لدفع عنصر واحد على المحور الرئيسي استخدم هامشًا auto، مثل margin-inline-start: auto. أما justify-self فتعمل في grid.

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن