Grid
Create a fully responsive, fluid and nestable grid layout.
The grid system of UIkit follows the mobile-first approach and accomodates up to 10 grid columns. It uses units with predefined classes inside each grid, which define the column width. It is also possible to combine the grid with classes from the Flex component, although it works only in modern browsers.
Usage
To create the grid container, add the .uk-grid
class to a parent element. Add one of the .uk-width-*
classes to child elements to determine, how the units shall be sized. The grid supports 1, 2, 3, 4, 5, 6 and 10 unit divisions. This table gives you an overview of the uk-width-*
classes that can be applied to units.
Class | Description |
---|---|
.uk-width-1-1 |
Fills 100% of the available width. |
.uk-width-1-2 |
Divides the grid into halves. |
.uk-width-1-3 to .uk-width-2-3 |
Divides the grid into thirds. |
.uk-width-1-4 to .uk-width-3-4 |
Divides the grid into fourths. |
.uk-width-1-5 to .uk-width-4-5 |
Divides the grid into fifths. |
.uk-width-1-6 to .uk-width-5-6 |
Divides the grid into sixths. |
.uk-width-1-10 to .uk-width-9-10 |
Divides the grid into tenths. |
We built an intentional redundancy into each set of unit classes, so that for instance the .uk-width-5-10
class will work just as well as .uk-width-1-2
.
Example
Take a closer look at the following grid example, which gives you a great overwiew of all basic .uk-width-*
classes.
.uk-width-1-3
.uk-width-1-3
.uk-width-1-3
.uk-width-1-2
.uk-width-1-2
.uk-width-3-10
.uk-width-7-10
NOTE The grid has no style related CSS. In our example we used panels from the Panel component.
Markup
Here is a simple code example of how the default grid with 2 columns would look like:
<div class="uk-grid">
<div class="uk-width-1-2">...</div>
<div class="uk-width-1-2">...</div>
</div>
Responsive width
UIkit provides a number of very useful responsive widths classes. Basicall they work just like the usual width classes, except they are prefixed, so that they only come to effect at certain breakpoints. These classes can be combined with the visibility classes from the Utility component. This is great to adjust your layout and content for different device sizes.
Class | Description |
---|---|
.uk-width-* |
Affects all device widths, grid columns stay side by side. |
.uk-width-small-* |
Affects device widths of 480px and higher. Grid columns will stack on smaller sizes. |
.uk-width-medium-* |
Affects device widths of 768px and higher. Grid columns will stack on smaller sizes. |
.uk-width-large-* |
Affects device widths of 960px and higher. Grid columns will stack on smaller sizes. |
IMPORTANT To create a margin between stacking grid columns, just add the data-uk-grid-margin
attribute.
Example
.uk-width-medium-1-2
.uk-width-large-1-3
.uk-hidden-medium
.uk-width-large-1-3
.uk-width-medium-1-2
.uk-width-large-1-3
.uk-width-1-2
.uk-width-medium-1-3
.uk-hidden-small
.uk-width-medium-1-3
.uk-width-1-2
.uk-width-medium-1-3
.uk-width-1-1 .uk-visible-small
.uk-width-medium-1-1 .uk-visible-medium
.uk-width-large-1-1 .uk-visible-large
Grid gutter
Grids automatically create a horizontal gutter between columns and a vertical one between two succeeding grids. By default, the grid gutter is wider on large screens. To avoid this behavior and preserve the originial spacing, just add the .uk-grid-preserve
class.
Example
Small gutter
To apply a smaller gutter between grid columns, just add the .uk-grid-small
class.
Example
Nested grid
You can easily extend your grid layout with nested grids.
Example
.uk-width-1-2
.uk-width-1-2
.uk-width-1-2
Markup
<div class="uk-grid">
<div class="uk-width-1-2">...</div>
<div class="uk-width-1-2">
<div class="uk-grid">
<div class="uk-width-1-2">...</div>
<div class="uk-width-1-2">...</div>
</div>
</div>
</div>
Center grid
Add the .uk-container-center
class from the Utility component to center a grid column.
Example
.uk-container-center
Grid divider
Add the .uk-grid-divider
class to separate grid columns with lines. To separate grids with a horizontal line, just add the class to a <hr>
or <div>
element.
Example
.uk-width-medium-1-3
.uk-width-medium-1-3
.uk-width-medium-1-3
.uk-width-medium-1-3
.uk-width-medium-1-3
.uk-width-medium-1-3
Markup
<div class="uk-grid uk-grid-divider">...</div>
<hr class="uk-grid-divider">
<div class="uk-grid uk-grid-divider">...</div>
NOTE The horizontal divider can not be applied to grids with any of the uk-push-*
or uk-pull-*
classes.
Source ordering
You can change the display order of the columns to keep a specific column order in the source code. Add one of the .uk-push-*
classes to move the column to the right and add one of the .uk-pull-*
classes to move a column to the left. This allows you for example to flip the columns' display order for wider viewports. The classes can also be used to offset columns, creating additional space between them.
Source ordering is useful for SEO and responsive design, because in narrow viewports the grid will be displayed according to the source order of the markup.
NOTE This feature only works in combination with one of the .uk-width-medium-*
classes.
Example
.uk-width-medium-1-2 .uk-push-1-2
.uk-width-medium-1-2 .uk-pull-1-2
.uk-width-medium-2-5 .uk-push-3-5
.uk-width-medium-2-5 .uk-pull-2-5
Markup
<div class="uk-grid">
<div class="uk-width-medium-1-2 uk-push-1-2">...</div>
<div class="uk-width-medium-1-2 uk-pull-1-2">...</div>
</div>
Match column heights
The Grid component uses Flexbox, so the height of grid columns is matched automatically. To achieve the same effect in older browsers that don't support Flexbox, just add the data-uk-grid-match
attribute to your grid. If your grid wraps into multiple rows, only grid columns within the same row are matched. To match grid columns accross all rows just use data-uk-grid-match="{row: false}"
.
Example
Markup
<div class="uk-grid" data-uk-grid-match>...</div>
NOTE If grid columns extend to a width of 100%, their heights will no longer be matched. This makes sense, for example, if they stack vertically in narrower viewports.
Match height of panels
If you want to match the heights of panels in a grid, just add the .uk-grid-match
class. When using the data attribute, you need to add the {target:'.uk-panel'}
selector.
Example
Markup
<div class="uk-grid uk-grid-match" data-uk-grid-match="{target:'.uk-panel'}">
<div class="uk-width-medium-1-3">
<div class="uk-panel">...</div>
</div>
</div>
Wrap multiple rows
You can also create a grid with as many columns as you want, which automatically break into the next line. Just add the data-uk-grid-margin
attribute to create a margin between the grid rows. Typically this layout is built using a <ul>
element.
Example
- Box
- Box
- Box
- Box
- Box
- Box
NOTE You can also apply a custom width to your grid columns. Just add the .uk-width
class and use an inline style to define the width. This example uses fixed pixel values for the widths as you would do with images.
- Box
- Box
- Box
- Box
- Box
- Box
- Box
- Box
Markup
<ul class="uk-grid" data-uk-grid-margin>
<!-- These elements have a width in percent -->
<li class="uk-width-medium-1-5">...</li>
<li class="uk-width-medium-3-10">...</li>
<!-- These elements have a width in pixel -->
<li class="uk-width" style="width: 100px;">...</li>
<li class="uk-width" style="width: 150px;">...</li>
</ul>
Even grid columns
To create a grid whose child elements' widths are evenly split, you don't have to apply the same class to each list item within the grid. Just add one of the .uk-grid-width-*
classes to the grid itself.
Class | Description |
---|---|
.uk-grid-width-1-2 |
Divides the grid into halves. |
.uk-grid-width-1-3 |
Divides the grid into thirds. |
.uk-grid-width-1-4 |
Divides the grid into fourths. |
.uk-grid-width-1-5 |
Divides the grid into fifths. |
.uk-grid-width-1-6 |
Divides the grid into sixths. |
.uk-grid-width-1-10 |
Divides the grid into tenths. |
Example
- Box
- Box
- Box
- Box
- Box
Markup
<ul class="uk-grid uk-grid-width-1-5">
<li>...</li>
<li>...</li>
</ul>
Responsive width
UIkit also provides responsive grid width classes. You can apply these to maintain evenly sized grid columns, regardless of the device width.
Class | Description |
---|---|
.uk-grid-width-* |
Affects all device widths. |
.uk-grid-width-small-* |
Affects device widths of 480px and higher. |
.uk-grid-width-medium-* |
Affects device widths of 768px and higher. |
.uk-grid-width-large-* |
Affects device widths of 960px and higher. |
.uk-grid-width-xlarge-* |
Affects device widths of 1220px and higher. |
Example
- Box
- Box
- Box
- Box
- Box
Markup
<ul class="uk-grid uk-grid-width-1-2 uk-grid-width-medium-1-3 uk-grid-width-large-1-5">
<li>...</li>
<li>...</li>
</ul>