חיפוש

מספר מילים על הפונקציה repeat ב CSS

הפונקציה repeat() ב-CSS Grid חוסכת לכם כתיבה חוזרת של ערכים. אני משתמש בה כמעט בכל גריד שאני בונה – ברגע שמכירים אותה, קשה לחזור לכתיבת 1fr 1fr 1fr 1fr ידנית.

בואו נראה כיצד repeat() עובדת, כולל auto-fill, auto-fit, שילוב עם minmax() ודוגמאות מעשיות.

הבנת הפונקציה repeat ב-CSS

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

במקום לכתוב grid-template-columns: 1fr 1fr 1fr 1fr; אפשר לכתוב grid-template-columns: repeat(4, 1fr); – אותה תוצאה, קוד נקי יותר.

שימוש ב-repeat עם CSS Grid

הנה התחביר הבסיסי:

.grid-container {
    display: grid;
    grid-template-columns: repeat(3, 1fr); /* חזור על 3 עמודות ברוחב שווה */
}

בקוד מעלה התכונה grid-template-columns משתמשת בפונקציה repeat() כדי ליצור שלוש עמודות, כל אחת עם רוחב של 1fr (יחידת שבר). תחביר זה משפר את קריאות הקוד ומפחית כפילויות.

הנה דוגמה מלאה לשימוש בפונקציה repeat עם CSS Grid:

HTML:

<div class="grid-container">
  <div class="grid-item">1</div>
  <div class="grid-item">2</div>
  <div class="grid-item">3</div>
  <div class="grid-item">4</div>
  <div class="grid-item">5</div>
  <div class="grid-item">6</div>
</div>

CSS:

.grid-container {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
}

.grid-item {
    background-color: #1e2a3a;
    color: #f1eeee;
    padding: 20px;
    text-align: center;
    border: 1px solid #2a3a4a;
    border-radius: 4px;
}

תוצאה:

1
2
3
4
5
6

ניתן גם לחזור על מספר גדלים כדפוס. למשל, repeat(3, 1fr 2fr) יוצר שש עמודות שמתחלפות בין רוחב 1fr ו-2fr.

גריד רספונסיבי עם auto-fill ו-auto-fit

העוצמה האמיתית של repeat() מתגלה כשמחליפים את המספר הקבוע במילות המפתח auto-fill או auto-fit. בשילוב עם minmax(), ניתן ליצור עיצוב גריד רספונסיבי לחלוטין ללא שימוש ב-Media Queries.

מילת המפתח auto-fill

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

.grid-container {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    gap: 10px;
}

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

מילת המפתח auto-fit

auto-fit עובד בדומה ל-auto-fill, אך הוא מכווץ עמודות ריקות לרוחב אפס. המשמעות היא שהפריטים הקיימים נמתחים למלא את כל השורה.

.grid-container {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 10px;
}

ההבדל בין auto-fill לבין auto-fit נראה רק כשיש פחות פריטים ממה שהגריד יכול להכיל. עם auto-fill, עמודות ריקות שומרות על מקומן. עם auto-fit, עמודות ריקות מתכווצות והפריטים הקיימים גדלים למלא את השורה.

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

האם ניתן להשתמש בפונקציה repeat עם Flexbox?

לא ניתן להשתמש בפונקציה repeat() עם Flexbox, מכיוון שהיא ייחודית לתכונות של CSS Grid (grid-template-columns ו-grid-template-rows).

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

HTML:

<div class="flex-container">
  <div class="flex-item">פריט 1</div>
  <div class="flex-item">פריט 2</div>
  <div class="flex-item">פריט 3</div>
  <div class="flex-item">פריט 4</div>
  <div class="flex-item">פריט 5</div>
  <div class="flex-item">פריט 6</div>
</div>

CSS:

.flex-container {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
}

.flex-item {
    width: calc((100% - 20px) / 3); /* שלושה פריטים בשורה עם מרווח של 10 פיקסלים */
    background-color: #2a1520;
    color: #f1eeee;
    padding: 15px;
    margin-bottom: 10px;
    box-sizing: border-box;
    border: 1px solid #3c2030;
    border-radius: 4px;
}

