רשת משנה של CSS

תאריך פרסום: 28 בספטמבר 2023

CSS grid הוא מנוע פריסה חזק מאוד, אבל אפשר להשתמש במסלולי השורות והעמודות שנוצרים ב-CSS grid הורה רק כדי למקם צאצאים ישירים של מאגר התצוגה של ה-CSS grid. כל הקווים והאזורים ששמותיהם מופיעים ברשת שהוגדרו על ידי המחבר אבדו בכל רכיב אחר מלבד צאצא ישיר. בעזרת subgrid אפשר לשתף את הגדלים, התבניות והשמות של הטראקים עם רשתות בתצוגת עץ. במאמר הזה נסביר איך זה עובד.

לפני רשת משנה, התוכן היה מותאם בדרך כלל באופן ידני כדי למנוע פריסות לא אחידות כמו זו.

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

אחרי רשת המשנה, אפשר ליישר את התוכן בגדלים שונים.

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

Browser Support

  • Chrome: 117.
  • Edge: 117.
  • Firefox: 71.
  • Safari: 16.

Source

יסודות של רשת משנה

הנה תרחיש לדוגמה פשוט שמציג את העקרונות הבסיסיים של CSS subgrid. רשת מוגדרת באמצעות שתי עמודות בעלות שם, הראשונה ברוחב 20ch והשנייה היא "השאר" של המרחב 1fr. שמות העמודות לא חובה להזין, אבל הם נהדרים למטרות המחשה וחינוך.

.grid {
  display: grid;
  gap: 1rem;
  grid-template-columns: [column-1] 20ch [column-2] 1fr;
}

לאחר מכן, רכיב צאצא של הרשת הזו, שמשתרע על שתי העמודות האלה, מוגדר כמאגר רשת, ומאמץ את העמודות של ההורה שלו על ידי הגדרת grid-template-columns לערך subgrid.

.grid > .subgrid {
  grid-column: span 2;

  display: grid;
  grid-template-columns: subgrid; /* 20ch 1fr */
}
צילום מסך של DevTools של רשת CSS, שבו מוצגות שתי עמודות זו לצד זו עם שם בתחילת שורת העמודה.
https://codepen.io/web-dot-dev/pen/NWezjXv

זהו, העמודות של רשת הורה הועברו למעשה לרמה הבאה, לרשת משנה. עכשיו אפשר להקצות צאצאים לכל אחת מהעמודות האלה ברשת המשנה.

אתגר! חוזרים על אותה הדגמה, אבל עושים זאת עבור grid-template-rows.

שיתוף רשת 'מאקרו' ברמת הדף

מעצבים עובדים לעיתים קרובות עם רשתות משותפות, ומציירים קווים על העיצוב כולו כדי ליישר אליו את כל הרכיבים הרצויים. עכשיו גם מפתחי אתרים יכולים לעשות זאת! עכשיו אפשר לבצע את תהליך העבודה הזה בדיוק, ועוד הרבה תהליכים אחרים.

ממסגרת מאקרו לעיצוב מוגמר. אזורים עם שמות בחלונית נוצרים מראש, והרכיבים מוסיפים בהמשך לפי הצורך.

הטמעת תהליך העבודה הנפוץ ביותר של רשתות עיצוב יכולה לספק תובנות מעולות לגבי היכולות, תהליכי העבודה והפוטנציאל של subgrid.

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

צילום מסך מ-DevTools של Chrome CSS grid שבו מוצגת פריסה של רשת בגודל לנייד, שבה השורות והעמודות נקראות בשמות לזיהוי מהיר: fullbleed,‏ system-status,‏ primary-nav,‏ primary-header,‏ main,‏ footer ו-system-gestures.

הקוד הבא ב-CSS יוצר את התצוגה הזו, עם שורות ועמודות בעלות שמות שמתאימים לפריסה של המכשיר. לכל שורה ולכל עמודה יש גודל.

.device {
    display: grid;
    grid-template-rows:
      [system-status] 3.5rem
      [primary-nav] 3rem
      [primary-header] 4rem
      [main] auto
      [footer] 4rem
      [system-gestures] 2rem
    ;
    grid-template-columns: [fullbleed-start] 1rem [main-start] auto [main-end] 1rem [fullbleed-end];
}

סגנונות נוספים יוצרים את העיצוב הבא.

