# Center
`{% center %}` is a **built-in** tag that centers its content **both
horizontally and vertically**. Give the container a height — with the `h` prop or from what's
around it — and the body lands in the middle. It ships with aardvark, so there's no setup.
Use it as `{% center %}` in Markdown, or call it from Python logic
(loops, snippets) via `component('aardvark', 'center', …)`.
## Block centering
By default Center is a block-level flex container. Set a height so there's room to center
within, and the body sits dead center.
Centered
Source: Markdown
```aardvark
{% center h=120 bg='var(--mantine-color-gray-1)' %}
{% badge size='lg' %}Centered{% endBadge %}
{% endCenter %}
```
Source: Python
```python
inner = component('aardvark', 'badge', size='lg', children='Centered')
component('aardvark', 'center', h=120,
bg='var(--mantine-color-gray-1)', children=inner)
```
## Inline centering
`inline` switches the container to `inline-flex` — use it to vertically center an icon or
badge alongside a run of text rather than as a block.
★ rated
Source: Markdown
```aardvark
{% center inline %}★ rated{% endCenter %}
```
Source: Python
```python
component('aardvark', 'center', inline=True, children='★ rated')
```
## With other components
The body is ordinary Markdown, so you can center a richer cluster — here a horizontal
[`{% group %}`](/components/layout/group/) of buttons inside a tall,
tinted box.
Accept
Decline
Source: Markdown
```aardvark
{% center h=160 bg='var(--mantine-color-gray-1)' %}
{% group %}
{% button text='Accept' %}
{% button text='Decline' variant='outline' %}
{% endGroup %}
{% endCenter %}
```
Source: Python
```python
inner = component('aardvark', 'group',
children=component('aardvark', 'button', text='Accept')
+ component('aardvark', 'button', text='Decline', variant='outline'))
component('aardvark', 'center', h=160,
bg='var(--mantine-color-gray-1)', children=inner)
```
## Attributes
`inline` is the one option of its own; everything else is the shared Mantine spacing/sizing
system. `h` is the one you'll reach for most, since centering vertically needs a height.
| Attribute | Values | Description |
| --- | --- | --- |
| `inline` | `true`, `false` (default `false`) | Render as `inline-flex` (center inline content) instead of a block `flex`. |
| `w` / `h` | `xs`–`xl` or any CSS size | Width / height of the container. `h` gives room to center vertically. |
| `miw` / `mih` | any CSS size | Minimum width / height. |
| `maw` / `mah` | any CSS size | Maximum width / height. |
| `m`, `mt`, `mb`, `ml`, `mr`, `mx`, `my` | `xs`–`xl` or any CSS size | Margin — all sides, or a single side / axis. |
| `p`, `pt`, `pb`, `pl`, `pr`, `px`, `py` | `xs`–`xl` or any CSS size | Padding — all sides, or a single side / axis. |
| `bg` | a theme color or any CSS color | Background color. |
| `c` | a theme color or any CSS color | Text (content) color. |
## CSS Selectors
Each `center` carries `data-aardvark-island="Center"` on its wrapper, and Mantine exposes its parts as `mantine-Center-*` classes — target either to style it from your theme CSS.
```css
[data-aardvark-island="Center"] {
/* style every center on the page */
}
.mantine-Center-root {
/* the root part */
}
```
## Injecting Attributes
`attr={…}` forwards raw HTML attributes (including event handlers) straight onto the rendered element.
Centered both ways.
Source: Markdown
```aardvark
{% center h=120 bg='var(--mantine-color-gray-1)' attr={'onclick': '''
const value = this.innerText;
console.log('attr demo value:', value);
alert(value);
'''} %}
Centered both ways.
{% endCenter %}
```
Source: Python
```python
component('aardvark', 'center', h=120,
bg='var(--mantine-color-gray-1)', children='Centered both ways.',
attr={'onclick': '''
const value = this.innerText;
console.log('attr demo value:', value);
alert(value);
'''})
```