Grid containers are a fundamental part of CSS layout, allowing you to divide a webpage into rows and columns. They provide a flexible and efficient way to manage layout.
Grid containers can be defined using the grid-template-columns and grid-template-rows properties. These properties define the number and size of columns and rows, respectively.
The grid-container is the parent element that contains the grid items, and it defines the overall structure of the grid. Its child elements, or grid items, are the content that is arranged within the grid.
Grid Container Basics
A grid container is the foundation of a CSS Grid layout. It's the HTML element that has display: grid applied, which creates a new grid formatting context for its direct children.
To define a grid container, you simply need to add the display: grid property to the element. This can be done in various ways, but the most common method is to add the display: grid property directly to the HTML element.
The grid container can be either a block-level grid or an inline-level grid, depending on whether you use the grid or inline-grid value for the display property. Here's a quick rundown of the options:
- grid: generates a block-level grid
- inline-grid: generates an inline-level grid
This difference in grid type is important to keep in mind when designing your layout, as it can affect the way your grid behaves and interacts with other elements on the page.
Basics
The Grid container is the foundation of any grid layout, and it's essential to understand how to create one. You define a container element as a grid with display: grid.
To get started with CSS Grid, you need to set the column and row sizes with grid-template-columns and grid-template-rows. This will determine the structure of your grid. The source order of the grid items doesn't matter, which makes it super easy to rearrange your grid with media queries.
Most browsers shipped native, unprefixed support for CSS Grid in March 2017, including Chrome, Firefox, Safari, and Opera. Internet Explorer 10 and 11 also support it, but with an outdated syntax.
Here are the different types of grid containers:
- grid – generates a block-level grid
- inline-grid – generates an inline-level grid
The HTML element that has display: grid applied creates a new grid formatting context for its direct children. This is what makes it a grid container.
Check Your Understanding
Grid layout direction is typically row-based by default, but you can change it to column-based if needed.
The CSS grid terms include grid, grid-template-columns, grid-template-rows, grid-template-areas, grid-column, grid-row, grid-column-gap, grid-row-gap, grid-auto-columns, grid-auto-rows, grid-auto-flow, grid-template, grid-template-areas, grid-template-columns, grid-template-rows, grid-auto-flow, grid-auto-columns, grid-auto-rows, grid-column, grid-row, grid-column-gap, and grid-row-gap.
Auto-fit and auto-fill are both used for grid-auto-flow, but auto-fit is used for a flexible grid, while auto-fill is used for a grid that can grow or shrink.
Min-content and max-content are both used for grid-template-columns and grid-template-rows, but min-content is used for the minimum content width, while max-content is used for the maximum content width.
Auto-placement is used for grid-auto-flow, allowing the browser to automatically place items in the grid.
Grid Container Properties
Grid container properties are what make a grid work. The grid container properties are a set of CSS properties that define the layout and behavior of a grid container.
Here are the properties for the parent grid container:
- display
- grid-template-columns
- grid-template-rows
- grid-template-areas
- grid-template
- grid-column-gap
- grid-row-gap
- grid-gap
- justify-items
- align-items
- place-items
- justify-content
- align-content
- place-content
- grid-auto-columns
- grid-auto-rows
- grid-auto-flow
- grid
The grid property is a shorthand that can be used to define the grid layout, and it will reset other grid properties to their initial values, including grid-template-rows, grid-template-columns, grid-template-areas, grid-auto-rows, grid-auto-columns, and grid-auto-flow.
Properties for Children
When you're working with grid containers, it's essential to understand the properties that apply to the children, or grid items.
Grid items can be controlled with a variety of properties, including grid-column-start, grid-column-end, grid-row-start, grid-row-end, grid-column, grid-row, and grid-area.
These properties allow you to precisely place and size your grid items. For example, you can use grid-column-start to specify which column a grid item should start in.
The following properties are particularly useful when working with grid items: grid-column-start, grid-column-end, grid-row-start, grid-row-end, grid-column, grid-row, and grid-area.
Some properties, however, have no effect on grid items. These include float, display: inline-block, display: table-cell, vertical-align, and column-* properties.
Here's a list of the properties that have no effect on grid items:
- float
- display: inline-block
- display: table-cell
- vertical-align
- column-* properties
Understanding these properties will help you create more effective and efficient grid layouts.
Property
The grid property is a shorthand that can be used to reset other grid properties to their initial values. This includes grid-template-rows, grid-template-columns, grid-template-areas, grid-auto-rows, grid-auto-columns, and grid-auto-flow.
Using the grid property shorthand will reset all of these properties to their initial values, effectively giving you a clean slate. This is useful if you want to start over and define the grid from scratch.
You can use the grid property shorthand to define the implicit grid, for example by setting grid-auto-rows and grid-auto-columns to their initial values. This allows you to focus on defining the grid-template-rows and grid-template-columns.
Here are the grid properties that are reset to their initial values when using the grid property shorthand:
- grid-template-rows
- grid-template-columns
- grid-template-areas
- grid-auto-rows
- grid-auto-columns
- grid-auto-flow
Grid Container Layout
To create a grid container, you apply the display: grid property to an HTML element, which creates a new grid formatting context for its direct children.
This element serves as the Grid Container, and its direct child elements become Grid Items.
To turn any layout element into a CSS grid layout, you simply set the Display value to grid.
You can edit a grid container in the builder, and a grid overlay will become visible, indicating the grid cells.
Clicking the little four-square element action icon lets you show or hide this overlay.
Grid items are laid out in rows by default, covering the full width of the grid container.
Grid Container Alignment
Grid Container Alignment is a crucial aspect of grid layout, allowing you to control the positioning of your grid within its container.
The align-content property aligns the grid along the block (column) axis, while justify-content aligns the grid along the inline (row) axis.
You can use align-content to align the grid to be flush with the start edge of the grid container, end edge, center, stretch, space-around, space-between, or space-evenly. Here's a quick rundown of your options:
- start – aligns the grid to be flush with the start edge of the grid container
- end – aligns the grid to be flush with the end edge of the grid container
- center – aligns the grid in the center of the grid container
- stretch – resizes the grid items to allow the grid to fill the full height of the grid container
- space-around – places an even amount of space between each grid item, with half-sized spaces on the far ends
- space-between – places an even amount of space between each grid item, with no space at the far ends
- space-evenly – places an even amount of space between each grid item, including the far ends
Row-End
The grid-row-end property determines the line where a grid item ends. You can specify a line number or a named grid line.
If you don't declare a grid-row-end, the item will span 1 track by default. This means it will only occupy one line in the grid.
You can use the grid-row-end property to control the end line of a grid item, giving you more flexibility in arranging your content.
Items Alignment
Items Alignment is where the magic happens in Grid Container Alignment. You can align and justify items in a grid, which is a departure from Flexbox where you only have control over item alignment at each breakpoint.
Grid Items are direct children of the cells of the Grid container. To justify items in a grid, you position them along the column axis of the grid.
The align-items property aligns grid items along the block (column) axis. If you want to center content in a grid cell horizontally, you would add .align-items--center to the grid container.
You can also use the justify-items property to align grid items along the inline (row) axis. This value applies to all grid items inside the container.
Here's a summary of the possible values for align-items and justify-items:
The place-items property sets both the align-items and justify-items properties in a single declaration. This can be very useful for super quick multi-directional centering.
The align-self property aligns a grid item inside a cell along the block (column) axis. This value applies to the content inside a single grid item.
You can also use the justify-self property to align a grid item inside a cell along the inline (row) axis. This value applies to the content inside a single grid item.
In the case where the total size of your grid might be less than the size of its grid container, you can use the align-content property to align the grid along the block (column) axis. This property aligns the grid along the block (column) axis (as opposed to justify-content which aligns the grid along the inline (row) axis).
Grid Container Gaps
Grid container gaps are a crucial aspect of grid layout. You can use the .gap-- classes on the grid container to create spacing between rows and columns.
The preferred way to add a gap to grids is with the contextual utility class, .grid-gap, or the contextual variable, var(--grid-gap). This creates a separation of styles so you can control the grid spacing across your site independently from other types of spacing.
You can use simple calc() functions to create grid gap variations. For example, calc(var(--grid-gap) * 2) will create a gap that is double your standard grid-gap.
The grid-gap utilities are set in the ACSS dashboard. This allows you to easily adjust the grid spacing across your site.
Grid Container Sizing
Grid container sizing is all about giving your grid tracks the right amount of space. You can use various keywords like `min-content`, `max-content`, and `auto` to size your tracks. For example, `min-content` will make a track as small as it can be without the content overflowing.
You can also use intrinsic sizing keywords like `min-content`, `max-content`, and `fit-content()` to size your grid tracks. `fit-content()` is like `max-content` at first, but once the track reaches the specified size, the content starts to wrap. This is useful for creating responsive grids.
Grid tracks can also be sized using the `grid-auto-rows` and `grid-auto-columns` properties to control the sizing of implicit tracks. For example, you can create all implicit rows at a minimum size of 10em and a maximum size of `auto`.
Fr Units
Fr units are a way to describe a share of the available space in the grid container, essentially meaning "portion of the remaining space".
You can use a single fr unit, like 1fr, to distribute the remaining space evenly among multiple tracks. For example, grid-template-columns: 200px 1fr 1fr 1fr would give three tracks an equal share of the remaining space.
Fr units are more flexible than percentage-based units, as they don't break when combined with other units, like padding. This makes them a great choice for creating responsive and dynamic grid layouts.
To create three columns that all get the same share of available space, you can use grid-template-columns: 1fr 1fr 1fr. This will distribute the remaining space evenly among the three tracks.
You can combine fr units with fixed size gaps or tracks to create more complex grid layouts. For example, grid-template-columns: 200px 1fr would give a component a fixed size element and the second track taking up whatever space is left.
Different values for the fr unit will share the space in proportion, with larger values getting more of the spare space.
Sizing Keywords
Sizing Keywords are a powerful tool in CSS Grid, allowing you to size your grid tracks with precision.
You can use keywords like min-content, max-content, and auto to size your grid tracks. These keywords are useful when you want to make your grid tracks adapt to their content.
The min-content keyword makes a track as small as it can be without the track content overflowing. This is useful when you have a long sentence or a line of text that you want to wrap within a grid track.
The max-content keyword has the opposite effect, making a track as wide as it needs to be for all the content to display in one long unbroken string. Be careful with this one, as it can cause overflows if the content is too long.
The auto keyword is like a fr unit, but it loses the fight in sizing against fr units when allocating the remaining space.
Here's a quick rundown of the sizing keywords:
- min-content: the minimum size of the content
- max-content: the maximum size of the content
- auto: a keyword that behaves like a fr unit, but loses the fight in sizing against fr units
These keywords can be used in conjunction with fractional units to create complex and responsive grid layouts.
Sizing Functions
The fit-content() function is a great way to size your grid tracks, as it will use the space available, but never less than min-content and never more than max-content.
The minmax() function is a powerful tool for setting a minimum and maximum value for what the length is able to be. It's useful for in combination with relative units, like setting a minimum width for a column.
Here are the key differences between fit-content() and minmax():
- fit-content() uses the space available, but never less than min-content and never more than max-content.
- minmax() sets a minimum and maximum value for what the length is able to be.
The minmax() function is especially useful for creating responsive grids, where you want to ensure that certain tracks have a minimum width or height, but also allow them to expand or contract as needed.
By using minmax(), you can create grids that are more flexible and adaptable to different screen sizes and devices.
Frequently Asked Questions
What is the difference between a grid container and a grid item?
A grid container is the overall grid structure, while a grid item is a single element within that structure, which can span multiple columns and/or rows. Understanding the difference between containers and items is key to mastering grid layouts.
Sources
- level 2 of the CSS Grid specification. (w3.org)
- more on this unit (digitalocean.com)
- repeat() notation (digitalocean.com)
- along text baseline (codepen.io)
- The spec has an official way (csswg.org)
- needs (meyerweb.com)
- only supported in Firefox (mozilla.org)
- Caniuse (caniuse.com)
- How To Use CSS Grid Properties to Justify and Align Content and Items (digitalocean.com)
- CSS Grid: Holy Grail Layout (digitalocean.com)
- CSS Grid Layout: Introduction (digitalocean.com)
- Learning CSS Grid Layout (rachelandrew.co.uk)
- Grid by Example (gridbyexample.com)
- CSS Grid Layout Module Level 1 (w3.org)
- grid overlay in Chrome DevTools (chrome.com)
- demo (codepen.io)
- min-content (mozilla.org)
- max-content (mozilla.org)
- Source (mozilla.org)
- minmax() (mozilla.org)
- grid-row-end (mozilla.org)
- grid-row-start (mozilla.org)
- grid-column-end (mozilla.org)
- grid-column-start (mozilla.org)
- grid-row (mozilla.org)
- grid-column (mozilla.org)
- grid-auto-columns (mozilla.org)
- grid-auto-rows (mozilla.org)
- grid-area (mozilla.org)
- grid-template-areas (mozilla.org)
- grid-template (mozilla.org)
- grid (mozilla.org)
- align-items (mozilla.org)
- justify-items (mozilla.org)
- align-self (mozilla.org)
- justify-self (mozilla.org)
- align-content (mozilla.org)
- justify-content (mozilla.org)
- A comprehensive collection of grid learning material (gridbyexample.com)
- Creating a Grid Container (smashingmagazine.com)
- MDN CSS Grid Layout (mozilla.org)
- ACSS YouTube Channel (youtube.com)
- grid cells (mozilla.org)
- tracks (mozilla.org)
- grid-template-rows (mozilla.org)
- grid-template-columns (mozilla.org)
- minmax (mozilla.org)
- repeat (mozilla.org)
- Grid lines (mozilla.org)
- grid-row (mozilla.org)
- grid-column (mozilla.org)
- grid-template-areas (mozilla.org)
- cssgrid.io (cssgrid.io)
- learncssgrid.com (learncssgrid.com)
- grid (material.io)
- Source (github.com)
- CSS's Flexible Box module (w3.org)
Featured Images: pexels.com