לבנה אחר לבנה: עזרה בבניית CSS Masonry

Patrick Brosset
Patrick Brosset
Alison Maher
Alison Maher

תאריך פרסום: 23 ביולי 2025, תאריך העדכון האחרון: 13 בפברואר 2026

צוותי Microsoft Edge ו-Google Chrome שמחים להודיע ש-CSS masonry מוכן לבדיקות מוקדמות של מפתחים ב-Chrome וב-Edge 140.

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

כדאי לבדוק את CSS Masonry ב-Chromium כבר היום

כדי לבדוק את CSS Masonry היום:

  1. משתמשים ב-Chrome או ב-Edge 140 ואילך (או בדפדפן אחר שמבוסס על Chromium עם גרסה תואמת).
  2. עוברים אל about:flags בכרטיסייה חדשה.
  3. מחפשים את האפשרות CSS Masonry Layout (פריסת CSS בסגנון בנייה).
  4. מפעילים את הדגל.
  5. מפעילים מחדש את הדפדפן.
הכניסה ל-Masonry בדף הניסויים.

אחרי שמפעילים את התכונה, אפשר לראות אותה בפעולה על ידי בדיקת ההדגמות של Microsoft Edge (אפשר לראות את קוד המקור של ההדגמות), או להמשיך לקרוא כדי לקבל מידע נוסף על התכונה ועל התחביר הזמין.

מה זה masonry?

פריסת CSS masonry היא מצב פריסה שמאפשר ליצור סידור של פריטים כמו לבנים, בצורה שלא קל להשיג באמצעות CSS grid,‏ flexbox או פריסה מרובת עמודות.

אפשר להשתמש ב-CSS masonry כדי לסדר פריטים בפורמט של עמודה או שורה, כשהפריטים מוצבים בתוך העמודות או השורות האלה בצורה מכווצת.

פריטים מסודרים בפריסות של קיר לבנים.

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

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

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

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

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

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

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

גלריה שבה הכותרת משתרעת על פני עמודות.

הנה עוד כמה דוגמאות לשימוש בפריסת Masonry.

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

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

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

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

אוסף של תמונות, עם גדלים שונים של עמודות, ותמונות מסוימות שמשתרעות על פני כמה עמודות.

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

פתרונות עקיפים והמגבלות שלהם

כדי להטמיע את תבנית העיצוב הזו באינטרנט היום, צריך להשתמש בספריות JavaScript או בפתרונות עקיפים שמבוססים על CSS grid, ‏ flexbox או multi-column. עם זאת, יש חסרונות לשיטה הזו, כולל:

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

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

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

בפריסת רשת, הפריטים ממוקמים בטראקים קבועים.

בדומה ל-masonry, ‏ flexbox מתייחס רק לכיוון אחד, ומאפשר לפריטים להחליט על המקום שהם רוצים לתפוס לאורך הכיוון השני. כלומר, אפשר ליצור פריסה שדומה לפריסת לבנים באמצעות flexbox, כל עוד אתם מרוצים מהפריסה של הפריטים בכיוון הבלוק, כלומר עמודה בכל פעם. בנוסף, צריך להגדיר את הגודל או הגובה של מאגר ה-flex כדי שהפריטים יועברו לשורה חדשה של flex, וכך תיצור עמודה חדשה.

פריטים בפריסת Flex מסודרים לפי עמודה.

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

מה שחשוב לזכור כאן הוא שלא מדובר בפריסות גרועות יותר של grid,‏ flexbox או multi-column בהשוואה ל-masonry. אלה פריסות מצוינות עם הרבה תרחישי שימוש. העיקרון הוא: אם רוצים פריסה של קיר לבנים, אז CSS masonry היא הדרך להשיג אותה.

המצב של CSS masonry

קבוצת העבודה בנושא CSS מנסחת את המאפיין masonry במפרט CSS Grid Level 3. המפרט עדיין נמצא בתהליך בנייה, ובאופן זמני הוא כולל שני סוגים שונים של תחביר מוצע. במקרה הראשון נעשה שימוש במילת מפתח חדשה במאפיין display, ובמקרה השני, פריסת ה-masonry משולבת ישירות בפריסת ה-CSS grid.

שימוש ב-display: masonry

התחביר הזה מציג את פריסת ה-CSS כסוג display משלו. מידע נוסף על הגישה ועל הסיבות להחלתה זמין בפוסט בבלוג Feedback needed: How should we define CSS masonry?‎ של צוות Google Chrome, וגם בקטע הבא של הפוסט הזה. אב הטיפוס הנוכחי ב-Chromium מבוסס על ההצעה הזו.

