Menu

CSS Overflow: hidden, scroll, auto, clip ו-ellipsis

overflow קובע מה קורה לתוכן שלא נכנס בקופסה שלו: להציג אותו, לחתוך אותו או להוסיף פסי גלילה. למדו את visible, hidden, scroll, auto ו-clip, את overflow-x ו-overflow-y, שלוש נקודות בסוף טקסט, ותופעות הלוואי של overflow על הפריסה.

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

מה overflow עושה

כשתוכן גדול מהקופסה שלו (גובה קבוע, מילה ארוכה, טבלה רחבה), הוא גולש. המאפיין overflow קובע מה קורה לעודף:

ערךמה רואיםמיכל גלילה
visible (ברירת מחדל)התוכן נשפך מחוץ לקופסה וחופף את מה שבא אחריולא
hiddenנחתך בקצה הריפוד, בלי פסי גלילה (סקריפט עדיין יכול לגלול אותו)כן
clipנחתך, ואין גלילה בכלל, גם לא בסקריפטלא
scrollתמיד מציג פסי גלילה, גם אם התוכן נכנסכן
autoפסי גלילה רק כשהתוכן לא נכנסכן

ב-macOS ובטלפונים פסי הגלילה מונחים מעל התוכן ונעלמים בהדרגה, כך ש-scroll ו-auto עשויים להיראות אותו דבר עד שגוללים.

יצירת קופסה נגללת

קופסה גולשת רק אם משהו מגביל את הגודל שלה. height או max-height, יחד עם overflow-y: auto, הופכים רשימה ארוכה ללוח נגלל:

max-height עדיף כאן על height: רשימה קצרה נשארת קצרה, ורק רשימה ארוכה נגללת. אזור נגלל שאין בתוכו תוכן שאפשר להתמקד בו צריך לקבל tabindex="0" כדי שגם משתמשי מקלדת יוכלו לגלול אותו.

overflow-x ו-overflow-y

אפשר להגדיר את שני הצירים בנפרד. השימוש הנפוץ הוא טבלה רחבה שנגללת הצידה בתוך המיכל שלה במקום להרחיב את כל הדף:

כלל אחד שכדאי לזכור: אם ציר אחד הוא hidden, scroll או auto, ערך visible בציר השני הופך ל-auto. לכן overflow-x: hidden לבדו יכול לתת לכם פס גלילה אנכי לא צפוי. ל-overflow-x: clip אין את ההשפעה הזאת:

.a { overflow-x: hidden; }  /* overflow-y computes to auto */
.b { overflow-x: clip; }    /* overflow-y stays visible */

חיתוך טקסט עם שלוש נקודות

text-overflow: ellipsis מחליף את הסוף החתוך של שורה ב-"…". הוא צריך שלושה דברים יחד: רוחב מוגבל, טקסט שלא יכול להישבר לשורה חדשה ו-overflow מוסתר:

ה-line clamp עם הקידומת -webkit- עובד ב-Chrome, Firefox ו-Safari. קוראי מסך עדיין קוראים את הטקסט המלא, כך שהמילים החתוכות לא הולכות לאיבוד בשבילם.

תופעות לוואי של overflow

הגדרה של overflow לכל ערך אחר מ-visible או clip משנה יותר מאשר חיתוך:

  • הוא מכיל floats ו-margins של ילדים. האלמנט יוצר block formatting context חדש, ולכן הוא גדל כדי לעטוף ילדים עם float. display: flow-root עושה אותו דבר בלי לחתוך כלום.
  • הוא שובר את position: sticky מתחתיו. ילד sticky נצמד למיכל הגלילה הקרוב ביותר; אם המיכל הזה לא נגלל, שום דבר לא נצמד.
  • הוא חותך ילדים עם מיקום absolute (כשהאלמנט הגולש הוא גם הבלוק המכיל שלהם), כולל תפריטים נפתחים ו-tooltips, והוא חותך גם צללים של ילדים.

הסתרת פס הגלילה

אפשר להשאיר קופסה נגללת ולהסתיר את פס הגלילה שלה עם scrollbar-width: none. השתמשו בזה במשורה: בלי פס גלילה, קוראים רבים לא מבינים שיש עוד תוכן. scrollbar-gutter: stable עושה את העבודה ההפוכה: הוא שומר את המקום של פס הגלילה כדי שהתוכן לא יזוז כשפס גלילה מופיע.

טעויות נפוצות

  • לצפות לגלישה בלי מגבלת גודל. קופסה בלי height או max-height גדלה במקום לגלוש.
  • overflow: hidden על body כדי "לתקן" גלילה אופקית. מצאו במקום זאת את האלמנט שרחב מדי (לרוב width קבוע, כתובת URL ארוכה, או 100vw עם פס גלילה).
  • Ellipsis בלי white-space: nowrap. הטקסט נשבר לשורות, כך ששום דבר לא גולש אופקית ולא מופיעות שלוש נקודות.
  • overflow-x: hidden שיוצר פס גלילה אנכי. השתמשו ב-clip.
  • תפריט נפתח שנחתך על ידי הכרטיס שלו. ה-overflow: hidden של הכרטיס חותך אותו; העבירו את כלל ה-overflow או הציגו את התפריט מחוץ לכרטיס.

שאלות נפוצות

מה overflow: hidden עושה?

הוא חותך תוכן שלא נכנס בתוך קופסת הריפוד של האלמנט, בלי פסי גלילה. עדיין אפשר לגלול אל החלק המוסתר בעזרת סקריפט או על ידי פוקוס על משהו שבתוכו.

מה ההבדל בין overflow auto ל-scroll?

scroll תמיד שומר מקום לפסי גלילה, גם כשהתוכן נכנס. auto מציג פס גלילה רק כשהתוכן גדול מהקופסה, וזה מה שרוצים בדרך כלל.

איך הופכים div לנגלל?

הגבילו את הגודל שלו ואפשרו גלילה: max-height: 300px; overflow-y: auto;. בלי מגבלת height או max-height, ה-div גדל עם התוכן שלו ואף פעם לא גולש.

למה overflow-x: hidden מוסיף גם פס גלילה אנכי?

אם ציר אחד הוא hidden, scroll או auto, ערך visible בציר השני מחושב כ-auto. השתמשו במקום זאת ב-overflow-x: clip, שלא יוצר מיכל גלילה ומשאיר את הציר השני visible.

איך מוסיפים שלוש נקודות (...) לטקסט שגולש?

לשורה אחת: white-space: nowrap; overflow: hidden; text-overflow: ellipsis; על אלמנט עם רוחב מוגבל. לכמה שורות, השתמשו ב-display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden;.

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

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

להתחיל