CSS Grid Columns and Rows

Define your grid structure with columns and rows

πŸ“ Grid Template Columns & Rows

Control your grid structure by defining columns and rows. You can use various units like pixels, percentages, fr units, and more to create flexible layouts.


.grid {
    display: grid;
    grid-template-columns: 100px 200px 100px;
    grid-template-rows: 80px 120px;
}
                                    

Defining Columns

πŸ“

Fixed Pixels

Exact column widths in pixels

grid-template-columns: 
  200px 300px 150px;
πŸ“Š

Percentages

Columns as percentage of container

grid-template-columns: 
  25% 50% 25%;
πŸ”„

Fractional Units

Flexible columns with fr units

grid-template-columns: 
  1fr 2fr 1fr;
πŸ”

Repeat Function

Repeat patterns easily

grid-template-columns: 
  repeat(3, 1fr);

πŸ”Ή Fixed Size Columns

Fixed-size columns in CSS Grid use absolute units like pixels for rigid, predictable layouts. Example: grid-template-columns: 200px 200px 200px;. Ideal for dashboards or control panels requiring precise alignment. Not inherently responsive; may cause horizontal scrolling on small screens. Can be combined with overflow-x: auto or media queries. Offers maximum control where exact dimensions outweigh fluid adaptability.

/* Fixed Columns */
.fixed-grid {
    display: grid;
    grid-template-columns: 150px 200px 100px;
    gap: 15px;
    background: #f8f9fa;
    padding: 20px;
}

.item {
    background: #007bff;
    color: white;
    padding: 20px;
    text-align: center;
    border-radius: 5px;
}
<div class="fixed-grid">
    <div class="item">150px</div>
    <div class="item">200px</div>
    <div class="item">100px</div>
</div>

Output:

150px
200px
100px

πŸ”Ή Flexible Columns with fr Units

Flexible columns use the fractional unit (fr) to distribute space proportionally in CSS Grid. Example: grid-template-columns: 1fr 2fr 1fr; gives the middle column twice the leftover space. fr units create inherently responsive layouts adapting to container width. Ideal for main content/sidebar patterns, card grids, and fluid designs. Combined with gap for consistent gutters, it’s a cornerstone of modern CSS layout.

/* Flexible Columns */
.flexible-grid {
    display: grid;
    grid-template-columns: 1fr 3fr 2fr;
    gap: 20px;
    background: #e9ecef;
    padding: 20px;
    min-height: 120px;
}

.flex-item {
    background: #28a745;
    color: white;
    padding: 25px;
    text-align: center;
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
}
<div class="flexible-grid">
    <div class="flex-item">1fr</div>
    <div class="flex-item">3fr (3x wider)</div>
    <div class="flex-item">2fr</div>
</div>

Output:

1fr
3fr (3x wider)
2fr

πŸ”Ή Repeat Function

The CSS Grid repeat() function defines multiple tracks without repetition. Syntax: repeat(count, track-size). Example: repeat(3, 1fr) creates three equal columns. Accepts auto-fit or auto-fill for responsive grids that adjust column count. Saves code, improves readability, and is essential for creating flexible, maintainable grid templates. A powerful tool for efficient layout definitions.

/* Using Repeat */
.repeat-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    grid-template-rows: repeat(2, 100px);
    gap: 10px;
    background: #fff3cd;
    padding: 15px;
}

.repeat-item {
    background: #ffc107;
    color: #212529;
    padding: 15px;
    text-align: center;
    border-radius: 4px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: bold;
}
<div class="repeat-grid">
    <div class="repeat-item">1</div>
    <div class="repeat-item">2</div>
    <div class="repeat-item">3</div>
    <div class="repeat-item">4</div>
    <div class="repeat-item">5</div>
    <div class="repeat-item">6</div>
    <div class="repeat-item">7</div>
    <div class="repeat-item">8</div>
</div>

Output:

1
2
3
4
5
6
7
8

πŸ”Ή Mixed Units

Mixed units combine different unit types in CSS Grid for complex, hybrid layouts. Example: grid-template-columns: 250px 1fr auto; mixes fixed, flexible, and content-based sizing. This allows precise control over specific areas while others adapt fluidly. Useful for layouts with a fixed sidebar, flexible main content, and an auto-sized control panel. Provides the versatility needed for sophisticated, responsive designs.

/* Mixed Units */
.mixed-grid {
    display: grid;
    grid-template-columns: 200px 1fr 150px;
    grid-template-rows: 80px auto 60px;
    gap: 15px;
    background: #f1f3f4;
    padding: 20px;
    min-height: 300px;
}

.mixed-item {
    background: #6f42c1;
    color: white;
    padding: 15px;
    border-radius: 6px;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
}
<div class="mixed-grid">
    <div class="mixed-item">Fixed 200px</div>
    <div class="mixed-item">Flexible 1fr</div>
    <div class="mixed-item">Fixed 150px</div>
    <div class="mixed-item">Row 2</div>
    <div class="mixed-item">Auto Height</div>
    <div class="mixed-item">Row 2</div>
    <div class="mixed-item">Fixed 60px</div>
    <div class="mixed-item">Footer</div>
    <div class="mixed-item">Fixed 60px</div>
</div>

Output:

Fixed 200px
Flexible 1fr
Fixed 150px
Row 2
Auto Height
Row 2
Fixed 60px
Footer
Fixed 60px

πŸ”Ή Common Patterns

Common CSS Grid patterns include 12-column grids, magazine layouts, and asymmetric designs. These patterns provide reliable structures for diverse content types. For example, a 12-column grid offers granular control for complex interfaces. Magazine layouts use overlapping areas for visual interest. Asymmetric designs break uniformity for artistic impact. These patterns are SEO-friendly, accessible, and enhance user engagement through thoughtful information architecture.

Popular Column Patterns:

  • repeat(12, 1fr) - 12-column grid system
  • 200px 1fr 200px - Sidebar, content, sidebar
  • repeat(auto-fit, minmax(250px, 1fr)) - Responsive cards
  • 1fr 3fr - Sidebar and main content

Popular Row Patterns:

  • auto 1fr auto - Header, content, footer
  • repeat(3, 200px) - Equal height rows
  • minmax(100px, auto) - Minimum height with flexibility

🧠 Test Your Knowledge

What does "1fr 2fr 1fr" create?