display: grid; grid-template-*: masonry;

בתחביר הזה, פריסת ה-CSS משולבת ישירות בפריסת ה-CSS. הפעלת מצב masonry מתבצעת על ידי הוספת מילת המפתח masonry להגדרה grid-template-columns במקרה של פריסת masonry מבוססת-שורות, או להגדרה grid-template-rows במקרה של פריסת masonry מבוססת-עמודות.

פרטים נוספים על ההצעה הזו והסיבות לה מופיעים בפוסט ב-WebKit‏ Help us choose the final syntax for Masonry in CSS (עזרו לנו לבחור את התחביר הסופי של Masonry ב-CSS).

שימו לב: חלופה להצעה הזו היא item-packהמאפיין ומילת המפתח collapse, שיפעילו פריסה של CSS במבנה של בנייה באבן במקום להשתמש באחד משני מאפייני תבנית הרשת.

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

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

יצירת פריסת masonry משלכם ב-CSS

בואו נהנה וניצור פריסת CSS של קיר לבנים.

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

יצירת קונטיינר של פריסה חופשית

כדי ליצור את קונטיינר ה-Masonry הראשון שמבוסס על עמודות, משתמשים בתג display:masonry ומגדירים את גדלי העמודות באמצעות התג grid-template-columns. ערך ברירת המחדל של masonry-direction הוא column, ולכן הגדרת המאפיין הזה היא אופציונלית.

.masonry {
  display: masonry;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  gap: 10px;
}
פריסת Masonry שבה כל העמודות באותו גודל.
לצפייה בהדגמה של עמודות באותו גודל

אם רוצים להשתמש במקום זאת בקונטיינר של masonry שמבוסס על שורות, משתמשים ב-display:masonry, מגדירים את גודלי השורות באמצעות grid-template-rows ואז מגדירים את masonry-direction:row.

.masonry {
 display: masonry;
 masonry-direction: row;
 grid-template-rows: repeat(auto-fit, minmax(160px, 1fr));
 gap: 10px;
}
פריסת Masonry שבה כל השורות באותו הגודל.
כאן אפשר לצפות בהדגמה של שורות בגודל שווה

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

השינוי הזה מאפשר שימוש חוזר בנכסים בין סוגי פריסות, אבל יכול להיות שהוא יבלבל אתכם. נשמח לקבל מכם משוב בנושא. יכול להיות שנבחן אפשרות ליצור כינויים כלליים יותר למאפיינים כמו grid-template-columns ו-grid-template-rows, למשל template-columns או template-rows, שאפשר יהיה להשתמש בהם גם בפריסה של רשת וגם בפריסה של קיר לבנים.

שימוש בגודל ברירת המחדל של הרצועה

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

בארגומנטים של הרשת, grid-template-columns ו-grid-template-rows מוגדרים כברירת מחדל כ-none שבדרך כלל, לפי ההגדרה הנוכחית, מובילים לעמודה או לשורה אחת. בפריסה של בלוקים, ברירת המחדל הזו לרוב תוביל לפריסה לא רצויה.

ההטמעה ב-Chromium מוסיפה את ההגדרה המוצעת החדשה של none, שתחליף את גודל הרצועה שמוגדר כברירת מחדל ב-CSS masonry. גודל ברירת המחדל החדש של רצועת האודיו הוא הערך repeat(auto-fill, auto). הערך הזה יוצר פריסת קיר יפה בלי להגדיר גדלים של רצועות בכלל:

.masonry {
  display: masonry;
  gap: 10px;
}
פריסת Masonry עם עמודות בגודל אוטומטי.
כאן אפשר לצפות בהדגמה של גודל הטראק שמוגדר כברירת מחדל

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

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

כדאי לנסות את מאפיין הקיצור masonry

כמו שצוין קודם, ההטמעה הנוכחית ב-Chromium מסתמכת על המאפיינים grid-template-* כדי להגדיר את מסלול ה-masonry בפריסה. עם זאת, מכיוון שפריסת masonry היא חד-ממדית, הטמענו גם את מאפיין הקיצור masonry, שבו אפשר להשתמש כדי להגדיר גם את הכיוון של פריסת masonry וגם את הגדרת הרצועה בבת אחת, בלי מאפיין הקיצור המבלבל grid-.

