Анатомия React компонента
Моё видение того, как должен выглядеть React компонент
421
7 мин.
Стандарт SSL определяет требования к семантике, доступности и логике работы ссылок.
<a href="/destination">. Для действия, которое не выполняет навигацию, используется <button>.<div> или <span> с обработчиком клика: теряются нативная семантика ссылки, стандартная клавиатурная навигация и браузерные действия, например открытие адреса в новой вкладке или копирование ссылки.Подробнее или Нажмите здесь подходят только тогда, когда окружающий контекст однозначно указывает, куда ведёт ссылка.title можно использовать как дополнительное пояснение, но не как замену понятному тексту ссылки: его доступность и отображение зависят от устройства и способа взаимодействия.aria-label; для изображения также используется alt. aria-label нужен, когда видимой подписи нет, и не должен без необходимости заменять существующий текст ссылки. Декоративную иконку следует скрывать от скринридеров.Для внутренних переходов подходят относительные адреса, например /about. Для внешних ресурсов указывается полный URL; при наличии HTTPS предпочтителен протокол https://.
Адрес должен соответствовать канонической форме, принятой для целевого сайта. Завершающий / не следует произвольно добавлять или удалять: формат зависит от маршрутизации и конфигурации сервера или фреймворка. Для внутреннего адреса важно использовать согласованную форму, чтобы не создавать лишние перенаправления.
<!-- Внутренняя ссылка -->
<a href="/about">О компании</a>
<!-- Внешняя ссылка -->
<a href="https://example.com/pricing">Тарифы</a>href="#contacts". Значение должно совпадать с уникальным id целевого элемента.href, href="#" в роли заглушки и протокол javascript: не используются. Для действий без навигации предназначена кнопка.Текст ссылки или ближайший контекст должен указывать тип файла; размер файла указывается, если он влияет на решение о загрузке.
Для файла, который должен загружаться, можно использовать атрибут download. Он работает для ресурсов того же origin и схем blob: и data:; заголовки ответа и настройки браузера могут повлиять на результат. Для внешнего ресурса загрузку нельзя гарантировать одним атрибутом.
<a href="/files/guide.pdf" download>Руководство (PDF, 2 МБ)</a>:focus-visible; удалять системный контур outline без равноценной замены не следует.id основного блока; если ссылка скрыта в обычном состоянии, при получении фокуса она должна становиться хорошо заметной.:visited позволяет визуально отличать ссылки, адреса которых уже открывались в текущем браузере. Он применим и к внутренним, и к внешним ссылкам; браузерные ограничения связаны с защитой истории посещений, а не с типом адреса.:visited из соображений конфиденциальности. Такое состояние необязательно и не должно быть единственным способом сообщить значимую информацию. Цвет не должен быть единственным визуальным признаком, отличающим ссылку от окружающего текста.Внешние ссылки обычно открываются в текущей вкладке. target="_blank" используется только при обоснованной необходимости и с предварительным обозначением открытия новой вкладки или окна.
Для target="_blank" рекомендуется явно задавать rel="noopener". В современных браузерах _blank уже не предоставляет новой странице доступ к window.opener, однако явный атрибут фиксирует требование и поддерживает старые реализации.
rel="noreferrer" дополнительно запрещает передачу заголовка Referer и подразумевает noopener. Его следует добавлять, когда сокрытие источника перехода является отдельным требованием конфиденциальности, а не автоматически для каждой внешней ссылки.
Иконка внешнего ресурса необязательна. Если она добавлена рядом с текстом ссылки, декоративную иконку следует исключить из доступного имени. При открытии новой вкладки это поведение обозначается текстом, доступным также скринридерам.
<a href="https://partner.example" target="_blank" rel="noopener">
Сайт партнёра
<span aria-hidden="true">↗</span>
<span class="sr-only">(откроется в новой вкладке)</span>
</a>sr-only — пример служебного класса для визуально скрытого текста; в проекте используется соответствующий класс дизайн-системы.
rel для поисковой квалификацииsponsored используется для платных и спонсируемых ссылок, ugc — для ссылок в пользовательском контенте. nofollow указывается, когда требуется обозначить отсутствие одобрения ссылки или квалифицировать её для поисковых систем.rel не заменяют noopener и не являются механизмами защиты от window.opener. Для обычных внешних ссылок не требуется автоматически добавлять nofollow.mailto:mailto:.subject и body.%0D%0A. При генерации URI в JavaScript кодируется значение каждого параметра, а не вся ссылка целиком.&, разделяющий параметры, записывается как &. Ссылка вызывает почтовую программу, настроенную в системе; наличие и поведение такой программы сайтом не гарантируется.tel:Для перехода к вызову используется схема tel:. В href рекомендуется указывать нормализованный номер в международном формате: знак + и цифры без пробелов, скобок и дефисов.
RFC 3966 допускает визуальные разделители в номере. В стандарте SSL для единообразия используется нормализованная запись без разделителей.
В примерах телефонный номер заменён маской xxx-xxx-xxx. href с tel:[normalized-number] показан как шаблон: перед использованием вместо placeholder указывается реальный нормализованный номер. Видимая маска не является номером для вызова.
<!-- Шаблон: заменить [normalized-number] реальным номером -->
<a href="tel:[normalized-number]">xxx-xxx-xxx</a>:visited не зависит от скриптов и не раскрывает историю браузера; цвет не является единственным признаком ссылки.noopener применяется при использовании target="_blank".mailto: и tel: содержат корректно сформированные адреса и номера.Внутренняя ссылка:
<a href="/about">О компании</a>Ссылка на раздел страницы:
<a href="#contacts">Контакты</a>
<section id="contacts">...</section>Ссылка для пропуска повторяющейся навигации:
<a class="skip-link" href="#main-content">К основному содержимому</a>
<main id="main-content">...</main>Ссылка на файл для загрузки:
<a href="/files/guide.pdf" download>Руководство (PDF, 2 МБ)</a>Внешняя ссылка в той же вкладке:
<a href="https://example.com">Сайт организации</a>Внешняя ссылка в новой вкладке с доступным предупреждением:
<a href="https://partner.example" target="_blank" rel="noopener">
Сайт партнёра
<span aria-hidden="true">↗</span>
<span class="sr-only">(откроется в новой вкладке)</span>
</a>Письмо двум адресатам с темой и телом:
<a href="mailto:manager@example.com,ceo@example.com?subject=%D0%92%D0%BE%D0%BF%D1%80%D0%BE%D1%81%20%D0%BF%D0%BE%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D1%83%20XYZ&body=%D0%97%D0%B4%D1%80%D0%B0%D0%B2%D1%81%D1%82%D0%B2%D1%83%D0%B9%D1%82%D0%B5!%0D%0A%0D%0A%D0%A3%20%D0%BC%D0%B5%D0%BD%D1%8F%20%D0%B2%D0%BE%D0%B7%D0%BD%D0%B8%D0%BA%20%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81.">
Написать руководству
</a>Ссылка для звонка (шаблон):
<!-- Шаблон: заменить [normalized-number] реальным номером -->
<a href="tel:[normalized-number]">xxx-xxx-xxx</a>Похожие категории:
Моё видение того, как должен выглядеть React компонент
421
7 мин.
Стандарт SST-A определяет требования к семантике, доступности и логике работы табов
62
6 мин.
Стандарт SSF-U определяет требования к семантике, доступности и логике работы фуллскрина
248
2 мин.
Стандарт SSA определяет требования к семантике, доступности и логике работы аккордеона
258
2 мин.
Разбор критических ошибок веб-дизайна. Почему слайдеры, автоплей и тяжёлые страницы снижают конверсию и позиции в Google и Yandex
232
1 мин.
Стандарт SSP определяет требования к семантике, доступности и логике работы пагинации
240
1 мин.