Menu

CSS Float ו-Clear: עטיפת טקסט סביב תמונות

float דוחף אלמנט לצד אחד ומאפשר לטקסט לעטוף אותו, כמו שמגזינים מציבים תמונות. למדו את float left, right ו-inline-start, את clear, למה הורה קורס סביב floats ואיך display: flow-root מתקן את זה, ולמה כבר לא משתמשים ב-floats לפריסת עמוד.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

מה 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 לתפקיד המקורי שלו: עטיפת טקסט סביב תמונה או ציטוט מודגש.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל