# SimpleGrid
`{% simplegrid %}` lays its children out in a grid where **every column is
the same width** — the simplest way to arrange a row of equal cards or tiles that reflows to
fewer columns on narrow screens. Set the base column count with `cols`, the gaps with `spacing`
(horizontal) and `verticalSpacing` (vertical), and let any of those adapt per breakpoint with
the `*Sm`/`*Md`/`*Lg`/`*Xl` props. Each top-level block in the body becomes one grid cell.
Use it as `{% simplegrid %}` in Markdown, or call it from Python logic
(loops, snippets) via `component('aardvark', 'simplegrid', …)`.
## Fixed columns
`cols` sets the number of equal-width columns. Here three cells sit in three columns with the
default `md` spacing.
One
Two
Three
Source: Markdown
```aardvark
{% simplegrid cols=3 spacing='md' %}
{% badge size='lg' fullWidth %}One{% endBadge %}
{% badge size='lg' fullWidth %}Two{% endBadge %}
{% badge size='lg' fullWidth %}Three{% endBadge %}
{% endSimplegrid %}
```
Source: Python
```python
component('aardvark', 'simplegrid', cols=3, spacing='md', children=(
component('aardvark', 'badge', size='lg', fullWidth=True, children='One')
+ '\n\n'
+ component('aardvark', 'badge', size='lg', fullWidth=True, children='Two')
+ '\n\n'
+ component('aardvark', 'badge', size='lg', fullWidth=True, children='Three')
))
```
## Responsive columns
`cols` is the base column count; `colsSm` / `colsMd` / `colsLg` / `colsXl` override it at that
Mantine breakpoint and up. The grid below is one column on a phone, two on a tablet, and four on
a wide screen — resize the window to watch it reflow.
A
B
C
D
Source: Markdown
```aardvark
{% simplegrid cols=1 colsSm=2 colsLg=4 spacing='sm' %}
{% badge fullWidth %}A{% endBadge %}
{% badge fullWidth %}B{% endBadge %}
{% badge fullWidth %}C{% endBadge %}
{% badge fullWidth %}D{% endBadge %}
{% endSimplegrid %}
```
Source: Python
```python
component('aardvark', 'simplegrid', cols=1, colsSm=2, colsLg=4, spacing='sm', children=(
component('aardvark', 'badge', fullWidth=True, children='A')
+ '\n\n'
+ component('aardvark', 'badge', fullWidth=True, children='B')
+ '\n\n'
+ component('aardvark', 'badge', fullWidth=True, children='C')
+ '\n\n'
+ component('aardvark', 'badge', fullWidth=True, children='D')
))
```
## Spacing and vertical spacing
`spacing` is the horizontal gap between columns; `verticalSpacing` is the gap between rows (it
defaults to `spacing` when omitted). Each is a Mantine size token or any CSS value, and each
takes per-breakpoint overrides — `spacingSm`, `verticalSpacingLg`, and so on.
One
Two
Three
Four
Source: Markdown
```aardvark
{% simplegrid cols=2 spacing='xl' verticalSpacing='xs' %}
{% badge fullWidth %}One{% endBadge %}
{% badge fullWidth %}Two{% endBadge %}
{% badge fullWidth %}Three{% endBadge %}
{% badge fullWidth %}Four{% endBadge %}
{% endSimplegrid %}
```
Source: Python
```python
component('aardvark', 'simplegrid', cols=2, spacing='xl', verticalSpacing='xs', children=(
component('aardvark', 'badge', fullWidth=True, children='One')
+ '\n\n'
+ component('aardvark', 'badge', fullWidth=True, children='Two')
+ '\n\n'
+ component('aardvark', 'badge', fullWidth=True, children='Three')
+ '\n\n'
+ component('aardvark', 'badge', fullWidth=True, children='Four')
))
```
## With other components
Each cell can hold any component, not just a badge. Here the grid arranges three
[`card`](/components/data-display/card/)s that reflow from three columns to one on a phone.
Builds in seconds.
Schema-checked config.
One palette, everywhere.
Source: Markdown
```aardvark
{% simplegrid cols=3 colsSm=1 spacing='md' %}
{% card title='Fast' %}Builds in seconds.{% endCard %}
{% card title='Typed' %}Schema-checked config.{% endCard %}
{% card title='Themed' %}One palette, everywhere.{% endCard %}
{% endSimplegrid %}
```
Source: Python
```python
component('aardvark', 'simplegrid', cols=3, colsSm=1, spacing='md', children=(
component('aardvark', 'card', title='Fast', children='Builds in seconds.')
+ '\n\n'
+ component('aardvark', 'card', title='Typed', children='Schema-checked config.')
+ '\n\n'
+ component('aardvark', 'card', title='Themed', children='One palette, everywhere.')
))
```
## Attributes
| Attribute | Valid values | Description |
| --- | --- | --- |
| `cols` | integer (`1` default) | Base number of equal-width columns. |
| `colsSm`, `colsMd`, `colsLg`, `colsXl` | integer | Column count at that breakpoint and up. |
| `spacing` | `xs`, `sm`, `md` (default), `lg`, `xl`, or any CSS value | Horizontal gap between columns. |
| `spacingSm`, `spacingMd`, `spacingLg`, `spacingXl` | Mantine size token or any CSS value | Horizontal gap at that breakpoint and up. |
| `verticalSpacing` | Mantine size token or any CSS value | Vertical gap between rows (defaults to `spacing`). |
| `verticalSpacingSm`, `verticalSpacingMd`, `verticalSpacingLg`, `verticalSpacingXl` | Mantine size token or any CSS value | Vertical gap at that breakpoint and up. |
| `m`, `mt`, `mb`, `ml`, `mr`, `mx`, `my` | Mantine size token or any CSS value | Margin (all sides / top / bottom / left / right / horizontal / vertical). |
| `p`, `pt`, `pb`, `pl`, `pr`, `px`, `py` | Mantine size token or any CSS value | Padding (all sides / top / bottom / left / right / horizontal / vertical). |
| `bg` | color name or CSS color | Background color. |
| `c` | color name or CSS color | Text color. |
| `w`, `h` | Mantine size token or any CSS value | Width / height. |
| `miw`, `mih`, `maw`, `mah` | any CSS value | Min/max width and min/max height. |
## CSS Selectors
Each `simplegrid` carries `data-aardvark-island="SimpleGrid"` on its wrapper, and Mantine exposes its parts as `mantine-SimpleGrid-*` classes — target either to style it from your theme CSS.
```css
[data-aardvark-island="SimpleGrid"] {
/* style every simplegrid on the page */
}
.mantine-SimpleGrid-root {
/* the root part */
}
```
## Injecting Attributes
`attr={…}` forwards raw HTML attributes (including event handlers) straight onto the rendered element.
A
B
C
Source: Markdown
```aardvark
{% simplegrid cols=3 spacing='md' attr={'onclick': '''
const value = this.innerText;
console.log('attr demo value:', value);
alert(value);
'''} %}
{% paper %}A{% endPaper %} {% paper %}B{% endPaper %} {% paper %}C{% endPaper %}
{% endSimplegrid %}
```
Source: Python
```python
component('aardvark', 'simplegrid', cols=3, spacing='md', attr={'onclick': '''
const value = this.innerText;
console.log('attr demo value:', value);
alert(value);
'''}, children=(
component('aardvark', 'paper', children='A')
+ ' '
+ component('aardvark', 'paper', children='B')
+ ' '
+ component('aardvark', 'paper', children='C')
))
```