לדוגמה, שני קטעי הקוד הבאים ייצרו מאגרי CSS masonry שווי ערך.

.masonry {
 display: masonry;
 masonry: "a a b" 50px 100px 200px row;
}

.masonry {
  display: masonry;
  masonry-direction: row;
  grid-template-rows: 50px 100px 200px;
  grid-template-areas: "a" "a" "b"
}
פריסת קיר עם שלוש שורות שגדלות בהדרגה.
כאן אפשר לראות הדגמה של קיצור הדרך ל-masonry

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

שימוש בגדלים מותאמים אישית של רצועות

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

.masonry {
 display: masonry;
 masonry: repeat(2, 3rem) repeat(auto-fit, 5rem) 12rem;
}
פריסת Masonry עם גדלים שונים של רצועות.
כאן אפשר לצפות בהדגמה של גדלים של קהלים מצומצמים בהתאמה אישית

בדוגמה הזו, אנחנו מגדירים שני טראקים ראשונים של 3rem, ואחריהם מספר משתנה של טראקים של 5rem, ואז טראק יחיד של 12rem.

הוספה למספר טראקים

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

לדוגמה:

.masonry {
  display: masonry;
  masonry: repeat(auto-fill, minmax(12rem, 1fr));
}

.important-item {
  grid-column: span 2;
}
פריסת Masonry עם פריטים שמשתרעים על פני כמה טראקים.
כאן אפשר לצפות בהדגמה של טראקים שמתפרסים על פני כמה טראקים

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

.masonry {
 display: masonry;
 masonry: repeat(auto-fill, minmax(12rem, 1fr));
}

.full-bleed {
 grid-column: 1 / -1;
}

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

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

כוונון עדין של מיקום פריטים בפריסת Masonry

ב-CSS Masonry, הפריטים ממוקמים בעמודה או בשורה עם המיקום הקצר ביותר.

דמיינו מאגר של פריסת Masonry עם שתי עמודות. אם יש פריט בגובה 110px בעמודה הראשונה ופריט בגובה 100px בעמודה השנייה, פריט שלישי ימוקם בעמודה השנייה, במרחק של 10px מתחילת הכיוון של פריסת ה-Masonry.

פריסת מייסונרי של שתי עמודות.

אם אתם חושבים שהבדל של 10px במיקום ההפעלה הוא קטן מספיק במקרה שלכם, ומעדיפים שהפריט השלישי יוצב בעמודה הראשונה כדי להתאים טוב יותר לסדר המקור, אתם יכולים להשתמש במאפיין item-tolerance.

המאפיין החדש item-tolerance קובע את הרגישות במיקום הפריטים.

בדוגמה שלמעלה, אפשר להחיל את item-tolerance: 10px; על מאגר התגים כדי להתאים אישית את השונות במיקום הפריט:

.masonry {
  display: masonry;
  masonry: 200px 200px;
  gap: 10px;
  item-tolerance: 10px;
}
פריסת מייסונרי של שתי עמודות.
לצפייה בהדגמה של טווח התנודות של הפריט

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

מאפיינים זמינים אחרים

אפשר להשתמש באותם מאפייני גודל ומיקום של תבנית כדי לשנות את הגודל של הפריטים ולמקם אותם בציר הרשת של קונטיינר masonry, כמו ב-CSS Grid, למשל grid-row, ‏ grid-column, ‏ grid-area, ‏ grid-template-areas או order. כדי ליהנות מהיכולות המלאות של CSS Grid כשיוצרים פריסת Masonry.

בקשה למשוב

אנחנו כבר ממש סקרנים לראות מה תיצרו באמצעות פריסת CSS, ואיך תשתמשו ביכולות החדשות שהיא מאפשרת. דרך מצוינת להתחיל היא לבדוק את ההדגמות שלנו ואת קוד המקור שלהן, ולהתחיל ליצור דוגמאות משלכם ב-Chromium (חשוב להפעיל קודם את הדגל).

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

אם יש לכם רעיונות או משוב לגבי מבנה ה-API, אתם יכולים להוסיף תגובה לבעיה מספר 11243. אם אתם מעדיפים לכתוב פוסט בבלוג שלכם או ברשתות החברתיות, אל תשכחו לתייג אותנו ב-X או ב-LinkedIn.

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

אם נתקלתם בבאג במהלך הבדיקה של התכונה, אתם יכולים לשתף את המשוב שלכם על ידי פתיחת באג חדש ב-Chromium.