איך לבנות דף רספונסיבי עם CSS Grid

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

מהו CSS Grid?

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

Image

הגדרת ה-container

כדי להפעיל את Grid Layout, עליך להוסיף את התכונה display: grid לאלמנט האב (container). האלמנט הזה יכיל את הרשת שלך.

דוגמה:

.container {
    display: grid;
}

הגדרת שורות ועמודות

1. הגדרת עמודות:

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

דוגמה:

   .container {
       grid-template-columns: 1fr 2fr 1fr; /* שלוש עמודות עם יחידות פרופורציונליות */
   }
   

  • 1fr משדר את המרחב הפנוי באופן שווה.
  • 2fr משדר פעמיים את המרחק של עמודה אחת.
  • 2. הגדרת שורות:

    השתמש בתכונה grid-template-rows כדי לקבוע את גובה השורות.

    דוגמה:

       .container {
           grid-template-rows: 100px auto 200px; /* שלוש שורות עם גובה קבוע או אוטומטי */
       }
       

  • 100px גובה קבוע.
  • auto גובה אוטומטי לפי התוכן.
  • 200px גובה קבוע.
  • 3. הגדרת גפיים (gaps):

    השתמש בתכונות gap, column-gap, ו-row-gap כדי לקבוע את הרווחים בין שורות ועמודות.

    דוגמה:

       .container {
           gap: 20px; /* רווח של 20 פיקסלים בין כל האלמנטים */
       }
       

    מיקום אלמנטים ברשת

    1. שימוש ב-grid-area:

    תוכל להקצות אזורים ברשת לכל אלמנט באמצעות תכונת grid-area. זהו הדרך הקלה ביותר למקם אלמנטים בתוך הרשת.

    דוגמה:

       .item1 {
           grid-area: 1 / 1 / 2 / 3; /* שורה 1, עמודה 1 עד שורה 2, עמודה 3 */
       }
       

    2. הגדרת מיקומים במדויק:

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

    דוגמה:

       .item1 {
           grid-row: 1 / 3; /* תופס שתי שורות */
           grid-column: 1 / 2; /* תופס עמודה אחת */
       }
       

    שימוש בפריסה רספונסיבית

    כדי להתאים את הדף למגוון מסכים, השתמש בשאילתות מדיה (media queries) לשנות את פריסת הרשת לפי רוחב המסך.

    דוגמה:

    .container {
        display: grid;
        grid-template-columns: repeat(3, 1fr);
        gap: 10px;
    }
    
    @media (max-width: 768px) {
        .container {
            grid-template-columns: 1fr 1fr; /* שתי עמודות על מסכים קטנים יותר */
        }
    }
    
    @media (max-width: 480px) {
        .container {
            grid-template-columns: 1fr; /* עמודה אחת על מסכים מאוד קטנים */
        }
    }
    

    סיכום

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

    דוגמה מלאה:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>CSS Grid Example</title>
        <style>
            .container {
                display: grid;
                grid-template-columns: 1fr 2fr 1fr;
                grid-template-rows: auto;
                gap: 10px;
                background-color: #f0f0f0;
                padding: 10px;
            }
            .item {
                background-color: #4CAF50;
                color: white;
                padding: 20px;
                text-align: center;
            }
            .item1 { grid-column: 1 / 3; }
            .item2 { grid-row: 2 / 4; }
            .item3 { grid-column: 3; }
            @media (max-width: 768px) {
                .container {
                    grid-template-columns: 1fr 1fr;
                }
            }
            @media (max-width: 480px) {
                .container {
                    grid-template-columns: 1fr;
                }
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="item item1">Item 1</div>
            <div class="item item2">Item 2</div>
            <div class="item item3">Item 3</div>
        </div>
    </body>
    </html>
    
    יתכן שחלק מהתמונות בדף זה נלקחו מהאתר freepik.com
    שיתוף