- Grid vs Flexbox Cheat Sheet — טבלה מלאה של 10 מקרי שימוש: 5 ל-Flexbox, 5 ל-Grid, כולל flowchart של החלטה ב-3 שאלות
- Bento Grid Layout בסגנון Apple — קוד CSS מלא עם 7 תאים בגדלים שונים,
grid-template-columns: repeat(4, 1fr)+grid-column/row: span N, מוכן להעתיק-הדבק - מערכת Spacing מבוססת 8px — 12 CSS custom properties (
--space-1עד--space-12: 8, 16, 24, 32, 40, 48, 64, 80, 96, 128, 160, 192) עם שימושים מומלצים לכל ערך - Dashboard Layout עם grid-template-areas — layout מלא של header/sidebar/main/aside/footer עם אזורים בשמות — קל להסביר ל-AI ול-responsive בכל breakpoint
- Layout Spec Prompt Template — פרומפט באנגלית עם placeholders ל-archetype, layout type, spacing scale, ו-responsive breakpoints. מוכן להעתקה לתחילת כל פרויקט AI
- 3 Asymmetric Layout Patterns — קוד מוכן ל-60/40, 70/30, ו-3-column-offset — המתכונים ששוברים את המונוטוניות
- מילון של 13 מונחי Layout — Grid, Flexbox, bento, gap, auto-fit, Gestalt proximity, whitespace, full-bleed ועוד
- תוכלו להבדיל בין CSS Grid ל-Flexbox ולדעת לבחור נכון — Flexbox ל-1D (שורה או עמודה), Grid ל-2D (שורות ועמודות), לפי decision flowchart של 3 שאלות
- תוכלו להנחות AI לבנות bento grid layout ו-magazine-style layout — עם פרומפט שמתאר מבנה ספציפי (4×3 grid, 7 תאים, span patterns), לא "הוסף section"
- תוכלו ליישם את עקרון ה-8px grid ליצירת spacing עקבי בכל האתר — עם 12 CSS custom properties מוגדרים, ולדעת למה דווקא 8 (hardware pixels, easy halving, industry convention)
- תוכלו לבקש מ-AI whitespace מכוון — עם הפרדה בין micro-whitespace (padding בתוך אלמנט), macro-whitespace (בין sections), ו-confidence whitespace (לפני hero CTAs); כולל Gestalt proximity ו-content-width vs full-bleed decisions
- פרקים קודמים: פרק 1 (האתר שAI בנה נראה גנרי — הזיהוי של "identical padding" ו-"predictable layouts"). מומלצים גם פרק 2 (premium anatomy — 8px grid הוצג בקצרה) ופרק 4 (typography — להבין שה-layout משרת את הטקסט, לא להפך)
- מושגים שיחזרו: visual hierarchy (פרק 1), CSS custom properties ו-design tokens (פרקים 3-4), responsive font sizes עם clamp() (פרק 4)
- כלים: דפדפן Chrome/Edge/Firefox עם DevTools (כולם תומכים ב-Grid Inspector מובנה), וכלי AI לבניית אתרים (Bolt / Lovable / v0 / Claude / Cursor)
- אופציונלי: חשבון ב-CSS Grid Garden (חינם — משחק ללימוד grid) או Flexbox Froggy לאלו שרוצים תרגול נוסף של ה-syntax
- זמן משוער: 110-140 דקות (כולל 5 התרגילים)
לאורך הקורס אתם בונים את היכולת להפוך אתר גנרי שAI בנה לאתר שנראה כמו עבודת סטודיו — ה-capstone בפרק 13. בפרקים 1-2 זיהיתם את הסימנים הגנריים והבנתם מה הופך אתר לפרימיום. בפרק 3 בניתם פלטת צבעים עם design tokens. בפרק 4 הוספתם שכבה שנייה — טיפוגרפיה עם typographic scale. בפרק הזה (5) מוסיפים את השכבה השלישית — Layout, spacing, ו-whitespace. צבע + טיפוגרפיה + layout = השלישייה שקובעת 80% מה-"professional feel" של האתר. בפרק הבא (6) נעבור ל-Modern CSS Superpowers — Container Queries, :has(), @layer, subgrid — הפיצ'רים של 2024-2026 שAI עדיין לא משתמש בהם בברירת-מחדל. פרק 5 הוא דרישת-קדם חובה לפרק 10 (Responsive Design), שם ניקח את ה-Grid וה-Flexbox שלנו ונלמד להתאים אותם לכל מסך.
| מונח (English) | תרגום | הגדרה בשורה אחת |
|---|---|---|
| CSS Grid | רשת CSS | מערכת layout דו-ממדית — שליטה בו-זמנית על שורות וגם על עמודות, ללא hacks |
| Flexbox | תיבה גמישה | מערכת layout חד-ממדית — שורה אחת או עמודה אחת, עם alignment ו-distribution אוטומטיים |
| grid-template-areas | אזורי תבנית | Syntax שמאפשר להגדיר layout באמצעות שמות ("header", "sidebar") — קריא כמו ASCII art |
| Bento Grid | רשת בנטו | Layout בהשראת קופסת ארוחת הצהריים היפנית — תאים בגדלים שונים ב-grid קבוע; טרנד מרכזי 2025-2026 |
| 8px Grid System | מערכת 8 פיקסלים | כל ה-spacing באתר הוא כפולה של 8 (8, 16, 24, 32, 48, 64, 96) — יוצר עקביות וקצב ויזואלי |
| Whitespace | רווח לבן / רווח שלילי | המרחב הריק בין אלמנטים — לא בזבוז אלא כלי עיצוב שמנחה עין ויוצר היררכיה |
| Visual Grouping | קיבוץ ויזואלי | הצורה שבה עין המשתמש קושרת אלמנטים יחד על בסיס קרבה פיזית |
| Gestalt Proximity | עקרון הקרבה | עקרון פסיכולוגיה: אלמנטים שקרובים זה לזה נתפסים כשייכים לאותה קבוצה |
| auto-fit / auto-fill | התאמה/מילוי אוטומטי | מילות מפתח ב-Grid ש"ממלאות" שורה עם כמה שיותר עמודות ברוחב מינימום — responsive בלי media queries |
| gap | מרווח | CSS property אחד שמחליף margin-hacks — עובד ב-Grid, Flexbox, ו-multi-column |
| Magazine Layout | Layout של מגזין | Layout א-סימטרי בהשראת דפוס עיתון — עמודות ברוחב משתנה, שבירה של עמודות שוות |
| Asymmetric Layout | Layout א-סימטרי | שבירה מכוונת של סימטריה 50/50 ל-60/40, 70/30, או 3-column-offset — יוצר עניין ויזואלי |
| Content-width vs Full-bleed | רוחב-תוכן מול "עד הקצה" | ההחלטה אם אלמנט תחום ל-680-720px לקריאות, או "פורץ" לרוחב מלא של ה-viewport ליצירת דרמה |
5.1 למה Layout הוא הסיבה #1 שאתרי AI נראים גנריים
בפרק 1 רשמנו 12 סימנים שחושפים אתר כ-AI-generated. אם תסתכלו על הרשימה שוב — 4 מתוך 12 קשורים ישירות ל-layout ול-spacing: "identical padding" (סימן 4), "predictable layouts" (סימן 9), "חוסר visual hierarchy" (סימן 10), ו"חוסר עקביות בין sections" (סימן 12). זה לא במקרה. Layout הוא השכבה שבה AI חלש ביותר — ולכן זה הפרק שייתן לכם את המקפצה הגדולה.
הסיבה: כשאתם מבקשים מ-AI "תבנה לי landing page ל-SaaS", הוא מייצר את ה-layout הצפוי שראה עשרות אלפי פעמים ב-training data: Hero → 3 Feature cards → Testimonials → Pricing → CTA. כל הכרטיסים באותו גודל, אותו padding, אותו gap. זה ה-"3-column trap": כל דבר הופך ל-3 עמודות שוות כי זה הדיפולט הבטוח ביותר של AI.
מה מעצבים מקצועיים עושים אחרת
תסתכלו על הדף הראשי של Apple, Stripe, Linear, Vercel, או Raycast. מה משותף לכולם?
- אין להם 3 עמודות שוות. יש להם Bento grid (Apple), magazine layout (Linear), asymmetric 60/40 (Stripe), full-bleed hero עם constrained text (Vercel).
- ה-spacing שלהם נראה "נכון". לא 20px פה, 30px שם, 25px שם אחר — אלא סולם עקבי (8, 16, 24, 32, 48, 64) שמרגיש כמו קצב מוזיקלי.
- יש הרבה whitespace. יותר ממה שתחשבו. ה-hero של Apple MacBook Pro הוא 60% רווח לבן ו-40% תוכן. זה לא עצלנות — זה ביטחון.
- לא הכל באותה חשיבות. אלמנט אחד תמיד גדול ב-x2-x3 מהאחרים — זה ה-focal point.
ההבדל בין אתר "בסדר" לאתר "פרימיום" הוא לרוב לא האלמנטים עצמם — אלא איך הם מסודרים ומה הרווח ביניהם. אתר עם הרבה spacing עקבי של 8/16/24/48, עם asymmetric breakdown של 60/40, ועם bento grid במקום 3 עמודות שוות — נראה מיידית מעוצב. גם אם כל השאר (טקסט, צבעים, תמונות) נשאר זהה.
למה AI לא עושה את זה לבד
- AI מעדיף סימטריה. 3 עמודות שוות. 4 כרטיסים באותו גודל. 2 טורים 50/50. זה "הבטוח ביותר" — ולכן הכי גנרי.
- AI אוהב margin inconsistency. בלי הנחיה על 8px grid, הוא יכתוב
margin-top: 20pxבסקשן אחד,margin-top: 25pxבשני, ו-margin-top: 32pxבשלישי. התוצאה: אתר שנראה "לא מסודר". - AI נבהל מ-whitespace. אם תתנו לו מקום ריק, הוא ימלא אותו. כרטיסי features קטנים? יוסיף עוד features. Hero עם הרבה מקום? יוסיף עוד טקסט. צריך לצוות עליו לשמור על הריק.
- AI לא יודע Grid מספיק טוב. ברירת-המחדל שלו היא Flexbox לכל דבר, כולל מקרים שבהם Grid היה נותן תוצאה טובה יותר בחצי מהקוד.
התפקיד שלכם בפרק הזה: ללמוד איך ה-layout "נבנה נכון" — כדי שתדעו לבקש מ-AI בדיוק את זה, בשפה שהוא מבין.
פתחו את apple.com/macbook-pro. גללו לסקשן Features. ספרו כמה תאים יש. בדקו את הגדלים היחסיים שלהם — האם כולם באותו גודל? האם יש תא גדול אחד ותאים קטנים סביבו? רשמו את המבנה (למשל: "2×2 עם תא אחד שתופס 2×1"). זה bento grid — נבנה אחד כזה בעצמכם בהמשך הפרק.
פתחו את האתר הגנרי שAI בנה לכם (מ-Do Now #1 בפרק 1). לחצו F12, בדקו את ה-display של הקונטיינר הראשי של Features. האם זה display: flex או display: grid? מה ה-gap? רשמו. כעת בדקו את אחד ה-Feature cards — מה ה-padding? האם הוא כפולה של 8? אם לא — סימן ברור לבעיה שנתקן בהמשך.
5.2 Flexbox — חד-ממדי: שורות או עמודות
Flexbox (קיצור ל-"Flexible Box Layout") הוא מנוע ה-layout של CSS שנועד לפתרון בעיה אחת: איך לסדר קבוצה של אלמנטים על ציר אחד — או אופקי (row) או אנכי (column) — עם alignment ו-distribution אוטומטיים.
המילה המרכזית פה היא חד-ממדי (1D). Flexbox עובד על ציר אחד בכל פעם. אם יש לכם שורה של אלמנטים — Flexbox מושלם. אם יש לכם עמודה של אלמנטים — Flexbox מושלם. אם יש לכם שורות וגם עמודות שצריכות להתיישר ביחס זו לזו — זה כבר 2D, ואז Grid עדיף.
Flexbox ב-4 שורות CSS
ה-syntax הבסיסי:
.container {
display: flex; /* הפעלת Flexbox */
gap: 1rem; /* רווח בין פריטים */
justify-content: space-between; /* חלוקה על הציר הראשי */
align-items: center; /* יישור על הציר המשני */
}
זהו. ארבע שורות ויש לכם navbar, card row, או footer מסודר. בלי hacks, בלי clearfix, בלי float.
5 מקרי שימוש אידיאליים ל-Flexbox
- Navigation bar — לוגו בצד אחד, קישורים באמצע, CTA בצד השני. שורה אחת, ציר אופקי.
- כפתור עם אייקון — אייקון + טקסט יחד בתוך button, עם gap ביניהם ו-
align-items: center. - Form field עם label — תווית מעל/לצד שדה טקסט, עמודה עם
flex-direction: column. - Card footer עם כפתורים — שורה של 2-3 כפתורים בתחתית כרטיס, עם
justify-content: flex-end. - Centering perfect —
display: flex; align-items: center; justify-content: center;מיישרים כל דבר למרכז. הפתרון שחיכינו לו 15 שנה.
Flexbox properties שכדאי לזכור
| Property | מה עושה | ערכים נפוצים |
|---|---|---|
display: flex | מפעיל Flexbox על הקונטיינר | flex / inline-flex |
flex-direction | כיוון הציר הראשי | row / column / row-reverse |
justify-content | חלוקה על הציר הראשי | flex-start / center / space-between / space-around |
align-items | יישור על הציר המשני | stretch / center / flex-start / flex-end |
gap | רווח בין פריטים | 1rem / 16px / var(--space-2) |
flex-wrap | האם לעבור לשורה חדשה | nowrap / wrap |
flex: 1 | על הפריט — תופס את כל המקום הפנוי | 0 / 1 / auto / 1 1 0 |
הטעות שכולם עושים: Flexbox ל-gallery
האינטואיציה של רוב המפתחים: "יש לי 9 כרטיסים, אני רוצה grid של 3×3 — אשתמש ב-Flexbox עם flex-wrap: wrap". זה עובד — אבל זה הפתרון ה-גרוע. הנה למה:
- בשורה האחרונה של Flexbox עם
flex: 1— אם יש 7 כרטיסים ב-3 עמודות, הכרטיס האחרון יימתח לרוחב כל השורה. גיהנום ויזואלי. - ה-alignment בין השורות לא מובטח — הכרטיס ה-2 בשורה 1 לא בהכרח יישר מול הכרטיס ה-2 בשורה 2.
- צריך הרבה media queries כדי לשמור על יחסי גודל ב-responsive.
הפתרון הנכון: Grid עם grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)) — שורה אחת, ואתם responsive אוטומטית. נלמד את זה בסעיף 5.7.
פתחו codepen.io/pen או StackBlitz. בנו div עם 3 divs בתוכו: "לוגו", "תפריט", "כניסה". תפעילו Flexbox על ה-parent: display: flex; justify-content: space-between; align-items: center; gap: 1rem;. שנו את ה-justify-content ל-center, ל-flex-end, ל-space-around. תרגישו מיד מה כל ערך עושה. זו היסוד של כל navbar בעולם.
5.3 CSS Grid — דו-ממדי: שורות ועמודות בו-זמנית
CSS Grid היא מערכת ה-layout החזקה ביותר שאי פעם הגיעה לדפדפנים. היא נועדה לבעיה אחרת לגמרי מזו של Flexbox: איך לסדר אלמנטים על שני צירים בו-זמנית — אופקי וגם אנכי — כך ששורה 1 עמודה 2 מתיישרת בדיוק מול שורה 3 עמודה 2.
המילה המרכזית פה היא דו-ממדי (2D). Grid יודע את שני הצירים בו-זמנית. זה מה שמאפשר bento layouts, dashboards, magazine designs, ו-card galleries מקצועיות.
Grid ב-5 שורות CSS
.gallery {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 3 עמודות שוות */
grid-template-rows: auto; /* שורות לפי תוכן */
gap: 2rem; /* רווח 32px */
padding: 4rem 2rem; /* 64px אנכי, 32px אופקי */
}
זהו. מערכת של 3 עמודות שכל הילדים של .gallery יסתדרו בה אוטומטית, עם gap של 32px, padding של 64/32 מסביב. בלי media queries (עדיין).
המילה החשובה: fr
fr = fraction = חלק מהמקום הפנוי. זה הדבר המהפכני ב-Grid.
grid-template-columns: 1fr 1fr 1fr= 3 עמודות שוותgrid-template-columns: 2fr 1fr= עמודה שמאלית פי 2 מהימנית (67%/33%)grid-template-columns: 200px 1fr= sidebar של 200px קבוע + תוכן שממלא את השארgrid-template-columns: repeat(4, 1fr)= 4 עמודות שוות (צורת קיצור)grid-template-columns: 1fr 3fr 1fr= magazine layout (תוכן רחב באמצע, sidebars דקים)
5 מקרי שימוש אידיאליים ל-Grid
- Page layout כללי — Header / Sidebar / Main / Footer ב-grid-template-areas (בסעיף 5.6).
- Card gallery — 3×N תמונות שמיישרות זו לזו באופן מושלם, כולל responsive עם auto-fit.
- Dashboard — widgets בגדלים שונים (stat card קטן, chart גדול, table רחב) — Grid הוא היחיד שנותן שליטה מלאה.
- Bento grid — הטרנד של 2025-2026. תאים בגדלים שונים עם
grid-column: span 2ו-grid-row: span 2על חלק מהם. - Forms מורכבים — 2 שורות של שדות עם label מעל, כאשר חלק מהשדות תופסים את כל הרוחב (text-area) וחלק חצי רוחב (first-name, last-name).
Grid properties שכדאי לזכור
| Property | מה עושה | דוגמה |
|---|---|---|
display: grid | מפעיל Grid על הקונטיינר | display: grid |
grid-template-columns | הגדרת העמודות | repeat(4, 1fr) |
grid-template-rows | הגדרת השורות | auto 1fr auto |
gap | רווח בין תאים (גם row גם column) | gap: 2rem |
grid-column: span N | על ילד — תופס N עמודות | grid-column: span 2 |
grid-row: span N | על ילד — תופס N שורות | grid-row: span 2 |
grid-template-areas | אזורים בשמות | מוסבר בסעיף 5.6 |
place-items: center | קיצור ל-align + justify items | place-items: center |
ב-StackBlitz/CodePen צרו div עם 6 divs בתוכו (כל אחד עם רקע אחר). תפעילו display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem;. כעת שנו לערכים שונים: repeat(2, 1fr), 1fr 2fr, 200px 1fr 1fr. על ה-div הראשון הוסיפו grid-column: span 2. תראו איך המערכת כולה מסתדרת אוטומטית. זה הקסם של 2D layout.
5.4 Grid vs Flexbox — Decision Framework מלא
עכשיו הגענו לשאלה ששואלים אותה בכל ראיון עבודה frontend: מתי Flexbox ומתי Grid? יש תשובה חד-משמעית. הנה ה-Framework.
שאלה 1: האם אני צריך לסדר אלמנטים על ציר אחד בלבד (שורה או עמודה), בלי חובה ליישור מול שורות אחרות?
- אם כן → Flexbox (navbar, card footer, button with icon, centered modal)
- אם לא → המשיכו לשאלה 2
שאלה 2: האם אני מגדיר layout שבו יש שורות וגם עמודות, והתאים צריכים להיות מיושרים במדויק על פני שני הצירים?
- אם כן → Grid (gallery, dashboard, page layout, bento, forms מורכבים)
- אם לא → המשיכו לשאלה 3
שאלה 3: האם אני מדבר על מבנה עמוד כללי (header/sidebar/main/footer) או על רכיב פנימי (navbar, card)?
- מבנה עמוד → Grid (כמעט תמיד)
- רכיב פנימי → Flexbox (כמעט תמיד)
כלל אצבע: Grid ל-macro (מבנה הדף), Flexbox ל-micro (בתוך כרטיסים, navbars, כפתורים).
טבלת השוואה מלאה
| קריטריון | Flexbox | Grid |
|---|---|---|
| ממדיות | 1D — שורה או עמודה | 2D — שורות ועמודות |
| יישור בין שורות | לא מובטח | מובטח במדויק |
| גודל תאים | נקבע על פי התוכן | נקבע על פי ה-grid (יותר שליטה) |
| Syntax | פשוט, 4-5 properties | עשיר, 15+ properties |
| מתי נוצר | 2013 (old-school) | 2017 (modern) |
| Browser support | 99.5%+ | 98%+ |
| שימוש אופטימלי | navbars, buttons, card innards, centering | page layouts, galleries, dashboards, bento |
| Responsive בלי media queries | flex-wrap (מוגבל) | auto-fit + minmax (מצוין) |
| תמיכה ב-gap | מ-2020 | מההתחלה (2017) |
| Learning curve | שעה | 3-4 שעות |
אפשר להשתמש בשניהם יחד!
זו לא בחירה מחייבת. הדפוס המקצועי הוא:
- Grid על ה-layout הראשי (header/sidebar/main/footer) ועל galleries ו-bento grids.
- Flexbox על הרכיבים בתוך כל תא — בתוך navbar, בתוך card, בתוך form field.
לדוגמה: Grid מגדיר את ה-"דירה" (חדרים), ובתוך כל חדר Flexbox מסדר את הרהיטים.
רוב ה-Vibe Coders (וגם AIs) משתמשים ב-Flexbox לכל מה שזז — כולל page layouts ו-galleries — כי Flexbox היה הראשון שלמדו. התוצאה: קוד שובה-לב כמו display: flex; flex-wrap: wrap; על gallery של 9 כרטיסים — שנשבר במובייל ברגע שיש 7 או 10 פריטים. הפתרון: כל פעם שאתם כותבים flex-wrap: wrap, תעצרו ותשאלו את עצמכם: האם אני בעצם רוצה Grid? התשובה 90% מהמקרים היא כן.
רשמו 5 רכיבים באתר שלכם (או באתר מוכר). לכל אחד, ענו על 3 השאלות מ-Decision Flowchart. תרשמו: Flexbox או Grid. דוגמאות: navbar (Flex), hero section (Grid), feature cards gallery (Grid), button with icon (Flex), footer columns (Grid). מה מאתגר? בדרך כלל "feature cards" — רוב האנשים כותבים Flex, והתשובה הנכונה היא Grid.
5.5 gap — ה-property שמחליף margin-hacks
לפני 2020, כדי להוסיף רווח בין פריטים ב-Flexbox או Grid, היינו חייבים להשתמש ב-margin. וזה היה סיוט. הסיוט הזה הסתיים — gap הוא ה-property היחיד שצריך.
הסיוט של ה"לפני"
/* הדרך הישנה — margin hacks */
.card {
margin-right: 1rem;
}
.card:last-child {
margin-right: 0; /* כדי שלא יהיה רווח מיותר בסוף */
}
/* ולמובייל: */
@media (max-width: 768px) {
.card {
margin-right: 0;
margin-bottom: 1rem; /* בכיוון אנכי */
}
}
ה-"אחרי"
/* הדרך המודרנית — gap */
.gallery {
display: grid; /* או flex */
gap: 1rem; /* זהו. זה הכל. */
}
gap עובד ב-Grid, Flexbox, ואפילו ב-multi-column layout. הוא מטפל אוטומטית ב:
- רווח אחיד בין כל הפריטים
- ללא רווח מיותר בסוף
- עבודה נכונה עם wrap (במעבר לשורה חדשה)
- עבודה זהה בכיוון אופקי ואנכי
Syntax מלא
.grid {
gap: 1rem; /* 16px בכל הכיוונים */
gap: 1rem 2rem; /* 16px אנכי, 32px אופקי */
row-gap: 1rem; /* רק אנכי */
column-gap: 2rem; /* רק אופקי */
}
עם design tokens — כך זה נראה באתר פרימיום
:root {
--space-2: 1rem; /* 16px */
--space-3: 1.5rem; /* 24px */
--space-4: 2rem; /* 32px */
--space-6: 3rem; /* 48px */
}
.hero-features {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--space-4); /* 32px בין features */
}
.section {
padding-block: var(--space-6); /* 48px אנכי לכל section */
}
שימו לב: אנחנו משתמשים בערכי ה-8px grid (1rem=16, 2rem=32, 3rem=48). זה לא מקרה. בסעיף 5.9 נבנה את המערכת במלואה.
פתחו את האתר הגנרי שAI בנה. חפשו ב-CSS את כל המקומות שיש בהם margin-right, margin-left, margin-bottom בתוך children של Flex/Grid containers. החליפו את כולם ב-gap על ה-parent. תראו איך ה-CSS הופך קצר יותר ב-30-50%.
5.6 grid-template-areas — שמות אזורים לבקשה ל-AI
של כל הפיצ'רים של Grid, grid-template-areas הוא האהוב עליי ביותר — ולא רק בגלל שהוא חזק, אלא בגלל שהוא קריא. אפשר להראות אותו למעצב שלא כותב קוד והוא יבין מיד.
הרעיון
במקום לומר "ה-div הראשון יהיה בשורה 1 עמודה 1-2, ה-div השני בשורה 1 עמודה 3" — אנחנו נותנים שמות לאזורים ומציירים את ה-layout כמו ASCII art.
דוגמה: Dashboard Layout שלם
.dashboard {
display: grid;
grid-template-columns: 250px 1fr 300px;
grid-template-rows: 80px 1fr 60px;
grid-template-areas:
"header header header"
"sidebar main aside"
"footer footer footer";
gap: 1rem;
height: 100vh;
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.aside { grid-area: aside; }
.footer { grid-area: footer; }
זהו. ה-ASCII art הוא ה-layout. Header רחב על כל 3 העמודות בשורה עליונה. Sidebar בצד שמאל עם 250px קבוע. Main באמצע עם 1fr (ממלא את הנותר). Aside בימין עם 300px קבוע. Footer רחב בתחתית.
למה זה פיצ'ר קריטי לעבודה עם AI
זה הסעיף הכי חשוב בפרק: grid-template-areas נותן לכם שפה להסביר layout ל-AI. במקום לכתוב פרומפט עמום כמו "תעשה dashboard", אפשר לכתוב:
Usegrid-template-areaswith regions named: "header" (top, full-width), "sidebar" (left, 250px fixed), "main" (center, fills remaining space), "aside" (right, 300px fixed), "footer" (bottom, full-width). Grid should be250px 1fr 300pxcolumns and80px 1fr 60pxrows.
ה-AI יבנה בדיוק את זה. בלי ניחושים. בלי "סבירות שיצליח".
Responsive עם grid-template-areas
הדבר הכי יפה: כדי לעשות responsive, פשוט מציירים מחדש את ה-ASCII art:
/* Desktop */
.dashboard {
grid-template-columns: 250px 1fr 300px;
grid-template-areas:
"header header header"
"sidebar main aside"
"footer footer footer";
}
/* Mobile */
@media (max-width: 768px) {
.dashboard {
grid-template-columns: 1fr;
grid-template-areas:
"header"
"main"
"sidebar"
"aside"
"footer";
}
}
אותם grid-areas — רק המיקום שלהם השתנה. זה מהיר, ברור, ונוח לתחזוקה.
ציירו על דף (או ב-comments בקוד) layout של הומפייג' של האתר שלכם כ-ASCII art. 3-4 אזורים. תנו שמות: "hero", "features", "social-proof", "cta". כתבו grid-template-areas שמייצג אותם. זה ה-layout שתבקשו מ-AI — והוא יבנה בדיוק מה שציירתם.
5.7 auto-fit vs auto-fill — grids שמתאימים את עצמם
הנה אחד הטריקים המקצועיים של CSS Grid: מערכת שבה לא צריך אף media query כדי להיות responsive. הסוד: auto-fit ו-auto-fill בשילוב עם minmax().
ה-syntax הקסום
.gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1.5rem;
}
מה זה אומר: "תחלק את המקום לעמודות. כל עמודה לפחות 250px רוחב, ולכל היותר 1fr (מלאה עד גבול המקום). תמלא כמה עמודות שנכנסות."
המשמעות המעשית:
- ב-desktop עם viewport 1440px → 5 עמודות (כל אחת ~270px)
- ב-laptop עם viewport 1024px → 4 עמודות
- ב-tablet עם viewport 768px → 3 עמודות
- ב-mobile 375px → עמודה אחת
בלי אף media query. הדפדפן מחליט כמה עמודות נכנסות לפי הרוחב הזמין.
auto-fit vs auto-fill — ההבדל הקריטי
שניהם "ממלאים" עמודות, אבל מתנהגים אחרת כשאין מספיק פריטים:
| שם | מה קורה כשאין מספיק פריטים | מתי להשתמש |
|---|---|---|
auto-fit |
העמודות הקיימות מתרחבות למלא את כל המקום | רוב המקרים — gallery שרוצה להתמלא |
auto-fill |
העמודות הקיימות לא מתרחבות — יוצרות "רפאים" של עמודות ריקות | כשרוצים שהכרטיסים יישארו בגודל מינימום |
הכלל: 90% מהזמן — auto-fit. הוא עושה את מה שרוב האנשים מצפים.
minmax() — הגדרת גודל עמודה ב-2 קצוות
minmax(MIN, MAX) = "תן לעמודה לפחות MIN ולכל היותר MAX".
minmax(250px, 1fr)— מינימום 250, מקסימום: מלא עד הגבול (הכי נפוץ)minmax(200px, 400px)— בין 200 ל-400 px בלבדminmax(auto, 1fr)— מינימום לפי תוכן, מקסימום מלאminmax(0, 1fr)— טריק למניעת overflow ב-grids עם תוכן ארוך
דפוסי auto-fit שכדאי לזכור
/* Card gallery קלאסי */
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
}
/* Photo gallery רחב */
.photos {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 0.5rem;
}
/* Logo grid (לוגואים של לקוחות) */
.logos {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
gap: 2rem;
align-items: center;
}
שלושה קווי קוד לכל gallery. Responsive מלא. בלי breakpoints.
ב-StackBlitz, צרו 8 כרטיסים ב-div. תגדירו grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));. גררו את החלון קטן-גדול ותראו איך העמודות משתנות מאליהן. שנו ל-auto-fill וראו את ההבדל כשה-window גדול מהר — תראו עמודות ריקות. החליטו מה אתם מעדיפים.
5.8 Bento Grid — הטרנד הלוהט של 2025-2026
אם יש layout אחד שיגדיר את 2025-2026, זה Bento Grid. ראיתם אותו ב-apple.com, ב-vercel.com, ב-raycast.com, ב-openai.com, וכמעט בכל landing page חדש של סטארטאפ. השם מגיע מהקופסה היפנית לארוחת-צהריים — "bento box" — שבה אוכל מוגש בתאים מרובעים בגדלים שונים.
מה הופך bento grid למיוחד
- תאים בגדלים שונים — לא 3 כרטיסים שוים אלא תא גדול אחד, 2 בינוניים, 3 קטנים.
- היררכיה ויזואלית ברורה — התא הגדול הוא ה-focal point. העין יודעת איפה להתחיל.
- שליטה מלאה ב-rhythm — אפשר להשתמש בצורה של התאים כדי לספר סיפור (feature מרכזי, feature משני, feature שלישוני).
- מנצל את ה-2D של Grid — בלי Grid זה כמעט בלתי אפשרי (Flexbox יסרב).
ה-Bento ב-CSS טהור — 7 תאים בסגנון Apple
.bento {
display: grid;
grid-template-columns: repeat(4, 1fr); /* 4 עמודות שוות */
grid-template-rows: repeat(3, 200px); /* 3 שורות של 200px */
gap: 1rem; /* 16px בין תאים */
padding: 2rem;
}
/* התא המרכזי: 2x2, תופס שליש מהמסך */
.bento-item-1 {
grid-column: span 2;
grid-row: span 2;
}
/* תא בינוני: 2x1 */
.bento-item-2 {
grid-column: span 2;
grid-row: span 1;
}
/* 5 תאים קטנים: 1x1 — לא צריך להגדיר כלום, זה ה-default */
.bento-item-3,
.bento-item-4,
.bento-item-5,
.bento-item-6,
.bento-item-7 {
/* 1 column, 1 row — default */
}
ה-HTML המקביל
<div class="bento">
<div class="bento-item-1">Feature Hero (2×2)</div>
<div class="bento-item-2">Feature Medium (2×1)</div>
<div class="bento-item-3">Feature Small A</div>
<div class="bento-item-4">Feature Small B</div>
<div class="bento-item-5">Feature Small C</div>
<div class="bento-item-6">Feature Small D</div>
<div class="bento-item-7">Feature Small E</div>
</div>
הפרומפט שיבנה bento עבורכם
Build a bento grid layout with 4 columns (repeat(4, 1fr)) and 3 rows of 200px. Create 7 cells:
- Cell 1:grid-column: span 2; grid-row: span 2— this is the hero feature (largest)
- Cell 2:grid-column: span 2— medium feature (2 cols wide, 1 row)
- Cells 3-7: default 1×1 — small features
Usegap: 1rem. Each cell should have background color, padding 1.5rem, rounded corners (0.75rem), and subtle border. Responsive: on mobile, stack all to single column.
Bento Decision Framework — מתי להשתמש
Bento Grid מתאים כאשר:
- יש לכם 5-8 features/benefits להציג והייררכיה שלהם לא שווה
- אחד מה-features הוא ה"גיבור" — צריך להיות בולט פי 3-4 מהאחרים
- Archetype: Modern SaaS, AI product, Tech-forward brand
- ה-viewport של המשתמשים שלכם בעיקר desktop/tablet (bento דורש 4 עמודות — על mobile הוא מתפרק לעמודה יחידה)
- אתם רוצים להרגיש "עכשווי ו-2026"
Bento לא מתאים כאשר:
- יש לכם רק 3 features — זה גנרי, לא bento
- כל ה-features שווים בחשיבותם — Grid 3×N פשוט יעשה עבודה טובה יותר
- Archetype: Luxury editorial (תרגישו לא נכון), Traditional corporate (תרגישו "trying too hard")
- רוב המשתמשים ב-mobile — bento מאבד את ערכו שם
Bento שכיחים — 4 patterns לזכור
| Pattern | מבנה | מתי מתאים |
|---|---|---|
| Apple Classic | 1 גדול (2×2) + 2 בינוניים (2×1) + 3 קטנים (1×1) | landing page עם hero feature אחד |
| Stripe Split | 1 רחב (4×1) בראש + 2 חצאים (2×2) מתחת + 2 קטנים | dashboard או product overview |
| Vercel Stack | 3 עמודות שוות אבל עם 1 תא שתופס 2 שורות | features עם "star feature" |
| Raycast Mosaic | 6-8 תאים בגדלים משתנים ללא תא "גיבור" | feature catalog (כל יכולת חשובה) |
העתיקו את ה-CSS+HTML של ה-Bento Classic מלמעלה ל-CodePen. הוסיפו background colors שונים ל-7 התאים (אפשר פשוט צבעים רנדומליים כמו #ff6b6b, #4ecdc4, #ffd93d, #6c5ce7, #a8e6cf, #ff8b94, #95e1d3). תראו מיד את המבנה הקלאסי של Apple bento. עכשיו שנו את grid-column: span 3 על התא הראשון. תראו איך ה-layout משתנה — זה הכוח של Grid.
5.9 מערכת ה-8px Grid — ה-spacing scale המקצועי
אם יש החלטה אחת ששווה 80% מהאפקט של "professional feel" — זו המערכת של ה-8px. כל ה-spacing באתר שלכם — padding, margin, gap, width, height — יהיה כפולה של 8. לא 20px, לא 25px, לא 15px — רק כפולות של 8: 8, 16, 24, 32, 40, 48, 64, 80, 96, 128, 160, 192.
למה דווקא 8?
שלוש סיבות מעשיות:
- חלוקה קלה. 8/2=4, 8/4=2, 8/8=1. כל ה"חצאים" נותנים מספר שלם. לעומת זאת, 10/3=3.33 — הדפדפן יעגל לא-עקבי.
- Hardware pixel density. רוב מסכי ה-high-DPI (Retina, 4K) פועלים במכפלות של 2 או 4. 8 הוא "נקי" על כל density. ערכים כמו 7, 13, 17 נראים "חדים אבל מטושטשים" על 2x, "חלק ולא חד" על 1x.
- Industry convention. Apple (Human Interface Guidelines), Google (Material Design), Microsoft (Fluent), Atlassian, IBM — כולם משתמשים במערכת 8px. תראו את זה ב-Figma: כל ה-default spacing בערכים של 8. זו שפה משותפת.
ה-Spacing Scale המלא (Deliverable)
:root {
/* The 8px Grid Spacing System */
--space-0: 0;
--space-1: 0.5rem; /* 8px — tight (inside buttons, between icon + text) */
--space-2: 1rem; /* 16px — default gap (between cards in a row) */
--space-3: 1.5rem; /* 24px — comfortable (between form fields) */
--space-4: 2rem; /* 32px — generous (between content blocks) */
--space-5: 2.5rem; /* 40px — spacious */
--space-6: 3rem; /* 48px — section padding (vertical) */
--space-7: 4rem; /* 64px — large section spacing */
--space-8: 5rem; /* 80px — hero padding */
--space-9: 6rem; /* 96px — very spacious (between major sections) */
--space-10: 8rem; /* 128px — dramatic section spacing */
--space-11: 10rem; /* 160px — ultra-spacious */
--space-12: 12rem; /* 192px — hero-to-content on landing pages */
}
טבלת שימושים מומלצים
| שימוש | ערך מומלץ | Token |
|---|---|---|
| רווח בין אייקון לטקסט בכפתור | 8px | --space-1 |
| Padding בתוך כפתור (vertical) | 8-16px | --space-1 / --space-2 |
| Padding בתוך כפתור (horizontal) | 16-24px | --space-2 / --space-3 |
| Gap בין cards בשורה | 16-24px | --space-2 / --space-3 |
| Padding בתוך card | 24-32px | --space-3 / --space-4 |
| Margin בין headings ל-body | 16-24px | --space-2 / --space-3 |
| Padding אנכי של section רגיל | 64-96px | --space-7 / --space-9 |
| Padding אנכי של hero section | 96-192px | --space-9 / --space-12 |
| Padding horizontal של ה-container הראשי | 16-32px mobile, 64-96px desktop | --space-2 עד --space-9 |
ברגע שאתם עוברים לעבודה עם ה-tokens האלה, אף פעם לא כותבים padding/margin בערך קבוע. תמיד var(--space-N). התוצאה: אתר שכל ה-spacing שלו עקבי, קל לשנות (משנים 1 משתנה ומשפיעים על הכל), וקל לבקש מ-AI ("use only var(--space-*) tokens, never raw px values").
הסימן המובהק ביותר לאתר "AI-generated" הוא spacing שונה בכל section — כאן padding: 20px, שם padding: 30px, במקום אחר padding: 25px. העין תופסת את זה גם בלי לדעת למה — האתר פשוט נראה "לא מסודר". הפתרון: לעבוד רק עם ה-tokens מלמעלה. לפני כל קוד חדש — שאלו את עצמכם: "האם הערך הזה כפולה של 8? אם לא — אני שובר את המערכת."
העתיקו את ה-:root עם 12 ה-space tokens לאתר שלכם. בדקו ב-DevTools — הוסיפו את הכלל body { padding: var(--space-7); }. תראו איך ה-body מקבל 64px padding. נסו --space-3, --space-9. תרגישו את ההבדל של הקצב הוויזואלי. זה הקצב שפרימיום נשמע כמו.
5.10 Whitespace — לא "מקום ריק" אלא כלי עיצוב
בישראל יש אמונה מוטעית שעובר מדור לדור: "רווח לבן הוא בזבוז — תמלא אותו במשהו". זו בדיוק הסיבה שאתרים ישראליים רבים נראים "עמוסים" בזמן שאתרי אפל, Stripe, ו-Linear נראים "נושמים". ה-whitespace הוא לא מה שחסר באתר שלכם — הוא מה שיש באתרים שאתם מנסים להידמות להם.
3 סוגי whitespace
| סוג | מה זה | ערכים טיפוסיים |
|---|---|---|
| Micro-whitespace | רווח בתוך אלמנט — padding בכפתור, line-height בטקסט, gap בתוך card | 8-24px |
| Macro-whitespace | רווח בין אלמנטים/sections — padding אנכי של section, margin בין sections | 64-128px |
| Confidence-whitespace | רווח דרמטי סביב אלמנט מפתח — סביב hero CTA, סביב תמונה חשובה | 96-192px |
Confidence Whitespace — הסוד של מותגי יוקרה
פתחו את hermes.com, louis-vuitton.com, או apple.com/vision-pro. מה שמשותף לכולם: יש יותר רווח מתוכן. הכותרת בגודל ענקי עם הרבה אוויר מסביב. התמונה גדולה, אבל לא נדחסת. ה-CTA לבד במרכז השדה.
זה לא עצלנות. זה הצהרה: "אני לא חייב להיאבק על תשומת הלב שלך. אני בטוח מספיק שהמוצר שלי ידבר לבדו." ככל שיש יותר whitespace — ככל שהמותג נתפס יקר יותר.
להפך — אתרים עם פחות whitespace (הרבה פרסומות, הרבה טקסט, הרבה קריאות לפעולה) נתפסים כ"לוחצים למכור" — זול.
הנוסחה: ecommerce vs luxury
- ecommerce רגיל (Amazon, eBay): Macro-whitespace של 24-48px, Confidence-whitespace נדיר. מטרה: למלא אינפורמציה, למקסם קליקים. Density גבוה.
- luxury/premium (Apple, Hermes, Dyson): Macro-whitespace של 96-192px, Confidence-whitespace בכל hero. מטרה: לייצר desire, לא לענות על שאלות מיידית. Density נמוכה.
זה לא אומר שכל אתר צריך להיות כמו Apple. תלוי ב-archetype. אבל אם אתם רוצים שהאתר שלכם ייראה "פרימיום" — התשובה כמעט תמיד היא: יותר whitespace, לא יותר תוכן.
ערכים פרקטיים לכל archetype
| Archetype | Hero section padding (top+bottom) | Section spacing | Content max-width |
|---|---|---|---|
| ecommerce | 48-64px | 48px | 1280-1440px |
| SaaS standard | 96-128px | 96px | 1200px |
| SaaS premium (Stripe/Linear) | 128-192px | 128px | 1200px + ~30% side padding |
| Portfolio | 128-192px | 160px | 960-1080px |
| Luxury/Editorial | 192-256px | 192px | 720-960px (narrow!) |
כלל האצבע של מעצבים מקצועיים:
- לכל heading — margin-top לפחות פי 2 מה-margin-bottom (ה-heading "שייך" לתוכן שאחריו, לא לפני)
- לכל section — padding אנכי לפחות 1.5× מ-padding אופקי (הסקציה "נושמת" בכיוון הגלילה)
- לכל hero — הוסיפו עוד 30-50% whitespace ממה שאתם חושבים שצריך. אם אתם כותבים 96px, נסו 128px. סביר שיהיה נכון יותר.
- בין CTA לתוכן — לפחות 48px בכל כיוון. אל תצמידו כפתור לתוכן.
- Content-width לפסקאות — תחמו ל-680-720px (מקס 75 תווים לשורה). שורות ארוכות יותר הן סימן מובהק לאתר חובבני.
רוב ה-Vibe Coders (וכל ה-AIs) פשוט מפחדים מרווח לבן. הם מרגישים שצריך למלא אותו. מוסיפים עוד מילה, עוד אייקון, עוד feature, עוד testimonial. התוצאה: אתר "דחוס" שנראה זול. הפתרון: בכל section, לפני שמפרסמים — ערכו את ה"whitespace audit": האם יש לפחות 96px padding אנכי? האם ה-CTA יש לו 48px מסביב? האם ה-hero מרגיש נושם או דחוס? אם לא — תגדילו את ה-padding, לא תוסיפו תוכן.
פתחו את האתר הגנרי שלכם. מדדו ב-DevTools את ה-padding האנכי של ה-hero section. סביר שזה 48-64px. עכשיו פתחו את apple.com/iphone. מדדו את אותו הדבר. תראו 96-192px. שאלו את עצמכם: האם יש סיבה שהאתר שלי יצטרך פחות whitespace מאפל? אם יש לכם archetype של "luxury" או "SaaS premium" — הוסיפו 50% ל-padding של ה-hero. רעננו. תראו את ההבדל.
5.11 Gestalt Proximity — visual grouping באמצעות רווח
בשנות ה-20 של המאה הקודמת, פסיכולוגים גרמנים (Wertheimer, Koffka, Köhler) גילו עיקרון: המוח האנושי מקבץ דברים שקרובים זה לזה. אם יש 6 נקודות על דף — 3 קרובות מצד שמאל ו-3 קרובות מצד ימין — העין רואה 2 קבוצות. אם אותן 6 נקודות מפוזרות באופן אחיד — העין רואה 6 אובייקטים נפרדים.
זה עקרון ה-Proximity של Gestalt, והוא הכלי הכי חזק שיש למעצבים לבניית היררכיה ויזואלית. הוא חוזק פי 10 ממסגרות, קווים, או צבעים.
דוגמה מעשית: form field
שני שדות טקסט — "שם פרטי" ו"שם משפחה" — עם ה-labels שלהם. נשווה 2 versions:
Version A — Labels זהים מרוחקים מהשדות:
שם פרטי
[_____________] ← 16px margin
שם משפחה
[_____________] ← 16px margin
Version B — Labels מוצמדים לשדה שלהם, רווח בין הזוגות:
שם פרטי ← 4px margin
[_____________]
← 24px margin
שם משפחה ← 4px margin
[_____________]
ב-Version B — העין "רואה" מיד שה-label שייך לשדה שמתחתיו. אין ספק. ב-Version A — יכול להיות בלבול: ה-label מתייחס לשדה שמעליו או שמתחתיו? המשתמש צריך לחשוב. זה ה-friction שהורג conversion.
הכלל המרכזי
המרחק בין אלמנטים באותה קבוצה חייב להיות קטן משמעותית מהמרחק בין קבוצות שונות. היחס המקצועי: 1:3 או 1:4.
דוגמה: אם יש לכם כרטיסי features עם title + description + icon:
- בתוך כרטיס (icon → title → description):
gap: 8-12px— הם "שייכים" - בין כרטיסים:
gap: 32-48px— הם "קבוצות נפרדות" - בין sections:
gap: 96-128px— הם "עולמות שונים"
יחס של 1:4:12. זה הקצב שמרגיש "מקצועי".
Gestalt Proximity בפרקטיקה
| רכיב | מרחק בתוך | מרחק בין | יחס |
|---|---|---|---|
| Label + input | 4-8px | 24-32px (בין שדות) | 1:4 |
| Icon + text בכפתור | 8px | — | — |
| Card title + description | 8-12px | 32-48px (בין כרטיסים) | 1:4 |
| Nav item + icon | 4-8px | 24-40px (בין nav items) | 1:5 |
| Heading + body | 16-24px | 96-128px (בין sections) | 1:6 |
פתחו את האתר הגנרי שלכם. מדדו את ה-margin-bottom של heading (H2 לדוגמה). מדדו את ה-margin-top של ה-section הבא. חשבו את היחס. אם זה 1:1 או 1:2 — ה-Gestalt שלכם שבור. אם זה 1:4 ומעלה — אתם עובדים נכון. תקנו: הגדילו את ה-margin-top של ה-section הבא.
5.12 Asymmetric Layouts — שבירת ה-50/50
הדיפולט של AI הוא סימטריה. 2 עמודות 50/50. 3 עמודות שוות. 4 כרטיסים באותו גודל. זה בטוח. זה משעמם. וזה המקור העיקרי ל-"AI slop" look.
מעצבים מקצועיים שוברים את הסימטריה ביודעין. הנה 3 patterns מוכחים:
Pattern 1: 60/40 — Hero Classic
Layout של 2 עמודות: טקסט בעמודה רחבה יותר (60%), תמונה/אייקון בעמודה צרה יותר (40%). זה יוצר משקל חזותי של הטקסט — מסר ראשון, ויזואל שני.
.hero {
display: grid;
grid-template-columns: 3fr 2fr; /* 60/40 */
gap: var(--space-7); /* 64px */
align-items: center;
}
Pattern 2: 70/30 — Editorial Focus
Layout של 2 עמודות: תוכן ראשי ב-70%, sidebar של 30%. נפוץ ב-blogs, magazines, ודפי product details. המרחב הצר "מושך את העין" בזכות הקונטרסט.
.article-layout {
display: grid;
grid-template-columns: 7fr 3fr; /* 70/30 */
gap: var(--space-6); /* 48px */
max-width: 1280px;
margin-inline: auto;
}
Pattern 3: 3-column Offset — Magazine Style
3 עמודות שלא שוות: 1fr 2fr 1fr (עמודה אמצעית כפולה) או 2fr 3fr 2fr (אמצעית 1.5x). יוצר תחושה עיתונאית, נדירה באתרי SaaS, מיוחדת בblogs ו-editorials.
.magazine {
display: grid;
grid-template-columns: 1fr 2fr 1fr; /* 25/50/25 */
gap: var(--space-5); /* 40px */
}
איך לבחור: Asymmetric Layout Framework
| אם המטרה היא... | בחרו... | דוגמאות אתרים |
|---|---|---|
| להדגיש טקסט (hero עם CTA) | 60/40 (טקסט רחב יותר) | Stripe.com, Linear.app |
| להדגיש ויזואל (product shot) | 40/60 (תמונה רחבה יותר) | Apple product pages |
| content + sidebar (blog/docs) | 70/30 | Medium, Notion docs |
| Editorial feel (long-form) | 1fr 2fr 1fr (אמצעית דומיננטית) | The New York Times, NYT Cooking |
| חנות luxury | 30/70 (תמונה ענקית + טקסט צר) | Hermes, Louis Vuitton |
פתחו את ה-hero של האתר שלכם. סביר שהוא 50/50 (טקסט + תמונה). שנו את ה-grid-template-columns ל-3fr 2fr (60/40). רעננו. תרגישו מיד שה-hero "מכוון" לעיניים אחרת — הטקסט מקבל משקל ראשי. נסו גם 2fr 3fr (40/60) — להדגיש את התמונה. בחרו את מה שמתאים ל-archetype שלכם.
5.13 Content-width vs Full-bleed — מתי לתחום ומתי לנשום
אחת ההחלטות הקריטיות ב-layout מודרני: מה נשאר תחום (680-720px לטקסט, 1200-1280px ל-container) ומה פורץ ל-full-bleed (100% מה-viewport)? ההחלטה הזו היא מה שמפריד בין אתר שנראה "פלקאט" לאתר שנראה "מעוצב".
הכלל הזהב
- Text paragraphs → תמיד תחומים ל-680-720px. בכל viewport. שורה טקסטואלית שעוברת 75 תווים קשה לקריאה.
- Headings (H1-H2) → תחומים ל-1000-1200px בדרך כלל. שורה ארוכה מדי מאבדת impact.
- תמונות רחבות (hero images, videos) → Full-bleed. נותנים להם לפרוץ לרוחב מלא של ה-viewport ליצירת דרמה.
- Gallery/Grid cards → תחומים ל-container (1280-1440px) — אבל לא לרוחב הטקסט.
- Background colors/gradients → Full-bleed. רקעים תמיד לרוחב מלא.
Implementation — CSS מקצועי
:root {
--width-prose: 42rem; /* 672px — לטקסט קריא */
--width-content: 75rem; /* 1200px — לתוכן רגיל (grids, cards) */
--width-wide: 90rem; /* 1440px — לתוכן רחב (galleries, dashboards) */
--width-full: 100vw; /* Full-bleed */
}
/* פסקאות — תמיד תחומות */
.prose {
max-width: var(--width-prose);
margin-inline: auto;
}
/* Container רגיל */
.container {
max-width: var(--width-content);
margin-inline: auto;
padding-inline: var(--space-3); /* 24px side padding במובייל */
}
/* Full-bleed — לרוחב מלא */
.full-bleed {
width: 100vw;
margin-inline: calc(50% - 50vw); /* ה-"trick" לשבירה מ-container */
}
דפוס מקצועי: Container עם full-bleed children
הדפוס המתקדם הוא container תחום שמכיל אלמנטים שיכולים "לפרוץ" לרוחב מלא. זו הדרך של Stripe, Linear, ואפל לבנות sections שבהם יש רקע רחב אבל תוכן צר באמצע:
.section {
max-width: var(--width-content); /* 1200px — container תחום */
margin-inline: auto;
padding-block: var(--space-7); /* 64px vertical */
}
.section .hero-image {
/* האימג' פורץ לרוחב מלא, למרות שהוא בתוך .section */
width: 100vw;
margin-inline: calc(50% - 50vw);
height: 600px;
object-fit: cover;
}
.section .hero-image + p {
/* הפסקה אחרי — חוזרת לרוחב טקסט */
max-width: var(--width-prose);
margin-inline: auto;
}
Dynamic approach — CSS Grid מתקדם
הטריק המתקדם יותר (נפוץ ב-Stripe) הוא להשתמש ב-CSS Grid על ה-body/main, עם 3 עמודות — ה-"side gutters" וה-"content":
main {
display: grid;
grid-template-columns:
[full-start] minmax(1rem, 1fr)
[content-start] minmax(0, 72rem)
[content-end] minmax(1rem, 1fr)
[full-end];
}
main > * {
grid-column: content; /* default — content width */
}
main > .full-bleed {
grid-column: full; /* פורץ לרוחב מלא */
}
שיטה זו מאפשרת לכל child להחליט אם הוא "תחום" או "full-bleed" בלי טריקים של margin שליליים. זה ה-pattern המקצועי של 2026.
פתחו 3 אתרים: stripe.com, linear.app, notion.so. על כל אחד — מדדו ב-DevTools את ה-max-width של פסקת טקסט (בדקו את ה-<p> של body text). כל אחד מהם יהיה בין 600 ל-720px. עכשיו מדדו את ה-max-width של hero image/video. יהיה 100vw או קרוב לזה. זה content-width vs full-bleed בפועל.
5.14 Layout Spec Prompt — פרומפט ל-AI
זה ה-deliverable המרכזי של הפרק: פרומפט מובנה שתוכלו להעתיק-להדביק לתחילת כל פרויקט AI, שמנחה את הכלי לבנות layout מקצועי מהרגע הראשון.
Layout Spec Template v1.0 (English for AI tools)
LAYOUT SPEC — Use these exactly, do not substitute:
Archetype: [SAAS_PREMIUM / SAAS_STANDARD / AGENCY_DARK / PORTFOLIO_MINIMAL / ECOMMERCE / LUXURY_EDITORIAL]
Page Structure:
- Overall: CSS Grid withgrid-template-areas(named regions)
- Regions: "header" (full-width top), "main" (content), "footer" (full-width bottom)
- For dashboards: add "sidebar" (250px left) and optional "aside" (300px right)
Section Layout Types (pick one per section):
- Hero: [ASYMMETRIC_60_40 / ASYMMETRIC_70_30 / CENTERED_FULL_BLEED]
- Features: [BENTO_GRID_4x3 / CARD_GRID_AUTO_FIT / MAGAZINE_1fr_2fr_1fr]
- Testimonials: [3_COLUMN_EQUAL / ASYMMETRIC_OFFSET]
- Pricing: [3_COLUMN_WITH_HIGHLIGHTED_MIDDLE / 2_COLUMN_COMPARISON]
Spacing System (8px Grid — use CSS custom properties):
- --space-1: 0.5rem (8px) — tight
- --space-2: 1rem (16px) — default gap
- --space-3: 1.5rem (24px) — card padding
- --space-4: 2rem (32px) — between content blocks
- --space-6: 3rem (48px) — section padding vertical
- --space-7: 4rem (64px) — large section spacing
- --space-9: 6rem (96px) — hero padding
- --space-12: 12rem (192px) — dramatic whitespace on luxury archetypes
NEVER use raw px values for spacing. ONLY tokens.
Grid vs Flexbox Rules (MUST follow):
- Page-level layout (header/sidebar/main/footer): CSS Grid with grid-template-areas
- Card/feature galleries: CSS Grid withrepeat(auto-fit, minmax(280px, 1fr))
- Dashboards and bento: CSS Grid with explicitgrid-template-columns: repeat(4, 1fr)
- Navbars, buttons, card internals: Flexbox
- Form field with label: Flexbox column
- NEVER useflex-wrap: wrapfor galleries — use Grid auto-fit
Bento Grid Spec (if features section is bento):
-grid-template-columns: repeat(4, 1fr)
-grid-template-rows: repeat(3, 200px)
-gap: var(--space-2)(16px)
- Cell 1:grid-column: span 2; grid-row: span 2— hero feature
- Cell 2:grid-column: span 2— medium feature
- Cells 3-7: default 1x1 — small features
Content Widths (MUST use):
- --width-prose: 42rem (672px) — text paragraphs ALWAYS constrained to this
- --width-content: 75rem (1200px) — cards, grids, main container
- --width-wide: 90rem (1440px) — galleries on large screens
- Hero images, videos, backgrounds: 100vw (full-bleed)
Whitespace Calibration:
- Hero section padding (top+bottom): [64-96px / 96-128px / 128-192px] based on archetype
- Between major sections: [48px / 96px / 128px] based on archetype
- Section side padding: 24px mobile, 64-96px desktop
- Around CTAs: minimum 48px on all sides
- Gestalt proximity ratio: elements in same group get 1x spacing, between groups 4x
DO NOT (anti-patterns):
- Do NOT useflex-wrap: wrapfor galleries
- Do NOT use raw px values for margin/padding — onlyvar(--space-*)tokens
- Do NOT make all feature cards identical size — use bento or asymmetric layout
- Do NOT let text paragraphs exceed 720px — constrain with max-width
- Do NOT use identical padding on all sections — vary based on importance
- Do NOT put CTA touching content — always 48px+ whitespace around
Responsive Breakpoints:
- Mobile: < 640px — single column, stack everything
- Tablet: 640-1024px — 2-column where appropriate
- Desktop: > 1024px — full layout (bento, asymmetric, etc.)
- Use CSS Gridauto-fitwhere possible to minimize media queries
QUALITY GATE:
Before delivery, audit: (1) Are page-level layouts using Grid? (2) Is every spacing value avar(--space-*)token? (3) Are text paragraphs max-width 720px? (4) Does the hero have at least 96px padding? (5) Are feature sections using bento or asymmetric layout (not 3 equal columns)? (6) Is theregap(no margin hacks)?
4 שלבי ההתאמה האישית
- Archetype: בחרו 1 מ-6 (SAAS_PREMIUM הוא הדיפולט הטוב לרוב הפרויקטים).
- Layout Types: לכל section, בחרו 1 מהאופציות המוצעות. אם אתם לא בטוחים — ASYMMETRIC_60_40 להירו, BENTO_GRID_4x3 לפיצ'רים — זה ייראה עכשווי.
- Whitespace: בחרו את הטווח המתאים ל-archetype. אם ספק — הלכו עם הטווח הגבוה יותר. קל "להוריד" אחר כך, קשה לשכנע AI "לנשום".
- Quality gate: תמיד להשאיר — זה מה שמאלץ את ה-AI לבדוק את עצמו.
איפה לשלב את הפרומפט הזה
קחו את ה-Anti-AI Starter Prompt מפרק 1, הוסיפו את Typography Spec מפרק 4, הוסיפו את Color Palette מפרק 3, והוסיפו את Layout Spec הזה. התוצאה: design brief מלא — צבעים + טיפוגרפיה + layout + anti-AI — שזה 80% מהדרך לאתר פרימיום מהפרומפט הראשון.
העתיקו את ה-Layout Spec Template. התאימו אותו לפרויקט שלכם: בחרו archetype, בחרו layout type לכל section, התאימו את ה-whitespace. שמרו בקובץ בצד. זה הפרומפט האישי שלכם — תשתמשו בו בתרגיל האחרון של הפרק.
- פתחו דף ריק (Notion, Google Doc, או נייר). ציירו טבלה של 2 עמודות: "Flexbox" ו-"Grid".
- רשמו 5 מקרי שימוש לכל צד, עם דוגמה ויזואלית קצרה (ציור או ASCII).
- לכל מקרה, רשמו את ה-CSS המינימלי (3-5 שורות) שיוצר אותו.
- תחתיה, הכינו Decision Flowchart של 3 השאלות (מ-section 5.4).
- עכשיו פתחו אתר חדש (לא גנרי — Stripe, Linear, Apple). לחצו F12 על 5 רכיבים שונים. בכל אחד, בדקו ב-Computed mode האם הוא משתמש ב-Grid או Flexbox. האם ההחלטה שלהם תואמת את ה-framework שלכם?
- רשמו 2-3 "גילויים" — מקרים שבהם הם השתמשו בבחירה שחשבתם שונה, ונסו להסביר למה.
מה צריך להיות בסוף: מסמך של עמוד שלם עם: (א) טבלת 10 שימושים (5+5), (ב) decision flowchart, (ג) רשימת 5 אתרים שבדקתם עם התוצאות, (ד) 2-3 גילויים עם הסברים.
- פתחו StackBlitz/CodePen עם HTML+CSS.
- צרו div בקלאס
.bentoעם 7 divs ילדים (classes.bento-item-1עד.bento-item-7). - העתיקו את ה-CSS של Bento Classic מ-section 5.8 (4 cols × 3 rows של 200px).
- הוסיפו רקעים שונים ל-7 התאים — יכולים להיות צבעי gradient, תמונות מ-Unsplash, או פשוט צבעים מוצקים.
- בכל תא הוסיפו תוכן: כותרת + טקסט קצר + אייקון/תמונה.
- הוסיפו
border-radius: 1rem,padding: 1.5rem, ו-box-shadowעדין לכל תא. - בדקו responsive: ב-mobile הפכו ל-
grid-template-columns: 1fr(עמודה אחת, stacked). - נסו 2 variations: שנו את התא הראשון ל-
grid-column: span 3(במקום 2). שנו את התא 2 ל-grid-row: span 2. תראו איך ה-layout משתנה.
מה צריך להיות בסוף: קוד עובד של bento grid עם 7 תאים + 2 variations + mobile responsive, והשוואה ויזואלית בין 3 ה-versions.
- קחו את האתר הגנרי שAI בנה לכם (מ-Do Now #1 בפרק 1).
- פתחו את ה-CSS ורשמו את כל ערכי ה-margin, padding, gap שאתם רואים. סביר שתראו ערכים כמו 15px, 20px, 25px, 30px — לא כפולות של 8.
- הוסיפו בראש ה-CSS את הבלוק של 12 ה-
--space-*tokens (מ-section 5.9). - עברו על כל ערך שרשמתם. לכל אחד, בחרו את ה-token הקרוב ביותר. 15→16 (
--space-2), 20→24 (--space-3), 30→32 (--space-4), 45→48 (--space-6). - החליפו את כל הערכים בקוד מ-
pxraw ל-var(--space-*). - רעננו את האתר. השוו לפני/אחרי. רוב האנשים מרגישים "משהו יותר טוב" גם בלי לדעת מה.
- הריצו Lighthouse — האתר לא צריך להיפגע (אולי אפילו להשתפר בגלל פחות ערכים ייחודיים).
מה צריך להיות בסוף: קוד "אחרי" עם 100% tokens, רשימת 10+ ערכים שהומרו (old → new), ו-2 screenshots לפני/אחרי להשוואה.
- פתחו את האתר הגנרי שלכם ב-side-by-side עם apple.com או stripe.com.
- בדקו 5 מדדים על כל אתר ב-DevTools:
- Padding אנכי של hero section (top + bottom)
- Margin בין hero ל-section הבא
- Padding של section רגיל (top + bottom)
- Gap בין cards ב-features grid
- Max-width של פסקת טקסט
- רשמו את הערכים בטבלה. חישבו את היחס: אתר שלכם vs אתר הייחוס.
- סביר שתראו יחסים של 1:2 עד 1:4 — כלומר האתר שלכם יש בו 50-75% פחות whitespace מהמקור.
- תקנו: הכפילו את ה-padding של ה-hero, הגדילו את ה-section padding ל-96px, הוסיפו max-width של 42rem לפסקאות.
- ריצו Whitespace Audit Framework (מ-section 5.10): 5 השאלות של היחסים (1:4, 1:6).
- אם archetype של luxury — הגדילו עוד 30-50%.
מה צריך להיות בסוף: טבלה של 5 מדדים × 3 versions (אתר שלכם "לפני" / אתר ייחוס / אתר שלכם "אחרי"), רשימת 5+ שינויים ספציפיים שביצעתם, ו-2 screenshots של hero לפני/אחרי.
- קחו את Layout Spec Template מ-section 5.14. התאימו אישית לפרויקט שלכם.
- שילבו אותו עם: Anti-AI Starter Prompt (פרק 1) + Color Palette (פרק 3) + Typography Spec (פרק 4). התוצאה: פרומפט מלא שהוא 80% מהדרך ל-design brief מקצועי.
- הריצו את הפרומפט בכלי AI (Bolt / Lovable / v0 / Cursor / Claude).
- שמרו screenshot של התוצאה. השוו לתוצאה שקיבלתם בלי הפרומפט.
- הריצו בדיקה ב-DevTools: (א) האם page-level layout הוא Grid? (ב) האם יש
grid-template-areas? (ג) האם feature cards משתמשים ב-Grid auto-fit ולא flex-wrap? (ד) האם כל padding/margin הואvar(--space-*)? (ה) האם hero יש לו padding של 96px+? (ו) האם פסקאות תחומות ל-720px? - אם שאלה אחת לא עברה — זהו את החלק בפרומפט שצריך חיזוק והוסיפו. שמרו את הפרומפט המעודכן כ-v1.1.
- בדקו responsive: הקטינו ל-375px. האם ה-bento הפך לעמודה יחידה? האם ה-whitespace נשמר? האם הטקסט קריא?
מה צריך להיות בסוף: 2 screenshots (לפני/אחרי הפרומפט), 6 תשובות לבדיקת DevTools, רשימת התיקונים שעשיתם לפרומפט, ו-Layout Spec v1.1 אישי שלכם — מוכן לשימוש חוזר בכל פרויקט חדש.
| תדירות | מה לעשות | כמה זמן |
|---|---|---|
| יומי | גלשו ל-3 אתרים (SaaS, portfolio, ecommerce). על כל אחד: בדקו את ה-page layout (Grid/Flex), מדדו 3 ערכי padding/gap, וזהו אם הם מ-8px grid. 5 דקות. | 5 דקות |
| שבועי | בחרו אתר שבניתם עם AI בשבוע האחרון. הריצו את Whitespace Audit (5 המדדים מ-Framework #3). תקנו את 3 הנקודות הגרועות ביותר. | 25 דקות |
| חודשי | עדכנו את Layout Spec Template האישי שלכם. הוסיפו archetype חדש אם גיליתם, הוסיפו bento pattern חדש שראיתם. בחנו על 2 פרויקטים. | 35 דקות |
הוסיפו את 12 ה---space-* tokens ל-CSS של הפרויקט שלכם, והחליפו כל ערך margin/padding/gap ב-var(--space-*). זו עבודה של 20-30 דקות, והיא תעשה ל-"professional feel" של האתר יותר ממה ש-3 שעות של עיצוב אייקונים או אנימציות יכולות. ה-Rhythm הוויזואלי שנוצר מ-spacing עקבי ב-8px grid הוא ההבדל העיקרי בין אתר "בסדר" לאתר שנראה "כמו שסטודיו בנה אותו". אם תעשו רק את זה — זכיתם.
- מתי Flexbox ומתי Grid? הסבירו ב-3 שאלות. (רמז: חד-ממדי/דו-ממדי; יישור בין שורות; macro/micro)
- מה מיוחד ב-bento grid? למה הוא עובד יותר מ-3 עמודות שוות? (רמז: היררכיה, focal point, הבדלים בגדלים)
- למה דווקא 8px ולא 5 או 10? תנו 3 סיבות. (רמז: חלוקה, hardware, industry convention)
- מה היחס הנכון של מרחקים בין אלמנטים באותה קבוצה לבין קבוצות שונות? למה? (רמז: Gestalt proximity, 1:4)
- מתי משתמשים ב-content-width ומתי ב-full-bleed? תנו 3 דוגמאות לכל אחד. (רמז: טקסט תחום 720px, תמונות hero 100vw)
בפרק הזה בניתם את אחת היכולות הקשות והחיוניות ביותר של Vibe Coder: השליטה ב-layout, spacing, ו-whitespace כמעצבים מקצועיים. עברתם על ההבדל היסודי בין Flexbox (חד-ממדי, micro) ל-CSS Grid (דו-ממדי, macro), עם decision framework של 3 שאלות שיעזור לכם לבחור נכון בכל מצב. למדתם לבנות Bento Grid בסגנון Apple — הטרנד המרכזי של 2025-2026 — עם קוד מלא של 7 תאים וgrid-template-columns מוכן להעתיק.
בניתם את המערכת שמקפיצה 80% מה-"professional feel" של כל אתר: 12 ה---space-* tokens של ה-8px grid. מ---space-1 (8px) עד --space-12 (192px), עם טבלה מלאה של שימושים מומלצים. למדתם למה דווקא 8 (חלוקה קלה, hardware pixel density, industry convention), ואיך ה-tokens האלה הופכים את ה-CSS שלכם מ"מסודר" ל"מקצועי".
בחלק השני של הפרק גיליתם ש-whitespace הוא לא בזבוז אלא כלי עיצוב. עברתם על 3 סוגי whitespace (micro, macro, confidence), על עקרון ה-Gestalt proximity (יחס 1:4 בין קבוצות), ועל ההבדל בין content-width (680-720px לטקסט) ל-full-bleed (100vw לתמונות). הבנתם למה מותגי יוקרה משתמשים ב-יותר whitespace ולא בפחות — ואיך זה מתורגם לערכים מספריים ב-CSS.
למדתם גם איך להימנע מ-3 טעויות קטסטרופליות של Vibe Coders ו-AI: שימוש ב-Flexbox לכל דבר כולל galleries (הפתרון: Grid auto-fit), spacing לא עקבי בין sections (הפתרון: tokens בלבד), ופחד מ-whitespace (הפתרון: Whitespace Audit Framework של 5 שאלות).
יש לכם עכשיו 3 deliverables מוחשיים מהפרק הזה: (1) Grid vs Flexbox Cheat Sheet עם 10 מקרי שימוש ו-decision flowchart, (2) Bento Grid Layout מלא בסגנון Apple, ו-(3) מערכת Spacing מלאה עם 12 CSS custom properties. Plus — Layout Spec Prompt Template באנגלית שמוכן להשתלב עם הפרומפטים של פרקים 1, 3, ו-4 לקבלת "design brief" מלא.
הגשר לפרק הבא: בפרק 5 למדתם איך לסדר מבנה של אתר. בפרק 6 — "Modern CSS Superpowers — היכולות של 2024-2026 שמשנות הכל" — תכירו את הפיצ'רים של CSS שAI עדיין לא משתמש בהם בברירת-מחדל: Container Queries (רכיבים שמגיבים לגודל הקונטיינר ולא למסך), :has() selector (ה-"parent selector" שחיכינו לו 20 שנה), @layer (cascade layers לסוף ה-specificity wars), subgrid (ירושת tracks מ-parent grid), Native CSS Nesting, ו-Masonry layout native. ה-Grid שבניתם בפרק 5 הוא הבסיס לכל הפיצ'רים המתקדמים של פרק 6 — subgrid למשל לא עובד בלי הבנת Grid. כשתסיימו את פרק 6, תדעו לבקש מ-AI קוד שנראה ומתנהג כמו שכתבו אותו ב-2026, לא ב-2018.
- הבנתי את ההבדל היסודי: Flexbox = 1D (שורה/עמודה), Grid = 2D (שורות+עמודות)
- יכול/ה לענות על 3 השאלות של Decision Flowchart (Grid vs Flexbox) ולבחור נכון
- השלמתי את תרגיל 1 — Decision Cheat Sheet עם 10 מקרי שימוש
- יודע/ת להשתמש ב-
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))ל-galleries responsive בלי media queries - הכרתי
grid-template-areasויודע/ת להגדיר layout עם שמות אזורים - בניתי Bento Grid עובד עם 7 תאים בגדלים שונים (תרגיל 2)
- העתקתי את 12 ה-
--space-*tokens ל-CSS של הפרויקט - החלפתי את כל ערכי ה-margin/padding/gap ל-
var(--space-*)(תרגיל 3) - החלפתי margin-hacks ב-
gapproperty ב-Flex/Grid containers - הוספתי ל-CSS שלי
--width-prose: 42remוהחלתי על פסקאות טקסט - השלמתי Whitespace Audit על האתר הגנרי שלי והוספתי 50% padding ל-hero (תרגיל 4)
- יודע/ת לבחור בין layout סימטרי, 60/40, 70/30, ו-magazine לפי המטרה
- יצרתי Layout Spec Template אישי שאוכל להעתיק לכל פרויקט חדש
- השלמתי תרגיל 5 — הרצה של פרומפט מלא והשוואה before/after
- יישמתי לפחות פעם אחת את "Just One Thing" — 12 ה-space tokens כ-tokens יחידים באתר