ماذا تفعل 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 لمهمتها الأصلية: التفاف النص حول صورة أو اقتباس بارز.