import { Star } from 'lucide-react'
import { Button, VisuallyHidden } from '@hina-ui/react'
export default function Demo() {
return (
<Button variant="ghost" tone="neutral" iconOnly>
<Star />
<VisuallyHidden>收藏这部作品</VisuallyHidden>
</Button>
)
}
tsx
用法
import { VisuallyHidden } from '@hina-ui/react'
ts
VisuallyHidden 把内容从画面上移开,但保留在无障碍树中:屏幕阅读器照常读出,视觉上不占位置。
它用于视觉上已经表达清楚、但辅助技术拿不到的信息。最常见的是只有图标的控件——图形对屏幕阅读器没有意义,需要另给一段文字。
当前评分 8.9
括号内的补充只有屏幕阅读器会读到。
import { Stack, Text, VisuallyHidden } from '@hina-ui/react'
export default function Demo() {
return (
<Stack gap="sm">
<Text>
当前评分 8.9
<VisuallyHidden>,满分 10 分</VisuallyHidden>
</Text>
<Text size="sm" tone="faint">
括号内的补充只有屏幕阅读器会读到。
</Text>
</Stack>
)
}
tsx
它不是用来藏东西的。真正不需要被感知的内容用 aria-hidden 或者干脆不渲染;把无用信息塞进这里,只会让屏幕阅读器的用户听到更多噪音。
行为
- 内容被压缩到一像素并裁去可见部分,不占据布局空间,也不影响周围文字的排版。
- 它不改变焦点行为:内部若有可聚焦元素,仍会进入 tab 序列。
无障碍
- 内容留在无障碍树中,屏幕阅读器按正常顺序读出。
- 与
aria-label的取舍:aria-label会替换掉元素原有的可读名称,适合整块替换;VisuallyHidden是往可读内容里补一段,适合与可见文字连读。 - 补充的文字要能与前后内容连成通顺的一句,例如「当前评分 8.9,满分 10 分」,而不是孤立的词。
API
内容属性
| 属性 | 说明 |
|---|---|
children | 只对屏幕阅读器可见的内容 |