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

float وclear في CSS: التفاف النص حول الصور

تدفع float العنصر إلى جانب واحد وتترك النص يلتف حوله، كما تضع المجلات الصور. تعلّم float left وright وinline-start، وclear، ولماذا ينهار الأب حول العناصر العائمة وكيف تصلحه display: flow-root، ولماذا لم تعد العناصر العائمة تُستخدم لتخطيط الصفحات.

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

ماذا تفعل float

تدفع float العنصر إلى جانب واحد من حاويته وتترك النص الذي يليه يلتف حوله:

الهامش على الصندوق العائم يمنع النص من ملامسته. الهوامش هي طريقة التحكم في تلك الفجوة؛ فالنص نفسه لا يمكن إعطاؤه هامشًا نحو العنصر العائم.

القيم

القيمةالنتيجة
none (الافتراضي)بلا تعويم
leftيُدفع إلى الحافة اليسرى
rightيُدفع إلى الحافة اليمنى
inline-startيُدفع إلى بداية السطر: اليسار في الإنجليزية، واليمين في العربية أو العبرية
inline-endيُدفع إلى نهاية السطر

تتبع inline-start وinline-end اتجاه الكتابة، فالتخطيط المبني بهما ينعكس بشكل صحيح في الصفحات التي تُقرأ من اليمين إلى اليسار. ويصبح العنصر العائم أيضًا عنصرًا كتليًا: تتحول display: inline إلى block، فتنطبق width وheight حتى على span أو img.

تعويم الصور داخل النص

الاستخدام الكلاسيكي: صورة داخل مقال، والنص ينساب حولها. عوّم واحدة إلى كل جانب:

clear: إيقاف الالتفاف

تقول clear: «ابدأ تحت أي عنصر عائم سابق على هذا الجانب». استخدمها على العنصر الذي يجب ألا يقع بجانب عنصر عائم، مثل عنوان القسم التالي:

العنوان الأول ينحشر بجانب العنصر العائم. والثاني يبدأ تحته. تقبل clear القيم left وright وboth وinline-start وinline-end وnone.

الأب المنهار، وflow-root

العناصر العائمة خارج التدفق العادي، فالحاوية التي كل أبنائها عائمون ليس فيها شيء داخل التدفق فتنهار إلى ارتفاع صفر. وتصبح خلفيتها وحدها خطًا رفيعًا فوق العناصر العائمة:

تنشئ display: flow-root سياق تنسيق كتلي جديدًا، يحيط دائمًا بعناصره العائمة. والشيفرة الأقدم تستخدم «clearfix» للنتيجة نفسها:

.clearfix::after {
  content: "";
  display: block;
  clear: both;
}

تحتوي overflow: hidden أو auto العناصر العائمة أيضًا، مع أثر جانبي هو القص؛ راجع overflow.

العناصر العائمة ليست للتخطيط

قبل flexbox وgrid كانت تخطيطات الصفحات كاملة تُبنى من أعمدة عائمة، مع clearfix وحسابات عرض في كل مكان. انتهى ذلك العهد: العناصر العائمة لا تستطيع التوسيط، ولا جعل الأعمدة بالارتفاع نفسه، وتنكسر حين يتغير حجم المحتوى. استخدم display: flex أو display: grid للصفوف والأعمدة، واترك float لالتفاف النص حول شيء ما. لتوسيط صورة بدل التفاف النص حولها، راجع كيفية توسيط صورة.

الالتفاف حول شكل

تتيح shape-outside للنص أن يتبع شكلًا بدل مستطيل العنصر العائم. تعمل على العناصر العائمة فقط:

.avatar {
  float: left;
  width: 120px; height: 120px;
  border-radius: 50%;
  shape-outside: circle(50%);
  margin-inline-end: 16px;
}

أخطاء شائعة

  • أب ارتفاعه صفر. كل أبنائه عائمون. أضف display: flow-root.
  • العناصر العائمة للأعمدة أو التنقل. استخدم flexbox أو grid.
  • توقع وجود float: center. غير موجودة. وسّط باستخدام flexbox أو grid أو margin: 0 auto.
  • محتوى بعد عنصر عائم يلتف حين يجب ألا يلتف. أعطه clear: both، أو ضع العنصر العائم ونصه في حاوية flow-root.
  • left وright الفيزيائيتان في موقع متعدد اللغات. استخدم inline-start وinline-end كي ينعكس التخطيط في اللغات التي تُكتب من اليمين إلى اليسار.

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

ماذا تفعل float في CSS؟

تخرج العنصر من التدفق العادي وتدفعه إلى الحافة اليسرى أو اليمنى لحاويته. والنص والمحتوى السطري الذي يأتي بعده يلتف حوله.

ماذا تفعل clear؟

تنقل clear العنصر إلى ما تحت أي عناصر عائمة سابقة على الجانب المحدد: clear: left أو clear: right أو clear: both. هكذا تمنع المحتوى من الالتفاف بجانب عنصر عائم.

لماذا ارتفاع أب العنصر العائم صفر؟

العناصر العائمة خارج التدفق العادي، فالأب الذي كل أبنائه عائمون ليس فيه محتوى داخل التدفق فينهار. أضف display: flow-root إلى الأب فيكبر ليحتوي عناصره العائمة.

ما هو clearfix؟

حيلة لجعل الأب يحتوي عناصره العائمة، تقليديًا عنصر زائف ::after مع clear: both. اليوم تؤدي display: flow-root على الأب المهمة نفسها في سطر واحد.

هل أستخدم float للتخطيط؟

لا. استُخدمت العناصر العائمة للأعمدة قبل وجود flexbox وgrid. استخدم flexbox أو grid للتخطيط، واترك float لمهمتها الأصلية: التفاف النص حول صورة أو اقتباس بارز.

Coddy programming languages illustration

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

ابدأ الآن