תוצאה:

פריט 1
פריט 2
פריט 3
פריט 4
פריט 5
פריט 6

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

שימוש ב-repeat עם קווים עם שם (Named Lines)

ניתן לכלול קווי גריד עם שם (Named Lines) בתוך הפונקציה repeat(). זה שימושי בעיצובים גדולים בהם צריכים להתייחס לקווים ספציפיים לפי שם.

.grid-container {
    display: grid;
    grid-template-columns: repeat(4, [col-start] 1fr [col-end]);
}

קוד זה יוצר ארבע עמודות, כל אחת עם קו התחלה וסיום בעלי שם. ניתן למקם פריטים באמצעות שמות אלו: grid-column: col-start 2 / col-end 3;.

יתרונות הפונקציה repeat

למה להשתמש ב-repeat() במקום לכתוב את הערכים ידנית? שתי סיבות. ראשית, שינוי גריד מ-4 עמודות ל-6 עמודות דורש עריכה של מספר אחד במקום הוספת ערכים. שנית, כששמים את repeat() ביחד עם auto-fit ו-minmax(), מקבלים עיצוב רספונסיבי לחלוטין ללא Media Queries.

שאלות נפוצות

שאלות נפוצות על הפונקציה repeat() ב-CSS Grid:

אפשר להשתמש ב-repeat() עם grid-template-rows?
כן. הפונקציה repeat() עובדת גם עם grid-template-columns וגם עם grid-template-rows. למשל, grid-template-rows: repeat(3, 100px) יוצר שלוש שורות בגובה 100 פיקסלים כל אחת.
מה ההבדל בין auto-fill לבין auto-fit?
שניהם יוצרים כמה שיותר עמודות שמתאימות לשטח הזמין. ההבדל מופיע כשיש פחות פריטים מעמודות: auto-fill שומר על העמודות הריקות ועל המרחב שלהן, בעוד auto-fit מכווץ עמודות ריקות כך שהפריטים הקיימים נמתחים למלא את השורה.
אפשר לשלב repeat() עם ערכים אחרים ב-grid-template-columns?
כן. ניתן לשלב repeat() עם ערכים קבועים או גמישים. למשל, grid-template-columns: 200px repeat(3, 1fr) 200px; יוצר עיצוב עם סיידבארים קבועים ושלוש עמודות גמישות שוות באמצע.
האם repeat() עובד עם Flexbox?
לא. הפונקציה repeat() ייחודית לתכונות CSS Grid (grid-template-columns ו-grid-template-rows). עבור Flexbox, ניתן להשיג דפוסים חוזרים דומים באמצעות calc() או התכונה flex.
האם הפונקציה repeat() נתמכת בכל הדפדפנים?
כן. הפונקציה repeat() נתמכת בכל הדפדפנים המודרניים, כולל Chrome, Firefox, Safari ו-Edge. היא זוכה לתמיכה מלאה בין דפדפנים מאז 2020.

סיכום

repeat() חוסכת הקלדה חוזרת, ובשילוב עם auto-fit ו-minmax() מקבלים עיצוב רספונסיבי בלי Media Queries בכלל. אם אתם עובדים עם CSS Grid באופן קבוע, זו פונקציה שתשתמשו בה כל הזמן.

דיון ותגובות
2 תגובות  ]
  • אנונימית 22 אוקטובר 2024, 12:04

    תודה על המדריך.
    בFLEX אני רואה שימוש ב CALC ולא ב REPEAT (או שאני מפספסת משהו).

    נ.ב. CALC היא פונקציה פשוט מושלמת!! אם באתר עדיין מדריך עליה – כדאי שיהיה. היא גאונית וסופר שימושית.
    ועוד נ.ב. האם יהיה מדריך על CSS container queries?

    • רועי יוסף 22 אוקטובר 2024, 12:37

      את צודקת!!! תודה על תשומת הלב, הפוסט תוקן 🙂 צפי לפוסט על CSS container queries בקרוב…

השאירו תגובה

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

Savvy WordPress Development official logo