- 5 Prompt Templates לניווט — sticky nav, mega menu, hamburger, sidebar, command palette — מוכנים להעתקה ושימוש
- דמו View Transitions — שני עמודים עם מעבר חלק ו-shared element transition שנבנה עם AI
- Scroll Progress + Scroll Spy — אינדיקטור גלילה ומעקב סקציות עובדים
- 2 עצי החלטות — לבחירת סוג ניווט לפי סוג אתר, ולשימוש ב-View Transitions
- 5 תרגילים מעשיים — מ-sticky nav בסיסי ועד ניווט מלא משולב עם כל הרכיבים
- Navigation Checklist — 12 בדיקות שכל ניווט חייב לעבור לפני שיוצא לפרודקשן
- תוכלו לבנות 5+ סוגי ניווט מקצועיים עם פרומפט מדויק ל-AI — sticky, mega menu, hamburger, sidebar, command palette
- תוכלו להוסיף View Transitions API למעברי עמודים חלקים שמרגישים כמו אפליקציה native
- תוכלו ליצור scroll progress indicator ו-command palette שמשדרגים את חוויית הגלישה
- תוכלו לשלב ניווט + מעבר עמוד + אינדיקטור בחוויה אחידה ומלוטשת
- פרק 1 — מילון המונחים: הבנת המונחים responsive design, breakpoint, z-index stacking, glassmorphism, backdrop-filter, easing
- פרק 2 — Briefing AI: יכולת לכתוב brief מובנה ל-AI עם הוראות מדויקות
- כלים: גישה לכלי AI ליצירת אתרים (Claude, ChatGPT, v0, Bolt, Lovable — אחד מהם מספיק)
- תוכנה: Chrome או Edge (עדיף — תמיכה מלאה ב-View Transitions) + DevTools
- זמן משוער: 120-150 דקות (כולל 5 תרגילים מעשיים)
לאורך הקורס אתם בונים את היכולת לתת ל-AI brief מדויק שמייצר אתר WOW. בפרק 1 בניתם את אוצר המילים, בפרק 2 למדתם לכתוב brief מובנה, ובפרק 3 בניתם Hero Section מרהיב. עכשיו בפרק 4 אתם בונים את מערכת הניווט שמעבירה את המשתמש מה-hero לשאר האתר — בצורה חלקה, מקצועית ומרשימה. בפרק 5 נבנה את סקציות התוכן שהניווט מוביל אליהן.
| מונח (English) | קטגוריה | הגדרה בשורה אחת |
|---|---|---|
| Sticky Nav | Navigation | סרגל ניווט שנדבק לראש המסך בגלילה באמצעות position: sticky |
| Mega Menu | Navigation | תפריט נפתח רחב שמציג קטגוריות, תמונות וקישורים בפריסת grid |
| Hamburger Menu | Navigation | אייקון 3 קווים אופקיים שפותח/סוגר תפריט ניווט, בעיקר במובייל |
| Sidebar Navigation | Navigation | ניווט צדדי שנגלל פנימה/החוצה, נפוץ באפליקציות ובמובייל |
| Breadcrumbs | Navigation | נתיב ניווט היררכי שמראה את המיקום הנוכחי באתר — דף הבית → קטגוריה → עמוד |
| View Transitions API | Browser API | API של הדפדפן ליצירת אנימציות מעבר חלקות בין מצבי DOM או עמודים |
| Page Morphing | Animation | אלמנט שנראה כאילו הוא עובר בין עמודים באנימציה — shared element transition |
| Scroll Progress Indicator | UX | פס קידום בראש הדף שמראה את אחוז הגלילה — מ-0% ל-100% |
| Scroll Spy | JavaScript | מנגנון שמזהה את הסקציה הנוכחית במסך ומדגיש את הלינק המתאים בניווט |
| Command Palette | UX Pattern | חלון חיפוש מהיר שנפתח ב-Ctrl+K ומאפשר ניווט מהיר וביצוע פעולות |
| Active Link Indicator | UX | סימון ויזואלי (קו תחתון מונפש, רקע) שמסמן את הלינק הפעיל בניווט |
| IntersectionObserver | JavaScript API | API שמזהה מתי אלמנט נכנס/יוצא מאזור הצפייה — הבסיס ל-Scroll Spy |
| Focus Trap | Accessibility | טכניקה שמונעת מה-Tab לצאת ממודל/תפריט פתוח — חובה לנגישות |
4.4 מתכון: Hamburger עם אנימציית Morphing
ה-Hamburger Menu הוא 3 קווים אופקיים שהופכים ל-X כשלוחצים. נשמע פשוט? ההבדל בין חובבני למקצועי הוא האנימציה. hamburger בלי אנימציה — שפשוט מחליף מ-3 קווים ל-X ברגע — נראה כמו אתר מ-2015.
הטכניקה: 3 אלמנטי <span> (או span אחד עם ::before ו-::after). ב-state הרגיל — 3 קווים מאוזנים. ב-state פתוח: הקו האמצעי נעלם (opacity: 0), העליון מסתובב 45° ויורד למרכז, התחתון מסתובב -45° ועולה למרכז. תוצאה: X חלק.
Prompt Template — Hamburger Morphing
Build an animated hamburger menu icon with these specs:
- Structure: button with 3 span elements for the lines
- Default state: 3 horizontal lines, 24px wide, 2px height, 6px gap, white (#e2e8f0)
- Active state (class "active"):
- Middle line: opacity 0, scale 0
- Top line: rotate(45deg) + translateY to center
- Bottom line: rotate(-45deg) + translateY to center
- Result: smooth X shape
- Transition: all 0.3s cubic-bezier(0.68, -0.55, 0.27, 1.55) — spring feel
- Button size: 44x44px minimum (touch target)
- aria-label: "תפריט ניווט"
- aria-expanded: toggles true/false
- Toggle class "active" on click with JavaScript
- Color: white lines, on hover: #a855f7
- Only visible below 768px (display: none on desktop)
שימו לב ל-cubic-bezier(0.68, -0.55, 0.27, 1.55) — זה easing עם spring effect קל. הקווים לא פשוט מסתובבים — הם "קופצים" קצת לפני שמתייצבים. זה מה שנותן תחושה מקצועית.
Hamburger שמחליף מיידית מ-☰ ל-✕ בלי transition נראה חובבני. המשתמש לא מבין מה קרה — ה-icon פשוט "קפץ". תמיד הוסיפו transition של 250-300ms. המינימום: transition: transform 0.3s ease, opacity 0.3s ease;
העתיקו את הפרומפט וצרו hamburger icon מונפש. לחצו עליו 5 פעמים ברצף ובדקו: (1) האנימציה חלקה בכל פעם? (2) אין "קפיצה" בין המצבים? (3) ה-X מרוכז ומאוזן? אם הקווים לא נפגשים במרכז — צריך לכוון את ה-translateY.
SVG Path Morphing — הגרסה המתקדמת
אם רוצים אנימציה עוד יותר חלקה, אפשר לבנות את ה-hamburger מ-SVG paths ולהנפיש את ה-d attribute. ההבדל: במקום 3 קווים שמסתובבים, הצורה עצמה מתמורפת — כמו plasticine שמשנה צורה. זה דורש GSAP MorphSVG או CSS @property — מתקדם יותר, אבל התוצאה מרהיבה.
המלצה: התחילו עם גרסת ה-CSS (3 spans). אם הלקוח מבקש WOW נוסף — שדרגו ל-SVG morphing.
Hamburger Menu — מה קורה כשלוחצים?
ה-hamburger icon הוא רק הטריגר. מה שחשוב באמת: התפריט שנפתח. יש כמה סגנונות:
| סגנון | תיאור | Prompt Keyword |
|---|---|---|
| Slide-in from right | פאנל שנגלש מימין (RTL) עם overlay כהה מאחור | "slide-in mobile menu from right, dark overlay" |
| Full-screen overlay | תפריט שתופס את כל המסך עם רקע כהה ולינקים גדולים | "full-screen mobile menu, centered large links, fade-in" |
| Drop-down panel | תפריט שיורד מלמעלה כמו "וילון" | "dropdown mobile menu panel, slides down from nav" |
| Circular reveal | עיגול שמתרחב מה-hamburger וחושף את התפריט | "circular clip-path reveal menu from hamburger position" |
הסגנון הנפוץ ביותר: slide-in from right (ב-RTL) עם overlay. הוא פשוט, מוכר למשתמשים, ועובד טוב עם swipe gesture לסגירה. אם רוצים WOW — full-screen overlay עם אנימציית stagger על הלינקים (כל לינק נכנס עם 50ms delay אחרי הקודם) נראה מרהיב.
תמחור: בשוק הישראלי, hamburger menu מקצועי עם אנימציה (ללא AI) עולה כ-₪500-₪1,500 כחלק מפיתוח ניווט מלא. עם AI ופרומפט מדויק? חלק מהניווט שנבנה ב-5 דקות.
Accessibility reminder: ה-hamburger button חייב לכלול: aria-label="תפריט ניווט", aria-expanded="false" (שמתחלף ל-"true" כשהתפריט פתוח), ו-aria-controls="mobile-menu" שמצביע על ה-ID של התפריט. בלי אלה, screen readers לא יודעים שזה כפתור שפותח תפריט. ב-prompt: "hamburger button with aria-label, aria-expanded, aria-controls for accessibility".
Z-index trap: hamburger menu שנפתח צריך z-index גבוה מכל דבר אחר בדף — כולל ה-hero, כולל modals. טעות נפוצה: ה-hamburger menu נפתח אבל חלקים ממנו מוסתרים מתחת ל-hero section שיש לו z-index: 100. תמיד הגדירו z-index: 9999 על ה-mobile menu overlay ובדקו בכל הדפים.
4.6 View Transitions API — מעברי עמודים כמו אפליקציה
זה הרכיב שהופך אתר מ"אוסף דפים" ל"חוויה": View Transitions API. במקום שעמוד אחד נעלם ועמוד שני מופיע ברגע (ה-"בליק" הלבן שכולנו מכירים) — התוכן זורם, כותרות זזות למקום החדש, תמונות מתרחבות. כמו אפליקציה native.
תמיכת דפדפנים (אפריל 2026):
| דפדפן | Same-Document | Cross-Document (MPA) |
|---|---|---|
| Chrome | 111+ ✅ | 126+ ✅ |
| Edge | 111+ ✅ | 126+ ✅ |
| Safari | 18+ ✅ | בפיתוח ⏳ |
| Firefox | 144+ ✅ | בפיתוח ⏳ |
Same-document transitions (SPA) נתמכות בכל הדפדפנים המודרניים ונכנסו ל-Baseline Newly Available בדצמבר 2025. Cross-document transitions (MPA — מעבר בין עמודי HTML שונים) עובדות כרגע רק ב-Chrome ו-Edge.
איך משתמשים — הגרסה הפשוטה
הקוד הבסיסי ב-JavaScript:
// SPA: עוטפים את ה-DOM update ב-startViewTransition
document.startViewTransition(() => {
// כאן מעדכנים את התוכן
document.querySelector('.content').innerHTML = newContent;
});
// CSS: שם ייחודי לאלמנטים ש"עוברים" בין מצבים
.page-title {
view-transition-name: page-title;
}
.hero-image {
view-transition-name: hero-image;
}
// CSS: התאמה אישית של האנימציה
::view-transition-old(page-title) {
animation: fade-out 0.25s ease-in;
}
::view-transition-new(page-title) {
animation: fade-in 0.25s ease-out;
}
מה קורה כאן:
- אתם קוראים ל-
startViewTransition()עם callback שמעדכן את ה-DOM - הדפדפן מצלם snapshot של המצב הישן
- ה-callback רץ — ה-DOM מתעדכן
- הדפדפן מצלם snapshot של המצב החדש
- הדפדפן מנפיש בין שני ה-snapshots — cross-fade כברירת מחדל, או morphing אם יש
view-transition-nameתואם
Page Morphing — אלמנטים ש"עפים" בין עמודים
ה-WOW האמיתי הוא Page Morphing: אלמנט בעמוד A שנראה כאילו הוא עובר פיזית לעמוד B. תחשבו על תמונה בכרטיס שמתרחבת לתמונת header כשנכנסים לעמוד הפרטים — בדיוק כמו באפליקציית iOS.
כל מה שצריך: אותו view-transition-name על האלמנט בשני המצבים. הדפדפן עושה את השאר.
דוגמאות מעשיות ל-Page Morphing:
| מהעמוד | לעמוד | מה מתמורפט | הרגשה |
|---|---|---|---|
| רשימת מוצרים | עמוד מוצר | תמונת מוצר מתרחבת, כותרת זזה למעלה | כמו אפליקציית חנות |
| רשימת בלוג | מאמר | כותרת וכותב "עפים" למקום בעמוד המאמר | כמו Medium או Substack |
| גלריית פרויקטים | עמוד פרויקט | תמונה ראשית מתרחבת ל-hero | כמו Behance או Dribbble |
| Dashboard | Detail view | כרטיס נתון מתרחב לעמוד מלא | כמו אפליקציית BI |
הכלל: Page morphing עובד הכי טוב כשיש אלמנט ויזואלי ברור (תמונה, כותרת) ששני העמודים חולקים. אם אין אלמנט משותף — Cross-fade רגיל (ברירת המחדל) נראה מצוין.
Cross-Document Transitions (MPA)
אם האתר שלכם הוא MPA (Multi-Page Application — דפי HTML נפרדים, לא React/Vue), אפשר להפעיל View Transitions בין עמודים בלי JavaScript כמעט. מספיק להוסיף ב-CSS:
/* בשני העמודים — ב-CSS */
@view-transition {
navigation: auto;
}
/* אלמנט משותף */
.page-title {
view-transition-name: page-title;
}
.hero-image {
view-transition-name: hero-image;
}
זה עובד רק ב-Chrome/Edge 126+. ב-Safari ו-Firefox — הדף פשוט נטען כרגיל, בלי אנימציה. זה בדיוק progressive enhancement — אין נזק, רק בונוס.
Cross-document transitions עובדות רק ב-Chrome/Edge. אם לא מוסיפים fallback, הדף נשבר בדפדפנים אחרים. תמיד עטפו:
if (document.startViewTransition) {
document.startViewTransition(() => updateDOM());
} else {
updateDOM(); // פשוט מעדכנים בלי אנימציה
}
זה progressive enhancement — הדף עובד בכל מקום, האנימציה היא בונוס בדפדפנים שתומכים.
View Transitions ב-Frameworks: אם אתם עובדים עם React, Vue או Svelte — שילוב View Transitions קצת שונה. ב-React, למשל, עוטפים את ה-router change. ב-Next.js 14+ ו-Nuxt 3.4+ יש תמיכה built-in ב-View Transitions — לא צריך לכתוב את הקוד ידנית. בפרומפט ל-AI: "Add View Transitions support using the framework's built-in transition API".
Performance note: View Transitions לא פוגעות בביצועים — הדפדפן עושה את ה-animation על layer נפרד (compositor). אין layout recalculation, אין repaints. ה-DOM update קורה ברגע, והאנימציה היא רק ויזואלית. בגלל זה progressive enhancement עובד כל כך טוב — אם הדפדפן לא תומך, ה-DOM update פשוט קורה מיידית בלי עיכוב.
הוסיפו view-transition-name: hero-title; לכותרת ה-hero בדף אחד. צרו דף שני עם אותו class ואותו view-transition-name. עטפו את הניווט ב-startViewTransition(). צפו בכותרת "עפה" בין העמודים.
Prompt Template — View Transitions
Build a two-page demo with View Transitions API:
- Page 1: Grid of 3 product cards, each with image + title + price
- Page 2: Full product detail page with hero image + title + description
- When clicking a card, use document.startViewTransition() to navigate
- Shared elements: image (view-transition-name: product-image), title (view-transition-name: product-title)
- Image should morph from card size to full-width hero
- Title should slide from card position to page title position
- Default transition: cross-fade 0.3s for everything else
- Add fallback for browsers without View Transitions support
- Smooth back navigation with browser back button
- Dark theme: #1e1e2e background, #e2e8f0 text, #a855f7 accents
- RTL layout, Hebrew content
- Prices in NIS: ₪99, ₪149, ₪299
| מצב | המלצה | למה |
|---|---|---|
| SPA (React, Vue, Svelte) | כן — same-document transitions | תמיכה מלאה בכל הדפדפנים המודרניים |
| MPA פשוט (HTML pages) | כן עם fallback — cross-document | Chrome/Edge בלבד, אבל progressive enhancement |
| תוכן קריטי (checkout, forms) | דלגו — מהירות > אנימציה | אנימציות מאטות UX כשהמשתמש ממהר |
| תיק עבודות / showcase | בהחלט! — full morphing | ה-WOW factor הוא חלק מהמוצר |
| אתר ישן עם jQuery | אפשרי — מתחילים עם cross-fade | Progressive enhancement, לא צריך refactor |
מטרה: לבנות שני עמודים עם מעבר חלק ו-shared element transition.
- העתיקו את prompt template מסעיף 4.6 ל-AI שלכם
- בנו עמוד 1: grid של 3 כרטיסי מוצר עם תמונה, כותרת ומחיר (₪)
- בנו עמוד 2: עמוד פרטי מוצר עם תמונה גדולה ותיאור
- הגדירו
view-transition-nameעל התמונה והכותרת בשני העמודים - הוסיפו fallback:
if (!document.startViewTransition) - בדקו ב-Chrome: האם התמונה "עפה" מהכרטיס לעמוד המוצר?
תוצאה מצופה: לחיצה על כרטיס → התמונה מתרחבת בצורה חלקה → עמוד המוצר נטען עם אנימציית morphing.
4.7 Scroll Progress Indicator ו-Scroll Spy
שני רכיבים שמשדרגים כל אתר עם תוכן ארוך:
Scroll Progress Indicator — פס צבעוני בראש הדף שמתמלא ככל שגוללים למטה. כשאתם ב-50% של הדף — הפס ב-50%. פשוט, אלגנטי, ועוזר למשתמש להבין כמה נשאר. תראו אותו ב-Medium, ב-Dev.to, ובאתרי חדשות מודרניים.
Scroll Spy — מנגנון שמזהה את הסקציה הנוכחית שהמשתמש רואה ומדגיש את הלינק המתאים בניווט. כשגוללים לסעיף "שירותים" — הלינק "שירותים" בניווט מקבל highlight. זה עוזר למשתמש לדעת איפה הוא נמצא בדף.
Scroll Progress — שתי דרכים
דרך 1: JavaScript (עובד בכל מקום)
// HTML: <div class="progress-bar"></div>
const progressBar = document.querySelector('.progress-bar');
window.addEventListener('scroll', () => {
const scrollTop = document.documentElement.scrollTop;
const scrollHeight = document.documentElement.scrollHeight
- document.documentElement.clientHeight;
const progress = (scrollTop / scrollHeight) * 100;
progressBar.style.width = progress + '%';
});
דרך 2: CSS Pure (Chrome/Edge בלבד)
.progress-bar {
position: fixed;
top: 0;
left: 0; /* RTL: right: 0 for fill from right */
width: 100%;
height: 3px;
background: linear-gradient(90deg, #a855f7, #7c3aed);
transform-origin: left;
animation: grow-progress auto linear;
animation-timeline: scroll();
}
@keyframes grow-progress {
from { transform: scaleX(0); }
to { transform: scaleX(1); }
}
גרסת ה-CSS משתמשת ב-animation-timeline: scroll() — נקייה ומבלי JavaScript, אבל נתמכת רק ב-Chrome/Edge (אפריל 2026). המלצה: השתמשו בגרסת JS כברירת מחדל, והוסיפו CSS כ-progressive enhancement.
עיצוב ה-Progress Bar — מעבר ל-Default
פס פשוט בגובה 3px עובד, אבל יש כמה שדרוגים שמוסיפים polish:
| וריאציה | CSS | אפקט |
|---|---|---|
| Gradient | background: linear-gradient(90deg, #a855f7, #ec4899); | פס צבעוני שמשתנה מסגול לוורוד |
| Glow | box-shadow: 0 0 10px #a855f7, 0 0 20px rgba(168,85,247,0.3); | זוהר סביב הפס — eye-catching |
| Rounded tip | border-radius: 0 0 4px 0; (RTL: left radius) | קצה מעוגל נראה יותר organic |
| Under nav | top: 64px; (גובה הניווט) | הפס מתחת לניווט, לא מעליו |
בפרומפט: "Scroll progress bar at top, 3px height, purple gradient (#a855f7 to #ec4899), subtle glow effect, positioned just below the sticky nav".
אם יש לכם תמונות עם lazy loading, גובה הדף משתנה תוך כדי גלילה — האינדיקטור קופץ. פתרון: הגדירו min-height או aspect-ratio על containers של תמונות, או השתמשו ב-ResizeObserver שמעדכן את החישוב כשגובה הדף משתנה.
Scroll Spy עם IntersectionObserver
בעבר, scroll spy דרש האזנה ל-scroll event + חישובים מסובכים. היום יש IntersectionObserver — API שמודיע לכם מתי אלמנט נכנס/יוצא מאזור הצפייה. הרבה יותר performant ופשוט:
const sections = document.querySelectorAll('section[id]');
const navLinks = document.querySelectorAll('.nav-link');
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
navLinks.forEach(link => link.classList.remove('active'));
const activeLink = document.querySelector(
`.nav-link[href="#${entry.target.id}"]`
);
if (activeLink) activeLink.classList.add('active');
}
});
}, { rootMargin: '-20% 0px -80% 0px' });
sections.forEach(section => observer.observe(section));
ה-rootMargin: '-20% 0px -80% 0px' אומר: "חשב סקציה כ-active כשהיא ב-20% העליונים של המסך". זה נותן תחושה טבעית — הסקציה מסומנת כשמתחילים לקרוא אותה, לא כשמגיעים לסופה.
למה IntersectionObserver ולא scroll event?
בעבר, scroll spy נבנה עם window.addEventListener('scroll', ...) וחישוב ידני של getBoundingClientRect() לכל סקציה. הבעיה: scroll event מופעל עשרות פעמים בשנייה בכל pixel של גלילה, ו-getBoundingClientRect() גורם ל-layout recalculation (forced reflow) — שני הדברים הכי יקרים ביצועית.
IntersectionObserver הוא async — הדפדפן מחשב את ה-intersections בזמן שלו, מחוץ ל-main thread. הקוד קצר יותר, ביצועים טובים פי 5-10, ואין צורך ב-throttle/debounce.
| שיטה | ביצועים | קוד | תמיכה |
|---|---|---|---|
| scroll event + getBoundingClientRect | בינוני-נמוך (forces layout) | ~25 שורות + throttle | כל הדפדפנים |
| IntersectionObserver | גבוה (async, no layout force) | ~15 שורות, ללא throttle | כל הדפדפנים המודרניים |
| CSS scroll-driven (עתידי) | הכי גבוה (pure CSS) | ~5 שורות CSS | Chrome/Edge בלבד |
המלצה: תמיד השתמשו ב-IntersectionObserver ל-scroll spy. אין סיבה להשתמש ב-scroll event ב-2026 אלא אם צריכים את ה-pixel-level precision (כמו ב-progress bar).
Active Link Indicator — הנגיעה הסופית
כשה-scroll spy מזהה סקציה חדשה, הלינק בניווט מקבל .active class. ה-CSS שהופך את זה למרשים:
.nav-link {
position: relative;
}
.nav-link.active::after {
content: '';
position: absolute;
bottom: -4px;
right: 0; /* RTL */
width: 100%;
height: 2px;
background: #a855f7;
animation: slide-in 0.3s ease-out;
}
@keyframes slide-in {
from { transform: scaleX(0); }
to { transform: scaleX(1); }
}
הוסיפו scroll progress bar לדף שלכם (העתיקו את קוד ה-JavaScript למעלה). גללו עד הסוף ובדקו: האם הרוחב מגיע ל-100%? אם לא — ייתכן שיש lazy loading שמשנה את גובה הדף. הוסיפו min-height על כל container של תמונה.
4.8 Command Palette (Ctrl+K) — חיפוש מהיר כמו מקצוענים
אם השתמשתם ב-VS Code, Notion, Figma, או GitHub — אתם מכירים את הפטרן: לוחצים Ctrl+K (או Cmd+K ב-Mac), נפתח חלון חיפוש, מקלידים מה שמחפשים, ומגיעים לשם בשנייה. זה Command Palette — ובשנתיים האחרונות הוא עבר מכלי למפתחים לסטנדרט ב-SaaS ואפילו באתרי eCommerce.
למה הוא כל כך טוב?
- מהירות: לחיצה אחת + הקלדה > ניווט בתפריטים עם 3-4 לחיצות
- Discoverability: המשתמש מגלה עמודים ופעולות שלא ידע שקיימים
- Power user love: משתמשים מנוסים מרגישים "בבית"
- מובייל: נפתח גם עם כפתור חיפוש — לא חייבים keyboard shortcut
Prompt Template — Command Palette
Build a command palette (Ctrl+K) with these specs:
- Trigger: Ctrl+K (Windows) / Cmd+K (Mac), or click on search icon in nav
- UI: centered dialog, 500px wide, dark theme (#1e1e2e bg, #2a2a3e input bg)
- Search input at top with "חפש עמודים, פעולות..." placeholder
- Results list below with max 8 visible items, scrollable
- Categories: "עמודים" (pages), "פעולות" (actions), "לאחרונה" (recent)
- Each result: icon + title (Hebrew) + optional keyboard shortcut badge
- Keyboard navigation: Arrow up/down to select, Enter to activate, Escape to close
- Fuzzy search: typing "שיר" finds "שירותים" and "שיווק"
- Backdrop: semi-transparent overlay behind palette
- Entrance: scale(0.95)→scale(1) + opacity 0→1, 200ms ease-out
- Exit: reverse, 150ms
- Focus: auto-focus on input when opened
- Highlight: selected item has #a855f7 left border + darker bg
- RTL layout, Hebrew labels
- Show "אין תוצאות" when no matches found
- Close on click outside or Escape
לפני שבונים — לכו לבדוק את המקור: לחצו Ctrl+K באתרים האלה: GitHub, Vercel, Notion. שימו לב: מה משותף? (רמז: dark background, search input at top, keyboard navigation, fuzzy search). זה ה-pattern שאנחנו מייצרים.
מתי כן ומתי לא
Command palette הוא לא לכל אתר:
- כן: SaaS, dashboard, אתר תיעוד, פלטפורמה עם הרבה עמודים
- כן: אתר עם 20+ עמודים שקשה לנווט בתפריט רגיל
- לא: landing page עם עמוד אחד
- לא: אתר תדמית קטן עם 5 עמודים — overkill
תמחור בשוק הישראלי: הוספת command palette לאתר קיים = בערך 3-5 שעות עבודה (₪1,500-₪3,000 אם מזמינים ממפתח). עם AI ופרומפט טוב? 30 דקות.
האנטומיה של Command Palette מצוין
כל command palette מצוין מורכב מ-6 רכיבים:
| רכיב | תפקיד | חובה / אופציונלי |
|---|---|---|
| Backdrop | שכבת overlay כהה שממקדת תשומת לב בחלון החיפוש | חובה — בלי backdrop הפלטה "צפה" בלי הקשר |
| Search Input | שדה חיפוש עם auto-focus ו-placeholder מנחה | חובה — הלב של הפלטה |
| Results List | רשימת תוצאות מסוננות עם highlight על הפריט הנבחר | חובה |
| Categories | סיווג תוצאות: "עמודים", "פעולות", "לאחרונה" | אופציונלי — אבל מומלץ מאוד |
| Shortcut Badges | תגי keyboard shortcut ליד כל פעולה (כמו Ctrl+N) | אופציונלי — מלמד power users |
| Empty State | "אין תוצאות" עם הצעה לחיפוש אחר | חובה — חייב להיות ברור שאין תוצאות, לא שהחיפוש נתקע |
Fuzzy Search — חובה בעברית: חיפוש מדויק בעברית בעייתי — אנשים מקלידים "שרות" במקום "שירות" או "srvs" במקום "services". Fuzzy search מוצא תוצאות גם עם שגיאות. בפרומפט: "Add fuzzy search that finds partial matches in Hebrew and English".
ספריות מומלצות: אם אתם בונים ב-React, cmdk (מ-Rauno Freiberg, היוצר של Vercel's design) ו-kbar הן שתי הספריות הפופולריות ביותר. הן composable, unstyled (אתם מעצבים), ותומכות ב-keyboard navigation מלא. לפרויקטים בלי React — vanilla JS עם הפרומפט שלמעלה עובד מצוין.
Accessibility בפלטה: Command palette חייבת לעמוד ב-WCAG:
role="dialog"ו-aria-modal="true"על ה-containerrole="combobox"על ה-search inputrole="listbox"על רשימת התוצאות,role="option"על כל תוצאהaria-activedescendantשמעודכן כשמנווטים עם Arrow keysaria-label="חיפוש מהיר"על ה-dialog
בפרומפט: "Command palette must be fully accessible with ARIA roles: dialog, combobox, listbox, option". ה-AI יוסיף את כל ה-attributes הנכונים.
מטרה: לבנות command palette עובד עם חיפוש ומקלדת.
- העתיקו את prompt template למעלה ל-AI שלכם
- הוסיפו 10 פריטי ניווט: 5 עמודים + 3 פעולות + 2 "לאחרונה"
- בדקו: Ctrl+K פותח, Escape סוגר, Arrow keys מנווטים, Enter מפעיל
- הקלידו חיפוש — האם ה-fuzzy search עובד? (חיפוש חלקי מוצא תוצאות?)
- עצבו dark theme שמתאים לאתר שלכם
תוצאה מצופה: command palette שנפתח ב-Ctrl+K, מחפש בעברית, ומנווט עם מקלדת — בדיוק כמו ב-Notion.
4.9 הקומבו המנצח — Sticky + Progress + Blur + Spy
למדנו כל רכיב בנפרד. עכשיו מגיע הרגע ששווה את כל הפרק: חיבור הכל ביחד.
הקומבו הנפוץ ביותר ב-2025 לאתרים עם תוכן:
- Sticky Nav עם Blur — הבסיס, תמיד שם
- Scroll Progress Bar — מעל הניווט, מראה כמה נשאר
- Scroll Spy — מדגיש את הסקציה הנוכחית בניווט
- Active Link Indicator — קו תחתון שזז בין הלינקים
ביחד, ארבעת הרכיבים יוצרים חוויה שאומרת למשתמש: "אתה יודע בדיוק איפה אתה, כמה נשאר, ואיך להגיע לכל מקום." זה ההבדל בין אתר שגוללים בו בבלבול לבין אתר שמרגיש כמו אפליקציה.
דוגמאות מהשטח — מי עושה את זה טוב?
בואו נראה איך אתרים אמיתיים משלבים את הקומבו:
| אתר | Sticky + Blur | Progress | Spy | Transitions | תוצאה |
|---|---|---|---|---|---|
| Linear.app | ✅ blur מושלם | ❌ | ✅ סקציות | ✅ SPA routes | מרגיש כמו אפליקציה desktop |
| Stripe.com | ✅ שקוף → solid | ❌ | ❌ | ✅ page morph | clean ומקצועי |
| Dev.to | ✅ hide on scroll down | ✅ top bar | ❌ | ❌ | focus על תוכן |
| MDN Web Docs | ✅ sticky sidebar | ❌ | ✅ TOC sidebar | ❌ | תיעוד קל לניווט |
| Vercel.com | ✅ blur + shrink | ❌ | ❌ | ✅ Cmd+K palette | power user paradise |
שימו לב: אף אחד מהאתרים הללו לא משתמש בכל הרכיבים ביחד. כל אחד בוחר את הקומבינציה שמתאימה לסוג התוכן שלו. הכלל: sticky + blur הוא בסיס חובה. הוסיפו 1-2 רכיבים נוספים לפי הצורך — לא יותר.
אם אתם בונים אתר עם תוכן ארוך (בלוג, תיעוד, קורס) — הקומבו שעובד הכי טוב: sticky blur + progress bar + scroll spy. שלושת אלה ביחד נותנים למשתמש תחושה של שליטה ומיקום בלי להכביד על הממשק.
אם אתם בונים SaaS או פלטפורמה — הקומבו: sticky blur + command palette (Ctrl+K) + View Transitions. Power users אוהבים keyboard shortcuts, והמעברים החלקים עושים הבדל עצום בתחושת ה-UX.
Prompt Template — הקומבו המלא
Build a complete navigation experience:
1. STICKY NAV:
- position: sticky, top: 0, z-index: 1000
- backdrop-filter: blur(12px) when scrolled
- 5 section links with smooth scroll behavior
2. SCROLL PROGRESS BAR:
- Fixed at very top (above nav), 3px height
- Gradient: #a855f7 to #7c3aed
- Width updates on scroll from 0% to 100%
3. SCROLL SPY:
- IntersectionObserver watches all sections
- Adds .active class to matching nav link
- rootMargin: '-20% 0px -80% 0px'
4. ACTIVE LINK INDICATOR:
- Animated underline on .active nav link
- 2px purple line with slide-in animation
5. RESPONSIVE:
- Desktop: full horizontal nav
- Mobile (below 768px): hamburger menu
RTL layout, Hebrew content, dark theme
Smooth scroll: scroll-behavior: smooth on html
Performance: single scroll listener with requestAnimationFrame
Performance — בלי לשבור את הדף
כשמשלבים scroll listener + IntersectionObserver + backdrop-filter — צריך לשים לב לביצועים:
| רכיב | עלות ביצועים | אופטימיזציה |
|---|---|---|
| Scroll listener | בינונית — מופעל בכל pixel של גלילה | השתמשו ב-requestAnimationFrame, אל תקראו layout properties |
| IntersectionObserver | נמוכה — async, לא חוסם | אין צורך באופטימיזציה — כבר performant |
| backdrop-filter | בינונית-גבוהה — GPU intensive | will-change: backdrop-filter רק על הניווט |
| Progress bar width | נמוכה — compositor property | השתמשו ב-transform: scaleX() במקום width |
טריק מפתח: במקום לעדכן width של progress bar, השתמשו ב-transform: scaleX(progress). ל-transform יש ביצועים הרבה יותר טובים כי הוא רץ על ה-GPU (compositor thread) ולא גורם ל-layout recalculation.
איך לוודא שהקומבו עובד ב-RTL
כשמשלבים את כל הרכיבים ביחד, RTL יכול לשבור דברים. הנה רשימת בדיקות:
| רכיב | בדיקת RTL | מה לתקן אם שבור |
|---|---|---|
| Sticky Nav | לוגו בימין, CTA בשמאל? | הוסיפו direction: rtl ל-nav container |
| Hamburger | הכפתור בצד שמאל (RTL standard)? | שימו ב-flex: order: -1 על ה-hamburger |
| Progress Bar | ממלא מימין לשמאל? | transform-origin: right במקום left |
| Scroll Spy | Active indicator בצד הנכון? | שנו left ל-right ב-::after |
| Sidebar | נגלש מימין? | right: 0; translateX(100%) במקום left |
| Breadcrumbs | חיצים בכיוון הנכון? | השתמשו ב-← (שמאלה) לא ב-→ |
Pro tip: בפרומפט ל-AI, תמיד ציינו "RTL layout, Hebrew content" בהתחלה. זה חוסך 80% מבעיות ה-RTL כי ה-AI מתחשב בזה מההתחלה. אם שוכחים ומוסיפים RTL אחרי — צריך לתקן הרבה דברים.
Smooth Scroll — הבסיס ששוכחים
לפני שכל הרכיבים המתקדמים עובדים, צריך דבר אחד בסיסי: smooth scrolling. בלי זה, לחיצה על לינק בניווט שמפנה ל-anchor ("שירותים" → #services) קופצת לסקציה ברגע. עם smooth scroll, הדף גולל בצורה חלקה:
/* CSS — שורה אחת שמשנה הכל */
html {
scroll-behavior: smooth;
}
/* עם offset לניווט sticky */
html {
scroll-behavior: smooth;
scroll-padding-top: 80px; /* גובה הניווט */
}
ה-scroll-padding-top חשוב: בלי זה, הסקציה שגוללים אליה תיחתך מתחת לניווט ה-sticky. הערך צריך להיות לפחות כגובה הניווט שלכם (בדרך כלל 60-80px).
שימו לב: scroll-behavior: smooth מכובד גם על ידי prefers-reduced-motion. אם למשתמש יש הגדרה שמבקשת פחות אנימציה, הדפדפן יתעלם מ-smooth ויקפוץ ישירות. זה בדיוק הנכון — נגישות מובנית.
בפרומפט ל-AI, הוסיפו תמיד: "html { scroll-behavior: smooth; scroll-padding-top: 80px; }" — זה מבטיח שניווט anchor-based עובד חלק עם sticky nav.
JavaScript alternative: אם צריכים שליטה מדויקת יותר (למשל, easing שונה), אפשר להשתמש ב-JavaScript:
document.querySelector('#services').scrollIntoView({
behavior: 'smooth',
block: 'start'
});
היתרון: אפשר להוסיף callback אחרי שהגלילה נגמרת, לשלוט ב-timing, ולשלב עם View Transitions. החיסרון: יותר קוד ותלות ב-JavaScript.
ביצועים — Benchmark לניווט
אחרי שבניתם את הקומבו, הריצו את הבדיקות הבאות:
| מטריקה | יעד | כלי | מה לתקן אם נכשל |
|---|---|---|---|
| TBT (Total Blocking Time) | < 200ms | Lighthouse | הסירו scroll listeners כבדים, השתמשו ב-IntersectionObserver |
| CLS (Cumulative Layout Shift) | < 0.1 | Lighthouse | הגדירו fixed height לניווט, אל תשנו גובה dynamically |
| FPS בגלילה | 58+ fps | Chrome Performance tab | הוסיפו will-change ל-backdrop-filter, השתמשו ב-transform במקום width |
| Accessibility Score | 95+ | Lighthouse | הוסיפו aria-labels, focus visible, keyboard navigation |
דוגמאות מייצגות מהשוק הישראלי: אתרי SaaS ישראליים כמו Monday.com ו-Fiverr משקיעים הרבה בניווט. Monday.com משתמשים ב-sticky nav עם command palette (Ctrl+K), sidebar navigation ב-dashboard, ו-breadcrumbs בעמודים פנימיים. Fiverr משתמשים ב-mega menu עם קטגוריות ותמונות. שניהם דוגמאות מצוינות לחקות.
העתיקו את prompt הקומבו ל-AI ובנו אותו. אחר כך פתחו Lighthouse ב-Chrome DevTools וריצו performance audit. בדקו: האם ה-TBT (Total Blocking Time) מתחת ל-200ms? אם לא — ייתכן שה-scroll listener כבד מדי. הוסיפו requestAnimationFrame.
מטרה: לבנות חוויית ניווט מלאה שמשלבת את כל מה שלמדנו.
- שלבו: sticky nav + blur + hamburger mobile + scroll progress + scroll spy + active indicator
- הוסיפו View Transitions בין 2 עמודים (מעמוד ראשי לעמוד פנימי)
- בדקו responsive: desktop = full nav + progress, mobile = hamburger + progress
- בדקו ביצועים: Lighthouse performance score > 90, TBT < 200ms
- בדקו נגישות: כל הניווט עובד עם מקלדת, focus visible, Escape סוגר
- בדקו RTL: הכל מיושר נכון, breadcrumbs בכיוון הנכון
תוצאה מצופה: אתר עם חוויית ניווט ברמה של Linear, Vercel, או Stripe — חלק, מקצועי, עם מעברים שמרגישים כמו magic.
4.10 סיכום ו-Navigation Checklist
עברנו דרך ארוכה: מ-sticky nav בסיסי, דרך mega menu נגיש ו-hamburger מונפש, ועד View Transitions שהופכות מעבר בין עמודים לחוויה קולנועית. הנה מה שבניתם:
- 5 Prompt Templates — לכל סוג ניווט: sticky, mega menu, hamburger, sidebar, command palette
- דמו View Transitions — שני עמודים עם page morphing ו-fallback
- Scroll Progress + Spy — אינדיקטורים שעוזרים למשתמש לדעת איפה הוא
- הקומבו המנצח — sticky + blur + progress + spy = חוויה שלמה
- 2 Frameworks — בחירת ניווט לפי סוג אתר, ומתי להשתמש ב-View Transitions
הנקודה המרכזית: ניווט מקצועי הוא לא רק "כפתורים שעובדים" — הוא חוויה שאומרת למשתמש "אני יודע בדיוק איפה אני, ואיך להגיע לכל מקום." עם הפרומפטים הנכונים, AI יכול לבנות את זה תוך דקות.
מה למדתם:
- כל ניווט מתחיל עם sticky nav + blur — זה הבסיס שנותן תחושה מקצועית מיידית
- Mega menu חייב להיות נגיש: Tab, Escape, Arrow keys — בלי מקלדת = שבור
- Hamburger חייב אנימציית morphing — instant toggle נראה חובבני
- View Transitions API הופכת מעבר בין עמודים לחוויה — ו-progressive enhancement אומר שאין סיכון
- Scroll spy + progress ביחד נותנים למשתמש תחושת שליטה ומיקום
- Command palette הוא pattern שהולך ומתפשט — הוסיפו אותו לכל SaaS או אתר עם הרבה עמודים
- RTL חייב להיות בפרומפט מההתחלה — לא "נתקן אחר כך"
מה הלאה: בפרק 5 נבנה את סקציות התוכן והכרטיסים — הגוף של האתר שהניווט שלכם מוביל אליו. כל bento grid, pricing table ו-FAQ accordion ייקבלו prompt template מדויק.
בכל אתר חדש (יומי):
- התחילו עם sticky nav + blur — זה הבסיס
- השתמשו ב-framework לבחירת סוג ניווט לפי סוג האתר
- בדקו keyboard navigation לפני שמציגים ללקוח
פעם בשבוע:
- בדקו אתרים חדשים שנוצרו עם AI — האם View Transitions נתמכות כבר?
- בדקו caniuse.com לעדכונים ב-View Transitions ו-scroll-driven animations
פעם בחודש:
- עדכנו את ה-prompt templates שלכם לפי שינויים בתמיכת דפדפנים
- בדקו ספריות command palette חדשות (cmdk, kbar) — האם יש גרסה טובה יותר?
5 Prompt Templates — סיכום מהיר
הנה כל 5 ה-prompt templates שלמדנו, בקיצור. שמרו את הטבלה הזו — היא השליף שלכם:
| # | סוג ניווט | Prompt Core Phrase | סעיף |
|---|---|---|---|
| 1 | Sticky Nav + Blur | "sticky nav, backdrop-filter blur(12px) when scrolled, transparent at top" | 4.2 |
| 2 | Mega Menu | "mega menu dropdown, 4-column grid, keyboard accessible, Escape closes" | 4.3 |
| 3 | Hamburger Morphing | "animated hamburger icon, 3 spans morph to X, cubic-bezier spring" | 4.4 |
| 4 | Sidebar + Breadcrumbs | "sidebar nav from right (RTL), overlay backdrop, focus trap, swipe close" | 4.5 |
| 5 | Command Palette | "Ctrl+K command palette, fuzzy search, arrow key navigation, dark dialog" | 4.8 |
איך להשתמש: קחו את ה-Core Phrase, הוסיפו "RTL layout, Hebrew content, dark theme (#1e1e2e), responsive" — ויש לכם prompt בסיסי שעובד. לפרטים מלאים, חזרו לסעיף הרלוונטי והעתיקו את ה-prompt המלא.
שמרו את הטבלה הזו. היא תשמש אתכם בכל פרויקט חדש. כשלקוח מבקש "ניווט מקצועי" — אתם יודעים בדיוק איזה prompt להעתיק לפי סוג האתר (ראו את ה-framework בסעיף 4.1). עם 5 ה-prompts האלה, אתם מכסים את כל סוגי הניווט ש-90% מהאתרים צריכים.
תמיד תוסיפו sticky nav עם blur לכל אתר. זה שינוי של שורה אחת בפרומפט ל-AI — "Add sticky nav with backdrop-filter blur on scroll" — והתוצאה היא ניווט שנראה מקצועי מיידית. זה הבסיס שעליו כל השאר נבנה.
- מה ההבדל בין position: sticky ל-position: fixed? ומתי להשתמש בכל אחד?
- אילו 3 מקשי מקלדת חייבים לעבוד ב-mega menu נגיש? (רמז: Tab, Escape, ו...?)
- מה עושה view-transition-name? ומה קורה אם אותו שם מופיע בשני אלמנטים בשני מצבים?
- למה עדיף transform: scaleX() על width לאנימציית progress bar?
- מתי כן ומתי לא להוסיף command palette לאתר? תנו 2 דוגמאות לכל צד.
Navigation Quality Checklist
לפני שמעבירים אתר עם ניווט לפרודקשן, עברו על הרשימה:
| # | קטגוריה | בדיקה | עבר? |
|---|---|---|---|
| 1 | Sticky | הניווט נשאר למעלה בגלילה עם blur effect? | ☐ |
| 2 | z-index | הניווט מעל כל תוכן אחר (כולל hero, modals)? | ☐ |
| 3 | Mobile | במובייל — hamburger menu עם אנימציית morphing? | ☐ |
| 4 | Touch | כל אלמנט לחיץ לפחות 44x44px? | ☐ |
| 5 | Keyboard | Tab עובר דרך כל הלינקים, Escape סוגר תפריטים? | ☐ |
| 6 | Focus | יש focus visible indicator על כל אלמנט אינטראקטיבי? | ☐ |
| 7 | RTL | כל הפריסה מיושרת RTL — לוגו ימין, CTA שמאל? | ☐ |
| 8 | Progress | Scroll progress bar מגיע ל-100% בדיוק בתחתית? | ☐ |
| 9 | Spy | Scroll spy מדגיש את הסקציה הנכונה בגלילה? | ☐ |
| 10 | Transitions | View Transitions עובדות + fallback לדפדפנים ישנים? | ☐ |
| 11 | Performance | Lighthouse performance > 90, TBT < 200ms? | ☐ |
| 12 | Reduced Motion | prefers-reduced-motion מכובד — אנימציות מצומצמות? | ☐ |
עברו על ה-Navigation Checklist ובדקו את הניווט שבניתם לאורך הפרק: כמה פריטים מסומנים? אם פחות מ-9 מתוך 12 — חזרו לסעיף הרלוונטי ותקנו. מטרה: 10+ מתוך 12 לפני שעוברים לפרק 5.