# VisuallyHidden
`visuallyhidden` is the standard **screen-reader-only** accessibility primitive: it hides its
content *visually* — it's gone from the layout — while keeping it in the accessibility tree, so
screen readers still announce it. By design it renders **no visible output**: the content is
positioned off-screen but stays available to assistive technology. Use it for labels, captions,
and context that assistive tech needs but that would be redundant or cluttering on screen — for
example extra wording for an icon-only button, or a heading that gives screen-reader users the
structure a sighted user gets from layout. It takes no styling options. Close the block with
`{% endVisuallyhidden %}` (one capital V).
Use it as `{% visuallyhidden %}…{% endVisuallyhidden %}` in Markdown, or
call it from Python logic (loops, snippets) via `component('aardvark', 'visuallyhidden', …)`.
## Demonstrations
The block body is the screen-reader-only content. It produces nothing visible on the page — open
it in a screen reader, or inspect the DOM, to find the hidden run of text.
**Preview** (there is no visual difference; the hidden text is announced by assistive tech only):
Visible text: "Here is some text"
and this part is only for screen readers
.
Source: Markdown
```aardvark
Visible text: "Here is some text"
{% visuallyhidden %}and this part is only for screen readers{% endVisuallyhidden %}.
```
Source: Python
```python
'Visible text: "Here is some text" ' + component(
'aardvark', 'visuallyhidden',
children='and this part is only for screen readers')
```
## With other components
The classic use is an **icon-only button**: the button shows only the icon, while a
`visuallyhidden` run gives screen-reader users the accessible name. The button below shows just
the trash [icon](/components/data-display/icon/), but a screen reader announces "Delete this item".
**Preview:**
Source: Markdown
```aardvark
```
Source: Python
```python
label = component('aardvark', 'visuallyhidden', children='Delete this item')
icon = component('aardvark', 'icon', 'fa-solid fa-trash')
''
```
## Attributes
`visuallyhidden` takes no styling options — it's a single-purpose accessibility wrapper.
| Attribute | Valid values | Description |
| --- | --- | --- |
| `attr={…}` | An object of HTML attributes | Forwards raw HTML attributes onto the rendered span if you need a hook. |
## CSS Selectors
Target the rendered element through its island marker, `[data-aardvark-island="VisuallyHidden"]`, or through the Mantine Styles API classes:
```css
/* Every rendered VisuallyHidden carries this island marker */
[data-aardvark-island="VisuallyHidden"] { }
/* Mantine Styles API classes */
.mantine-VisuallyHidden-root { }
```
## Injecting Attributes
`attr={…}` forwards raw HTML attributes straight onto the rendered element. A `visuallyhidden` element is off-screen, so a click handler isn't practically reachable — instead, `attr` is useful for `data-*` hooks, ARIA, or an `id` that scripts and tests can target on the (otherwise invisible) node:
Visible text
and this part is only for screen readers
. (Inspect the hidden span in DevTools to see the forwarded `data-testid`.)
Source: Markdown
```aardvark
Visible text {% visuallyhidden attr={'data-testid': 'sr-only-note'} %}and this part is only for screen readers{% endVisuallyhidden %}.
```
Source: Python
```python
'Visible text ' + component(
'aardvark', 'visuallyhidden',
children='and this part is only for screen readers',
attr={'data-testid': 'sr-only-note'}) + '.'
```