# Marquee
`marquee` is a **scrolling ticker** — content that slides continuously across the row, the way logo strips and announcement bars do. The content is repeated so the loop is seamless, it pauses while the pointer is over it (`pauseOnHover`), and it respects `prefers-reduced-motion` (the content holds still for readers who've asked to reduce motion).
Use it as `{% marquee %}` in Markdown, or call it from Python logic (loops, snippets) via `component('aardvark', 'marquee', …)`.
## Demonstrations
The block body is the scrolling content; `duration` sets how long one loop takes in milliseconds (lower is faster):
Ship docs faster • Markdown in, static site out • no build step to babysit •
Source: Markdown
```aardvark
{% marquee duration=15000 %}
Ship docs faster — Markdown in, static site out — no build step to babysit —
{% endMarquee %}
```
Source: Python
```python
component(
'aardvark', 'marquee',
duration=15000,
children='Ship docs faster — Markdown in, static site out — no build step to babysit — ',
)
```
`direction='right'` reverses the scroll and a lower `duration` moves it faster. The items can themselves be other built-in tags:
React Mantine Markdown Static
Source: Markdown
```aardvark
{% marquee direction='right' duration=8000 %}
{% badge color='blue' %}React{% endBadge %} {% badge color='grape' %}Mantine{% endBadge %} {% badge color='green' %}Markdown{% endBadge %} {% badge color='orange' %}Static{% endBadge %}
{% endMarquee %}
```
Source: Python
```python
badges = ' '.join(
component('aardvark', 'badge', color=c, children=label)
for c, label in (('blue', 'React'), ('grape', 'Mantine'),
('green', 'Markdown'), ('orange', 'Static'))
)
component('aardvark', 'marquee', direction='right', duration=8000,
children=badges + ' ')
```
`gap` widens the space between the looping copies, and `pauseOnHover=false` keeps it scrolling even under the pointer:
Never stops • wider gap between repeats •
Source: Markdown
```aardvark
{% marquee gap='4rem' pauseOnHover=false %}
Never stops — wider gap between repeats —
{% endMarquee %}
```
Source: Python
```python
component(
'aardvark', 'marquee',
gap='4rem', pauseOnHover=False,
children='Never stops — wider gap between repeats — ',
)
```
By default the strip pauses while the pointer is over it (`pauseOnHover` is on) — hover any marquee above to see it hold.
## With other components
A marquee makes a tidy announcement bar inside a `paper` surface:
live Maintenance window tonight 22:00 UTC • status page updated •
Source: Markdown
```aardvark
{% paper withBorder=true radius='md' p='sm' %}
{% marquee %}
{% badge color='red' %}live{% endBadge %} Maintenance window tonight 22:00 UTC • status page updated •
{% endMarquee %}
{% endPaper %}
```
Source: Python
```python
ticker = component(
'aardvark', 'marquee',
children=(
component('aardvark', 'badge', color='red', children='live')
+ ' Maintenance window tonight 22:00 UTC • status page updated • '
),
)
component('aardvark', 'paper', withBorder=True, radius='md', p='sm', children=ticker)
```
## Attributes
Omit any attribute to take its default.
| Attribute | Valid values | Description |
| --- | --- | --- |
| `direction` | `left` (default) / `right` / `up` / `down` | Scroll direction (`up`/`down` scroll vertically). |
| `duration` | An integer, milliseconds for one loop (default `40000`) | Loop length — lower is faster. |
| `gap` | Any CSS length (default `2rem`) | Space between the looping copies. |
| `pauseOnHover` | bare flag or `true` / `false` (default `true`) | Pause the scroll while the pointer is over it. Set `false` to keep scrolling. |
| `fadeEdges` | `true` / `false` (default `false`) | Fade the content to transparent at the start/end edges. |
`attr={...}` forwards raw HTML attributes onto the rendered element.
## CSS Selectors
Each `marquee` carries `data-aardvark-island="Marquee"` on its wrapper, and Mantine exposes its parts as `mantine-Marquee-*` classes — target either to style it from your theme CSS.
```css
[data-aardvark-island="Marquee"] {
/* style every marquee on the page */
}
.mantine-Marquee-root {
/* the root part */
}
.mantine-Marquee-group {
/* the group part */
}
.mantine-Marquee-content {
/* the content part */
}
```
## Injecting Attributes
`attr={…}` forwards raw HTML attributes (including event handlers) straight onto the rendered element.
This text scrolls across the screen.
Source: Markdown
```aardvark
{% marquee duration=15000 attr={'onclick': '''
const value = this.innerText;
console.log('attr demo value:', value);
alert(value);
'''} %}
This text scrolls across the screen.
{% endMarquee %}
```
Source: Python
```python
component('aardvark', 'marquee', duration=15000,
children='This text scrolls across the screen.', attr={'onclick': '''
const value = this.innerText;
console.log('attr demo value:', value);
alert(value);
'''})
```