מה float עושה
float דוחף אלמנט לצד אחד של המכל שלו ומאפשר לטקסט שבא אחריו לעטוף אותו:
ה-margin על התיבה עם ה-float מונע מהטקסט לגעת בה. margin הוא הדרך לשלוט ברווח הזה; לטקסט עצמו אי אפשר לתת margin לכיוון ה-float.
הערכים
| ערך | תוצאה |
|---|---|
none (ברירת מחדל) | אין float |
left | נדחף לקצה השמאלי |
right | נדחף לקצה הימני |
inline-start | נדחף לתחילת השורה: שמאל באנגלית, ימין בערבית או בעברית |
inline-end | נדחף לסוף השורה |
inline-start ו-inline-end עוקבים אחרי כיוון הכתיבה, כך שפריסה שנבנתה איתם מתהפכת נכון בעמודים מימין לשמאל. אלמנט עם float גם הופך לבלוק: display: inline הופך ל-block, כך ש-width ו-height חלים גם על span או img.
תמונות עם float בתוך טקסט
השימוש הקלאסי: תמונה בתוך מאמר, עם טקסט שזורם סביבה. שימו float לכל צד:
clear: להפסיק את העטיפה
clear אומר "התחל מתחת לכל float קודם בצד הזה". השתמשו בו על האלמנט שלא אמור לשבת לצד float, כמו הכותרת של החלק הבא:
הכותרת הראשונה נדחסת לצד ה-float. השנייה מתחילה מתחתיו. clear מקבל left, right, both, inline-start, inline-end ו-none.
ההורה הקורס, ו-flow-root
Floats נמצאים מחוץ לזרימה הרגילה, ולכן למכל שכל הילדים שלו עם float אין שום דבר בזרימה, והוא קורס לגובה אפס. הרקע והגבול שלו נשארים כקו דק מעל ה-floats:
display: flow-root יוצר block formatting context חדש, שתמיד עוטף את ה-floats שלו. קוד ישן יותר משתמש ב-"clearfix" לאותה תוצאה:
.clearfix::after {
content: "";
display: block;
clear: both;
}
גם overflow: hidden או auto מכילים floats, עם תופעת לוואי של חיתוך; ראו overflow.
Floats הם לא לפריסה
לפני flexbox ו-grid, פריסות עמוד שלמות נבנו מעמודות עם float, עם clearfix וחישובי רוחב בכל מקום. התקופה הזאת נגמרה: floats לא יכולים למרכז, לא יכולים ליצור עמודות באותו גובה, ונשברים כשגודל התוכן משתנה. השתמשו ב-display: flex או ב-display: grid לשורות ולעמודות, ושמרו את float לעטיפת טקסט סביב משהו. כדי למרכז תמונה במקום לעטוף אותה בטקסט, ראו איך ממרכזים תמונה.
עטיפה סביב צורה
shape-outside מאפשר לטקסט לעקוב אחרי צורה במקום אחרי המלבן של ה-float. הוא עובד רק על אלמנטים עם float:
.avatar {
float: left;
width: 120px; height: 120px;
border-radius: 50%;
shape-outside: circle(50%);
margin-inline-end: 16px;
}
טעויות נפוצות
- הורה בגובה אפס. לכל הילדים שלו יש float. הוסיפו
display: flow-root. - Floats לעמודות או לניווט. השתמשו ב-flexbox או ב-grid.
- ציפייה ל-
float: center. הוא לא קיים. מרכזו עם flexbox, grid אוmargin: 0 auto. - תוכן אחרי float שעוטף אותו כשהוא לא אמור. תנו לו
clear: both, או שימו את ה-float והטקסט שלו במכלflow-root. leftו-rightפיזיים באתר רב לשוני. השתמשו ב-inline-startוב-inline-endכדי שהפריסה תתהפך בשפות מימין לשמאל.
שאלות נפוצות
מה float עושה ב-CSS?
הוא מוציא אלמנט מהזרימה הרגילה ודוחף אותו לקצה השמאלי או הימני של המכל שלו. טקסט ותוכן inline שבאים אחריו עוטפים אותו.
מה clear עושה?
clear מזיז אלמנט אל מתחת לכל float קודם בצד שצוין: clear: left, clear: right או clear: both. כך מונעים מתוכן לעטוף float ולשבת לצידו.
למה ההורה של אלמנט עם float הוא בגובה אפס?
Floats נמצאים מחוץ לזרימה הרגילה, ולכן להורה שיש לו רק ילדים עם float אין תוכן בזרימה, והוא קורס. הוסיפו display: flow-root להורה, והוא יגדל כדי להכיל את ה-floats שלו.
מה זה clearfix?
טריק שגורם להורה להכיל את ה-floats שלו, באופן מסורתי פסאודו-אלמנט ::after עם clear: both. היום display: flow-root על ההורה עושה את אותה העבודה בשורה אחת.
כדאי להשתמש ב-float לפריסה?
לא. Floats שימשו לעמודות לפני ש-flexbox ו-grid היו קיימים. השתמשו ב-flexbox או ב-grid לפריסה, ושמרו את float לתפקיד המקורי שלו: עטיפת טקסט סביב תמונה או ציטוט מודגש.