-
Notifications
You must be signed in to change notification settings - Fork 198
[BREAKING CHANGE][Epic][a11y]: Доступность заголовков #4696
Description
Исследование невизуальной доступности выявило много проблем с заголовками, в частности:
ActionSheet: значения не должны быть заголовкамиGroup: заголовок не является заголовкомHeader: нет заголовка и подзаголовкаModalCardBase: второй заголовок не нуженPlaceholder: header и children оборачиваются в заголовкиh2иh4, которые, возможно, не нужныSearch: под полем присутствует заголовокh4"Поиск", надобность которого не яснаSnackbar:subtitleоборачивается вh5заголовок, хотя не является им с точки зрения семантики
В чем глобальная проблема?
Некоторые типографические компоненты используют в своей основе теги заголовков, несмотря на то, что в реальности эти компоненты чисто визуальные:
Headline: дефолтныйComponent = 'h4',Subhead: дефолтныйComponent = 'h5',Title:Componentпривязан кlevel, хотя не должен быть.
При этом в абсолютном большинстве случаев этот Component изнутри компонента переопределить невозможно. Как выглядит, например, вышеупомянутый Placeholder:
VKUI/packages/vkui/src/components/Placeholder/Placeholder.tsx
Lines 53 to 62 in c40333b
| {hasReactNode(header) && ( | |
| <Title level="2" weight="2" className={styles['Placeholder__header']}> | |
| {header} | |
| </Title> | |
| )} | |
| {hasReactNode(children) && ( | |
| <Headline weight="3" className={styles['Placeholder__text']}> | |
| {children} | |
| </Headline> | |
| )} |
Как можно решить?
Сейчас решить эту проблему можно только прокидыванием дополнительных пропсов практически к каждому компоненту (например, headerComponent — к header), в котором используется типографика.
-<Placeholder header="Уведомления от сообществ">
+<Placeholder
+ header="Уведомления от сообществ"
+ headerComponent="h2"
+>
Подключите сообщества, от которых Вы хотите получать уведомления
</Placeholder>Как промежуточное решение оно имеет право на существование, но по итогу — очень сильно замусорит пропсы и ухудшит DX.
Поэтому идеальный вариант — это переход на подкомпонентный подход к v6. Тогда, например, в тот же Placeholder вместо пропа header можно будет передавать <Placeholder.Header /> и задавать ему абсолютно все нужные пропсы:
-<Placeholder header="Уведомления от сообществ">
+<Placeholder>
+ <Placeholder.Header Component="h2">Уведомления от сообществ</Placeholder.Header>
Подключите сообщества, от которых Вы хотите получать уведомления
</Placeholder>Подкомпоненты мы можем делать уже сейчас, сохраняя обратную совместимость.
Также нужно подфиксить все проблемы конкретных типографических компонентов.
Что делаем?
- [Bug][Headline]: Поменять дефолтный
Componentнаspan#4698 - [Bug][Subhead]: Поменять дефолтный
Componentнаspan#4697 - [Bug][Title]: Отвязать
Componentотlevel#4700 - [Epic]: Подкомпонентный подход #4699
И переводим сами компоненты на подкомпонентный подход, конечно. (%
Metadata
Metadata
Assignees
Labels
Type
Projects
Status