У меня следующая структура
<h2>
<svg viewBox='-5 -40 100 50'>
<!-- some filters that get applied on the elements below -->
<clipPath id='c'>
<text id='t'>Scooby</text>
</clipPath>
<g clip-path='url(#c)'>
<rect x='-5' y='-40' width='100%' height='100%'/>
<path/>
</g>
<use xlink:href='#t'/>
<use xlink:href='#t'/>
</svg>
</h2>Как я могу гарантировать, что text внутри clipPath («Скуби») будет виден программами чтения с экрана и только один раз?
Я знаю, что SVG text должен читаться программами чтения с экрана, но это все еще так, когда он находится внутри элемента clipPath? А как насчет его копий use?
Я использую эту структуру, чтобы получить некоторые причудливые эффекты (например, такие вещи) в тексте заголовка (и отказаться от изображения .jpg, которое в настоящее время используется).



Добавьте aria-hidden к чтению экрана подавлять для определенных элементов, он прочитает "Scooby" только один раз:
<h2>
<svg viewBox='-5 -40 100 50'>
<!-- some filters that get applied on the elements below -->
<clipPath id='c'>
<text id='t'>Scooby</text>
</clipPath>
<g clip-path='url(#c)'>
<rect x='-5' y='-40' width='100%' height='100%'/>
<path/>
</g>
<use aria-hidden = "true" xlink:href='#t'/>
<use aria-hidden = "true" xlink:href='#t'/>
</svg>
</h2>
Атрибут aria-label предназначен для использования, когда текст не отображается на экране.
<h2 aria-label = "Scooby">
<svg> ... </svg>
<h2>
или, наоборот, я считаю, что большинство программ чтения с экрана будут использовать элемент SVG <title>.
<h2>
<svg>
<title>Scooby logo</title>
...
</svg>
<h2>
У вас также есть возможность использовать другие атрибуты ARIA, например aria-labelledby.
Удалите SVG из программы чтения с экрана с помощью aria-hidden и определите метку для вашего h2 с помощью aria-labelledby.
<h2 aria-labelledby = "t">
<svg viewBox='-5 -40 100 50' aria-hidden = "true">
<!-- some filters that get applied on the elements below -->
<clipPath id='c'>
<text id='t'>Scooby</text>
</clipPath>
<g clip-path='url(#c)'>
<rect x='-5' y='-40' width='100%' height='100%'/>
<path/>
</g>
<use xlink:href='#t'/>
<use xlink:href='#t'/>
</svg>
</h2>
@RobertMonfera, у меня это работает в Chrome, используя NVDA
Это лучший / самый простой подход для программ чтения с экрана. Обратной стороной является то, что это не влияет на копирование и вставку: некоторые браузеры копируют и вставляют две копии вашего текста (для текстовых элементов shadow-DOM в двух элементах <use>), некоторые ничего не получат (потому что они не обрабатывают теневые копии как настоящий текст). Текст внутри clipPath никогда не доступен или недоступен для выбора.
<title> (или <desc>) - твердый общий совет, хотя вашему фрагменту кода все равно потребуется
aria-hidden, как в моем ответе