Smart Websites
עיצוב Sticky Headers ללא JavaScript: המדריך ל-CSS Scroll-State Queries
איך מעצבים אלמנט דביק (Sticky) ברגע שהוא נתקע למעלה, בלי אירועי scroll ב-JS ובלי להקריב ביצועים? היכרות מעשית עם CSS Scroll-State Queries.
TL;DR
עד לאחרונה, כדי לדעת מתי תפריט נדבק למעלה (Sticky) ולשנות את הסטייל שלו, חובה הייתה להשתמש ב-JavaScript. בשנת 2026, תכונת ה-CSS Container Scroll-State Queries מאפשרת לנו לעשות בדיוק את זה — ב-CSS טהור, 0 שורות JS ו-60 פריימים בשנייה.
דמיינו את יובל, מפתח פרונט-אנד בצוות מוצר קטן ברחוב אחד העם בתל אביב. המעצבת הראשית הגישה לו סקיצה חדשה: תפריט עליון שנראה שקוף ומרווח בראש הדף, אבל ברגע שהמשתמש גולל למטה והתפריט נדבק לראש המסך — הוא צריך לקבל רקע לבן חצי-שקוף, צל עדין וטקסט קטן יותר.
נשמע פשוט, נכון? יובל חשב שזה ייקח לו עשר דקות. בפועל, זה לקח יומיים של מאבק בביצועים.
הבעיה: כשה-Scroll Listener הורג את הביצועים
במשך שנים, הדרך הסטנדרטית לפתור את הבעיה הזו הייתה לרוץ אל JavaScript.
הפיתרון המהיר של יובל היה להוסיף מאזין לאירוע גלילה: window.addEventListener('scroll'). כל פיקסל שהמשתמש גלל, הדפדפן הריץ פונקציה שבדקה את מכלול המרחקים במסך והוסיפה מחלקת CSS בשם is-sticky.
התוצאה? הגלילה במכשירים ניידים התחילה לגמגם. הדפדפן נדרש לחשב את חישובי ה-Layout מחדש עשרות פעמים בשנייה.
הצפת הדפדפן ב-Scroll Event Listeners היא הסיבה הראשונה לגמגום בגרפים של ה-FPS בניידים.
הניסיון הראשון שנכשל: Intersection Observer
כשאיטיות האתר התגלתה, יובל החליט לעבור לפתרון המתקדם יותר: IntersectionObserver.
הוא שתל אלמנט עזר בלתי נראה בראש הדף, מעל התפריט. ברגע שאותו אלמנט יצא מהמסך, ה-Observer הדליק את הסטייל של ה-Sticky.
זה עבד, אבל הקוד הרגיש עקום. שורות של JavaScript רק כדי לשנות צבע של תפריט? אלמנטים מיותרים ב-DOM? הרגשנו שיש דרך נכונה יותר.
- הגדרה · Container Scroll-State Queries
תכונה ב-CSS המאפשרת לאלמנט לתשאל את מצב הגלילה של אלמנט האב שלו (או של עצמו) — האם הוא כרגע נדבק (stuck), גלול (scrolled), או נמצא בקצה הגלילה.
הפתרון של 2026: Container Scroll-State Queries ב-CSS טהור
בשנה הזו, הסטנדרט השתנה לחלוטין. במקום להיאבק ב-JavaScript, אנחנו מגדירים את התפריט כ-Container מסוג scroll-state.
בואו נראה איך הקוד נראה. ראשית, מגדירים את ה-Container:
.header-wrapper {
container-type: scroll-state;
position: sticky;
top: 0;
}
ואז, בעזרת שאילתת קונטיינר פשוטה, אנחנו בודקים אם האלמנט במצב stuck:
@container scroll-state(stuck: top) {
.header-content {
background-color: rgba(255, 255, 255, 0.9);
backdrop-filter: blur(10px);
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
padding: 0.75rem 1rem;
}
}
אין שורת JavaScript אחת. אין מאזינים. אין אלמנטים מיותרים ב-HTML.
| שיטה | שורות JS | משאבי מעבד (CPU) | מורכבות HTML |
|---|---|---|---|
| Scroll Listener | ~15-20 | גבוהה מאוד | נמוכה |
| Intersection Observer | ~25-40 | בינונית | בינונית (דורש dummy node) |
| CSS Scroll-State Queries | 0 | אפסית (GPU native) | נקייה לחלוטין |
התוצאה: 0 שורות JS, ביצועים מושלמים ב-60FPS
כשיובל החליף את הקוד בטכניקה הזו, התוצאה הייתה מיידית.
גלילת העמוד חזרה להיות חלקות של 60 פריימים בשנייה. הדפדפן מבצע את כל חישובי הסטיילינג בשכבת ה-Compositor המהירה, מבלי לפנות למנוע ה-JavaScript כלל.
100%
חיסכון בקוד JavaScript עבור עיצוב אלמנטים דביקים
זה לא עובד רק על Sticky Headers. אפשר להשתמש בזה גם כדי:
- להוסיף הצללה לטבלאות רחבות כשהן נגללות אופקית.
- להציג כפתור צף רק כשהעמוד במצב נגלל.
- לשנות עיצוב של כרטיסיות נצמדות בלייאאוט מורכב.
רוצים לוודא שהאתר שלכם מותאם גם למנועי חיפוש וגם לחוויית משתמש מהירה? בדקו את הסקר GEO החינמי שלנו.
סיכום: הלקח של 2026
שנים התרגזנו שאי אפשר לשאול ב-CSS "האם האלמנט נדבק כרגע?". נאלצנו לכתוב פתרונות מורכבים ב-JS בשביל הפעולה הבסיסית ביותר בממשק.
היום, הפיתוח הנכון הוא זה שמחזיר ל-CSS את התפקיד העיצובי שלו ומשאיר ל-JS רק את הלוגיקה העסקית.
💡
בניית ממשק מהיר ב-2026 היא לא רק אופטימיזציה של קוד — היא בחירה בכלים הנכונים שמורידים את העומס מהדפדפן.
שאלות נפוצות
כל מה שעוד רצית לדעת
מה זה CSS Scroll-State Queries?
למה לא להשתמש ב-Intersection Observer כרגיל?
האם הטכניקה הזו פוגעת בביצועים?
כתב
אדיר בן יעקב · Adir Ben Yaakov
מקים JustBetterSite, סוכנות בניית אתרים ושיווק דיגיטלי בתל אביב. מתמחה ב-GEO (Generative Engine Optimization) — בנייה של אתרים שמופיעים בתשובות של ChatGPT, Claude, Perplexity ו-Gemini, לא רק בגוגל.
עוד עליי →להמשך הקריאה
מאמרים קשורים
Smart Websites
5 טעויות CSS שעולות לכם בשעות פיתוח (ואיך Cascade Layers פותר את זה)
מדריך מעשי לשימוש ב-CSS Cascade Layers (@layer) ב-2026. איך לנצח את מלחמת הספציפיות, לדרוס ספריות חיצוניות בנקיון ולשמור על קוד תחזוקתי.
המשךSmart Websites
5 טעויות בשימוש ב-View Transitions API שגורמות לאתר לגמגם
רוצים מעברים חלקים כמו באפליקציה בלי להעמיס ספריות JavaScript כבדות? הנה הטעויות הנפוצות במימוש View Transitions API ואיך לבנות אתר מהיר, יוקרתי ונקי ב-2026.
המשךSmart Websites
5 טעויות קריטיות בעיצוב Window Controls Overlay ב-PWA
מדריך מעשי לעיצוב סרגל כלים מותאם ב-PWA עם Window Controls Overlay API. למדו איך לנצל את שטח הכותרת העליון ב-2026 ולהימנע מטעויות UX יקרות.
המשך