# 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. Basically 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.

### Example

Lorem ipsum
Lorem ipsum
Lorem ipsum

### Medium gutter

To apply a medium sized gutter between grid columns, just add the `.uk-grid-medium` class.

#### Example

Lorem ipsum
Lorem ipsum
Lorem ipsum

### Small gutter

To apply a smaller gutter between grid columns, just add the `.uk-grid-small` class.

#### Example

Lorem ipsum
Lorem ipsum
Lorem ipsum

### Collapse gutter

To remove the gutter entirely, just add the `.uk-grid-collapse` class.

#### Example

Lorem ipsum
Lorem ipsum
Lorem ipsum

## 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

Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.

### 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

Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.

### 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>