Language EN
חיפוש

אז position:sticky לא עובד לכם? נסו את הפתרון הבא!

אם אתם חווים בעיות עם התכונה position:sticky ב-CSS, כלומר אם התכונה אינה עובדת לכם, הסיבה היא בדרך כלל אחת מאלו.

1. התכונה לא נתמכת על ידי הדפדפן שלכם

לפני שאתם בכלל ממשיכים עליכם לוודא אם התכונה position:sticky נתמכת על ידי הדפדפן שלכם. תוכלו לבדוק את תמיכת הדפדפנים בתכונה בקישור הבא.

2. לא מוגדר Placement

כדי שאלמנטים המוגדרים כ sticky יעבדו כראוי הם חייבים לכלול את אחת מהתכונות הבאות (placement properties), ואלו התכונות top, bottom, right, left.

.sticky-element {
  position: sticky;
  top: 0;
}

3. לאחד מאלמנטי האב יש תכונת overflow

אם לאלמנט ה-sticky קיים אלמנט אב כלשהו המכיל את התכונה overflow:hidden, התכונה overflow:auto, או התכונה overflow:scroll, אז התכונה position:sticky לא תעבוד כראוי. אותו אב יוצר הקשר גלילה חדש, ולכן האלמנט ה-sticky נצמד בתוך אותו container במקום ל-viewport.

ברוב המקרים הבעיה היא אלמנט אב עם overflow שונה מ-visible. בדקו את האלמנטים האבים קודם.

שתי סיבות נוספות: לאלמנט האב צריך להיות גובה מספיק כדי שהעמוד יגלול (אחרת אין למה להיצמד), ו-z-index נמוך או חסר יכול להשאיר את האלמנט ה-sticky מאחורי תוכן אחר.
הנה סניפט JavaScript שיאפשר לכם לגלות במהירות אם קיים אלמנט אב כזה לאלמנט שהגדרתם כ sticky המכיל את התכונה overflow. (מקור).

let parent = document.querySelector('.sticky-element').parentElement;

while (parent) {
    const hasOverflow = getComputedStyle(parent).overflow;
    if (hasOverflow !== 'visible') {
        console.log(hasOverflow, parent);
    }
    parent = parent.parentElement;
}

שאלות נפוצות

שאלות נפוצות על position: sticky שלא עובד:

למה position: sticky לא עובד?
בדרך כלל אחת משלוש: הדפדפן לא תומך (בדקו ב-caniuse), לא הוגדר top, bottom, left או right, או שלאחד מאלמנטי האב יש overflow שונה מ-visible. overflow על אלמנט אב הוא הסיבה הנפוצה ביותר.
חייבים להגדיר top או bottom ל-sticky?
כן. אלמנט sticky צריך לפחות אחד מ-top, bottom, left או right. בלי זה הדפדפן לא יודע איפה להצמיד. לדוגמה: position: sticky; top: 0;.
האם overflow: hidden על אלמנט אב שובר sticky?
כן. כל אלמנט אב עם overflow: hidden, overflow: auto או overflow: scroll יוצר הקשר גלילה חדש. האלמנט ה-sticky אז נצמד לאותו אב במקום ל-viewport, וזה נראה כאילו הוא לא עובד. השתמשו בסניפט שבפוסט כדי לאתר לאיזה אב יש overflow.
האם position: sticky עובד בכל הדפדפנים?
דפדפנים מודרניים תומכים. Internet Explorer לא. בדקו ב-caniuse.com/css-sticky. אם צריך תמיכה ב-IE, השתמשו ב-fallback או ב-polyfill.
אלמנט ה-sticky שלי מאחורי תוכן אחר. למה?
הקשר stacking: לאלמנט אחר יש z-index גבוה יותר או שהוא יוצר הקשר stacking חדש. תנו לאלמנט ה-sticky z-index גבוה מספיק (למשל z-index: 10 או יותר) כדי שיופיע מעל התוכן.

סיכום

רוב המקרים של "sticky לא עובד" נובעים מ-overflow על אלמנט אב, מחוסר top/bottom/left/right, או מתמיכת דפדפן. תקנו את אלה קודם; הסניפט למעלה עוזר לאתר overflow. למידע נוסף על layout ו-positioning ראו את מדריך CSS למתחילים ואת המדריך לתכונת @property ב-CSS.

דיון ותגובות
1 תגובות  ]
  • מ 28 יולי 2024, 10:09

    תודה תודה תודה!!!!!!! ל-chatGPT יש הרבה מה ללמוד ממך….
    ברור כמו שנה של לימודים!

השאירו תגובה

הוסיפו קוד באמצעות הכפתורים מטה. למשל, בכדי להוסיף PHP לחצו על הכפתור PHP והוסיפו את הקוד בתוך השורטקוד. מצאתם שגיאה בפוסט? עדכנו אותנו...

Savvy WordPress Development official logo