The CSS Podcast – 034: Overflow
כשתוכן חורג מהקטע הראשי שלו, יש הרבה דרכים לטיפול בו. אפשר לגלול כדי להוסיף עוד רווח, לחתוך את הקצוות האחרונים, לסמן את נקודת החיתוך בשלוש נקודות ועוד. חשוב במיוחד להביא בחשבון את האפשרות של זליגת תוכן כשמפתחים אפליקציות לנייד ומשתמשים במסכים בגדלים שונים.
יש שתי אפשרויות שונות לחיתוך ב-CSS; התכונה text-overflow
תעזור בהנחיות טקסט בודדות, והמאפיינים overflow
יעזרו לשלוט בגלישה במודל של התיבה.
גלישת שורה אחת עם text-overflow
משתמשים במאפיין text-overflow
בכל אלמנט שמכיל צמתים של טקסט, למשל, פסקה, <p>
. היא מציינת איך הטקסט ייראה כשהוא לא מתאים לשטח הזמין של הרכיב. כל טקסט ה-HTML בדף שניתן להצגה נמצא בצומתי טקסט. כדי להשתמש ב-text-overflow
צריך שורה אחת של טקסט ללא גלישת טקסט, לכן צריך גם להגדיר את overflow
כ-hidden
ולהגדיר ערך white-space
שימנע גלישת טקסט.
p {
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
שימוש במאפייני overflow
מאפייני גלישה מוגדרים ברכיב כדי לקבוע מה קורה כשהצאצאים שלו צריכים יותר מקום ממה שזמין. זו יכולה להיות פעולה מכוונת, למשל במפה אינטראקטיבית כמו מפות Google, שבה המשתמש מזיז את האצבע על תמונה גדולה שנחתכה לגודל מסוים. המצב הזה עשוי להיות גם לא מכוון, למשל באפליקציית צ'אט שבה המשתמש מקליד הודעה ארוכה שלא נכנסת לבועת הטקסט.
אפשר לחשוב על החריגה בשני חלקים. לרכיב ההורה יש שטח מוגבל שלא ישתנה. אפשר לחשוב עליו כחלון. רכיבי הצאצא הם תוכן שמבקש יותר מקום מההורה. אפשר לחשוב על זה בתור מה שאתם מסתכלים דרך החלון. ניהול ה-overflow יעזור לכם לקבוע איך החלון יכיל את התוכן הזה.
גלילה בציר האנכי והאופקי
המאפיין overflow-y
קובע את האפשרות של חרגה פיזית לאורך הציר האנכי של אזור התצוגה במכשיר, ולכן גורם לגלילה למעלה ולמטה.
המאפיין overflow-x
קובע את האופן שבו יתבצע זליגת נתונים (overflow) לאורך הציר האופקי של אזור התצוגה במכשיר, ולכן הוא קובע את הכיוון שבו יתבצע הגלילה – שמאלה או ימינה.
תכונות לוגיות של כיוון הגלילה
המאפיינים overflow-inline
ו-overflow-block
מגדירים את האפשרויות הנוספות על סמך כיוון המסמך ומצב הכתיבה.
הקיצור של overflow
הקיצורי דרך overflow
מגדירים את הסגנונות overflow-x
ו-overflow-y
בשורה אחת:
overflow: hidden scroll;
אם ציינת שתי מילות מפתח, הראשונה חלה על overflow-x
והשנייה על overflow-y
. אחרת, גם overflow-x
וגם overflow-y
משתמשים באותו ערך.
ערכים
בואו נבחן מקרוב את הערכים ומילות המפתח שזמינים לנכסים מסוג overflow
.
-
overflow: visible
(ברירת מחדל) - בלי להגדיר את הנכס,
overflow: visible
הוא ערך ברירת המחדל לאינטרנט. כך אפשר להבטיח שהתוכן אף פעם לא יוסתר בטעות, ותואם לעקרונות הליבה של "לעולם לא להסתיר תוכן" או "פריסות בטוחות של פריסות מדויקות". overflow: hidden
- עם
overflow: hidden
, התוכן חתוך בכיוון שצוין ולא מוצגות סרגליות גלילה כדי להציג אותו. overflow: scroll
overflow: scroll
מאפשרת למשתמשים לגלול בתוכן באמצעות סרגל גלילה. גם אם התוכן לא גולש כרגע, סרגלי גלילה יוצגו. זוהי דרך מצוינת לצמצם את התנודות העתידיות בפריסה, אם בעתיד יהיה אפשר לגלול בקונטיינר, למשל על סמך שינוי הגודל, ולהכין את המשתמש מבחינה ויזואלית לאזורים שניתן לגלול בהם.overflow: clip
- כמו
overflow: hidden
, התוכן עםoverflow: clip
חתוך לתיבת ה-padding של הרכיב. ההבדל ביןclip
לביןhidden
הוא שמילת המפתחclip
אוסרת גם על גלילה, כולל גלילה פרוגרמטית. overflow: auto
- לבסוף, הערך הנפוץ ביותר,
overflow: auto
. כך מכבדים את ההעדפות של המשתמש ומציגים סרגל גלילה אם צריך, אבל מסתירים אותו כברירת מחדל ומעבירים את האחריות על הגלילה למשתמש ולדפדפן.
גלילה ואפשרויות נוספות
התנהגויות רבות של overflow
כוללות סרגל גלילה, אבל יש כמה תכונות והתנהגויות גלילה ספציפיות שיכולות לעזור לכם לשלוט בגלילה בקונטיינר של עודף התוכן.
גלילה ונגישות
חשוב לוודא שהמיקוד הוא על אזור הגלילה כדי שמשתמשי המקלדת יוכלו לעבור אל התיבה ואז להשתמש במקשי החיצים כדי לגלול.
כדי לאפשר לתיבת גלילה לקבל את המיקוד, מוסיפים שם עם המאפיין tabindex="0"
, שם עם המאפיין aria-labelledby
ומאפיין role
מתאים. לדוגמה:
<div tabindex="0" role="region" aria-labelledby="id-of-descriptive-text">
content
</div>
לאחר מכן אפשר להשתמש ב-CSS כדי לציין שהתיבה נמצאת ב-focus, באמצעות המאפיין outline
כדי לספק רמז חזותי לכך שאפשר יהיה לגלול בה עכשיו.
בשימוש ב-CSS לאכיפת נגישות, אדריאן רוסלי (Adrian Roselli) מדגים איך CSS יכול לעזור למנוע נסיגה בנגישות. למשל: כדי להפעיל גלילה ולהוסיף את אינדיקטור המיקוד רק אם נעשה שימוש במאפיינים הנכונים. הכללים הבאים מאפשרים לגלול את התיבה רק אם יש לה מאפיינים מסוג tabindex
, aria-labelledby
ו-role
.
[role][aria-labelledby][tabindex] {
overflow: auto;
}
[role][aria-labelledby][tabindex]:focus {
outline: .1em solid blue;
}
מיקום סרגל הגלילה בתוך מודל התיבה
סרגל הגלילה תופס מקום בתוך תיבת הארגז, ויכול להתחרות על מקום אם inline
ולא overlaid
. במודול של מודל התיבה מוסבר בהרחבה על המקור הפוטנציאלי הזה לשינוי הפריסה.
root-scroller לעומת implicit-scroller
יכול להיות שתשימו לב שלחלק מהגוללים יש התנהגות של משיכה לרענון והתנהגויות מיוחדות אחרות, במיוחד בפיתוח לאפליקציות לנייד ולאפליקציות היברידיות. התנהגות הגלילה הזו מתרחשת בגלילה ברמה הבסיסית. בדף יש רק כלי אחד לגלילה ברמה הבסיסית (root). כברירת מחדל, הרכיב documentElement הוא רכיב הגלילה ברמה הבסיסית של הדף. עם זאת, אם משנים את הרכיב הזה, אפשר להחיל את ההתנהגויות המיוחדות על רכיבי גלילה אחרים מלבד documentElement. אנחנו קוראים לרכיב הגלילה החדש הזה רכיב הגלילה ברמה הבסיסית (implicit root scroller).
כדי ליצור סרגל גלילה ברמה הבסיסית, אפשר להשתמש בהצגת סרגל גלילה. לשם כך, ממקמים מאגר כקבוע, מוודאים שהוא מכסה את כל אזור התצוגה ומגדירים לו את הערך z-index בראש הרשימה עם סרגל גלילה. כאן אפשר לראות גלילה ברמה הבסיסית (root) לעומת גלילה משתמעת מקוננת.
scroll-behavior
scroll-behavior
מאפשר לכם להביע הסכמה לגלילה מבוקרת של הדפדפן אל רכיבים. ההגדרה הזו מאפשרת לקבוע איך יטופלו ניווט בתוך הדף, כמו .scrollTo()
או בקישורים.
האפשרות הזו שימושית במיוחד כשמשתמשים בה עם prefers-reduced-motion כדי לציין את התנהגות הגלילה על סמך העדפת המשתמש.
@media (prefers-reduced-motion: no-preference) {
.scroll-view {
scroll-behavior: auto;
}
}
overscroll-behavior
אם הגעתם פעם לסוף שכבת-על מודאלית, ולאחר מכן המשכתם לגלול והדף מאחורי תנועת שכבת-העל, זהו שרשור הגלילה, או מבעבע אל מאגר הגלילה ההורה. המאפיין overscroll-behavior
מאפשר למנוע זליגה של גלילה מעבר לקצה למאגר הורה (שנקראת שרשור גלילה).
בדיקת ההבנה
בחינת הידע שלכם לגבי גלישה
גלישת טקסט וגלישת רכיבים זהים?
בנכס overflow
מקבלים 2 מילות מפתח. מהו הציר הראשון?
איזה שטח במודל התיבה צורכים פסי גלילה כאשר הם מוצגים בתוך השורה?
כדי למשוך תנעה מיותרת מגלילה בגלילה משתמעת מקוננת, באיזה מאפיין להשתמש?
overscroll-effect
overscroll-behavior
scroll-padding
scroll-behavior
scroll-hint