Grid
A primitive for creating fluid, nestable grid layouts.
#
Importimport { Grid, GridItem } from '@volue/wave-react';
-
Grid
: The main grid wrapper defining the shape of the grid. -
GridItem
: Used as a child ofGrid
to control the span and start positions within the grid.
#
BackgroundGrid creates organized and consistent layouts, by providing a standard for positioning elements.
Within a Grid
container, GridItem
s can be placed and aligned along a series of columns and rows via specific props.
The Grid defaults to 12 columns scale, but you can manually adapt to different breakpoints by setting number of columns specific to each breakpoint.
Pretty much all of the props available on Grid
and GridItem
are responsive, meaning they accept either a single value or an object that maps values to breakpoints defined in Wave.
The consumer of the component is in control over how elements are laid out on the grid under different conditions, which offers huge flexibility.
See Breakpoints page to get an overview of the available breakpoints in Wave.
Grid is an abstraction over CSS Grid Layout Module.
#
Examples#
Default configurationPlace items in a grid container and each cell will align to a column. By default each column will have an equal share of space available in the grid container and you can have up to 12 columns. Any cells that do not fit on a single row will wrap to a new row. The grid adds new rows as it grows and there is no limit.
#
Customizing columnsLarge column count comes in handy when you want some finer control of things inside the grid, but for simple layouts you may want to customize the number of columns.
#
ResponsiveAt different breakpoints, you may want different column counts. The columns
prop is responsive.
For example, if you wanted a single column on mobile and three columns from larger screens upwards:
#
Specifying the rowsBy default there are no explicit rows; instead rows are auto-generated as items are added. There are however some cases where you do want to be specific about the number of rows. Grid component supports up to 6 explicit rows.
In the example below the flow of the grid items is set to column
, as opposed to the default row
.
Grid's rows
are explicitly defined and columns
are set to none
to declare no explicit columns. This results in grid items flowing down column by column, adding new columns if needed.
#
Spanning columns/rowsIn some layouts, you may need certain grid items to span specific amount of columns and rows instead of an even distribution.
#
ColumnsPass the colSpan
prop to the GridItem
component to span across columns.
#
RowsPass the rowSpan
prop to the GridItem
component to span across rows.
#
ResponsiveProps for controlling spanning are responsive. You can specify how many grid columns an item should stretch across per breakpoint.
#
Starting and ending linesItems in the grid can be instructed to start or end at the nth grid line.
#
Column axisTo position grid items along the horizontal column axis, colStart
and colEnd
properties.
These can also be combined with the colSpan
prop to span a specific number of columns.
#
Row axisTo position grid items along the row axis, use rowStart
and rowEnd
props. These can also be combined with the rowSpan
prop to span a specific number of rows.
#
ResponsiveIf you need to customize the placement of an item at a specific breakpoint, the GridItem
props are responsive.
In the example below sidebar is positioned specifically, giving it a different visual order to the source code.
#
White space#
Uniform gap sizeUse gap
property to change the white space between both rows and columns in a grid layout using Wave's standard white space scale.
When no explicit gap
is provided, the white space between the items defaults to spacingM
.
#
Customizing row and column gaps independentlyUse rowGap
and columnGap
to change the gap between rows and columns independently.
#
GaplessIn case you want to remove the gaps altogether, set the gap
prop to none
.
#
Sizing in the implicit gridIf there are more grid items than cells in the grid or when a grid item is positioned outside of the explicit grid (defined by columns
or rows
),
the grid container automatically generates implicit grid tracks by adding new grid lines.
The default for tracks in the implicit grid is for them to be auto-sized, meaning they will expand to contain the content you place into them.
#
Sizing implicit rowsUse gridAutoRows
prop to define sizing of implicitly-created grid rows. In the example below all rows have the same size (the tallest item in the grid sets the height for all rows).
#
Sizing implicit columnsUse gridAutoColumns
prop to define sizing of implicitly-created grid columns. In the example below flow
is changed to column
and each columns size is as small as possible without causing the content to overflow.
#
Alignment options#
Grid items alignmentjustifyItems
property defines the alignment of grid items along the inline (row) axis. In the example below we are aligning grid items to be flush with the start edge of their cell (by default they would have been stretched to fill it).
alignItems
property defines the alignment of grid items along the block (column) axis.
In the example below grid items of varying height have been centered vertically.
#
Grid alignmentSometimes the total size of your grid might be less than the size of its grid container. In this case you can set the alignment of the grid within the grid container.
justifyContent
property defines the alignment of the grid along the inline (row) axis.
alignContent
property defines the alignment of the grid alogn the block (column) axis.
#
Individual grid items alignmentAlignment values can be set on individual grid items. GridItem
exposes align
and justify
properties to provide granular control over the alignment of a single item inside the grid.
In the example below grid items are aligned to the end edge of their columns, except the middle one which is instructed to be placed in the center.
#
NestingLet's look at a common use case where we need to layout a view with a sidebar and a grid within the content area.
#
API Reference#
GridProp | Type | Default |
---|---|---|
as | enum | div |
css | StitchesCss | No default value |
display | enum | "grid" |
flow | enum | "row" |
columns | enum | "12" |
rows | enum | "none" |
autoColumns | enum | "auto" |
autoRows | enum | "auto" |
justifyItems | enum | No default value |
alignItems | enum | No default value |
justifyContent | enum | No default value |
alignContent | enum | No default value |
gap | SpacingToken | "spacingM" |
rowGap | SpacingToken | No default value |
columnGap | SpacingToken | No default value |
#
GridItemProp | Type | Default |
---|---|---|
as | enum | div |
css | StitchesCss | No default value |
colSpan | enum | No default value |
colStart | enum | No default value |
colEnd | enum | No default value |
rowSpan | enum | No default value |
rowStart | enum | No default value |
rowEnd | enum | No default value |
justify | enum | No default value |
align | enum | No default value |
order | enum | No default value |