אותה שכבת-על של רשת ב-CSS DevTools כמו קודם, אבל הפעם עם חלק מממשק המשתמש של המערכת לנייד, צללים וצבע קל. עוזרת לראות לאן מתפתח העיצוב.

בתוך הרכיב ההורה הזה יש רכיבים שונים בתצוגת עץ. העיצוב דורש תמונה ברוחב מלא מתחת לשורות הניווט ולכותרות. שמות השורות של העמודות השמאלית והימנית ביותר הם fullbleed-start ו-fullbleed-end. מתן שמות לשורות התצוגה בצורה הזו מאפשר לילדים להתאים את עצמם לכל אחת מהן בו-זמנית באמצעות קיצור הדרך של מיקום fullbleed. זה מאוד נוח, כפי שעוד תראו.

צילום מסך עם זום של שכבת-העל של הרשת מ-DevTools, שמתמקד במיוחד בשמות העמודות fullbleed-start ו-fullbleed-end.

אחרי שיוצרים את הפריסה הכוללת של המכשיר עם שורות ועמודות עם שמות נעימים, משתמשים ב-subgrid כדי להעביר את השורות והעמודות עם השמות הנעימים לפריסות רשת בתצוגת עץ. זהו הרגע הקסום של subgrid. פריסת המכשיר מעבירה את השורות והעמודות עם השמות לקונטיינר האפליקציה, שמעביר אותן לכל אחד מהצאצאים שלו.

.device > .app,
.app > * {
    display: grid;
    grid: subgrid / subgrid;

    /* same as */
    grid-template-rows: subgrid;
    grid-template-columns: subgrid;
}

סידור תאים משני ב-CSS הוא ערך שמשמש במקום רשימה של מסלולי רשת. השורות והעמודות שהרכיב משתרע עליהן מהרכיב ההורה הן עכשיו אותן שורות ועמודות שהוא מציע. כך שמות השורות מהרשת .device יהיו זמינים לצאצאים של .app, במקום רק ל-.app. רכיבים בתוך .app לא יכלו להפנות לטראקים של הרשת שנוצרו על ידי .device לפני הרשת המשנית.

עכשיו, אחרי שהגדרתם את כל הפרטים, התמונה בתצוגת העץ יכולה להשתלב במלואה בפריסת האתר, בזכות subgrid. אין ערכים שליליים או טריקים, אלא שורה אחת יפה עם הכיתוב "my layout spans from fullbleed-start to fullbleed-end".

.app > main img {
    grid-area: fullbleed;
}
פריסת המאקרו הסופית, עם תמונה בתצוגת עץ ברוחב מלא שממוקמת מתחת לשורות הניווט הראשיות ולשורות הכותרות, ומגיעה עד לכל אחת מהשורות של העמודות בעלות השם שמתפרשות לאורך כל הדף.
https://codepen.io/web-dot-dev/pen/WNLyjzX

זהו, רשת מאקרו כמו שאנחנו משתמשים בה כמעצבים, מוטמעת ב-CSS. אתם יכולים להתאים את הקונספט הזה לצרכים שלכם ולהרחיב אותו לפי הצורך.

בדיקה אם יש תמיכה

שיפור הדרגתי באמצעות CSS ורשת משנה הוא מוכר ופשוט. משתמשים ב-@supports ובתוך הסוגריים שואלים את הדפדפן אם הוא מבין שרשרת משנה כערך של עמודות או שורות בתבנית. בדוגמה הבאה בודקים אם המאפיין grid-template-columns תומך במילות המפתח subgrid. אם התוצאה היא true, אפשר להשתמש ברשת משנה.

@supports (grid-template-columns: subgrid) {
  /* safe to enhance to */
}

כלי פיתוח

לדפדפנים Chrome, ‏ Edge, ‏ Firefox ו-Safari יש כלים מעולים ל-DevTools של רשתות CSS, ולדפדפנים Chrome,‏ Edge ו-Firefox יש כלים ספציפיים שיעזרו לכם עם רשתות משנה. הכלי של Chrome הוכרזו בגרסה 115, ואילו ב-Firefox הם זמינים כבר שנה או יותר.

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

התג של רשת המשנה פועל כמו התג של הרשת, אבל הוא מאפשר להבחין באופן חזותי בין רשתות שהן רשתות משנה לבין רשתות אחרות.

משאבים

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