Один из наших веб-разработчиков использует следующий HTML-код в качестве заполнителя для стилизации выпадающего списка.
<a href="" class="arrow"></a>
Является ли этот тег привязкой действительным?
Поскольку значение href отсутствует, оно отображается как неработающее в некоторых наших отчетах о проверке ссылок.
Ответы:
Хотя на этот вопрос уже дан ответ ( tl; dr: yes, пустое
href
значение допустимо), ни один из существующих ответов не ссылается на соответствующие спецификации.Пустая строка не может быть URI. Однако
href
атрибут принимает в качестве значения не только URI, но и ссылки на URI. Пустая строка может быть ссылкой на URI.HTML 4.01
HTML 4.01 использует RFC 2396 , где говорится в разделе 4.2. Ссылки на тот же документ (жирный шрифт):
RFC 2396 устарел в RFC 3986 (который в настоящее время является стандартом URI IETF ), что по сути говорит то же самое .
HTML5
HTML5 использует ( действительный URL-адрес, возможно, окруженный пробелами → действительный URL-адрес ) спецификации URL- адреса W3C , которая была прекращена. Вместо этого следует использовать стандарт URL-адреса WHATWG (см. Последний раздел).
HTML 5.1
HTML 5.1 использует ( действительный URL-адрес, возможно, окруженный пробелами → действительный URL-адрес ) стандарта URL WHATWG (см. Следующий раздел).
WHATWG HTML
HTML-код WHATWG использует ( действительный URL-адрес, возможно, окруженный пробелами ) определение допустимой строки URL-адреса из стандарта URL-адреса WHATWG , в котором говорится, что это может быть строка относительного URL-адреса с фрагментом , которая должна по крайней мере быть строкой относительного URL-адреса , которая может быть строкой путь-относительная схема-меньше-URL , которая является строкой путь-относительный-URL , которая не начинается со строки схемы, за которой следует
:
, и ее определение гласит (выделено жирным шрифтом мое):источник
Это действительно.
Тем не менее, стандартной практикой является использование
href="#"
или иногдаhref="javascript:;"
.источник
href="#"
, фокус перемещается к началу страницы в IE, так что я thkinkhref="javascript:;"
лучшеКак уже говорили другие, это действительно.
Однако у каждого подхода есть свои недостатки:
href="#"
добавляет дополнительную запись в историю браузера (что раздражает, например, при нажатии на кнопку).href=""
перезагружает страницуhref="javascript:;"
Кажется, нет никаких проблем (кроме как выглядеть беспорядочно и бессмысленно) - кто-нибудь знает что-нибудь?источник
Хотя HTML может быть полностью допустимым, если он не содержит href, особенно с обработчиком onclick, есть некоторые моменты, на которые следует обратить внимание: он не будет ориентирован на клавиатуру без установленного значения tabindex. Кроме того, это будет недоступно программному обеспечению для чтения с экрана, использующему Internet Explorer, поскольку IE будет сообщать через интерфейсы доступности, что любой элемент привязки без атрибута href не может быть сфокусирован, независимо от того, был ли установлен tabindex.
Так что пока следующее может быть полностью действительным:
Гораздо лучше явно добавить атрибут href с нулевым эффектом
Для полной поддержки всех пользователей, если вы используете класс с CSS для визуализации изображения, вы должны также включить некоторый текстовый контент, например атрибут title, чтобы предоставить текстовое описание того, что происходит.
источник
href
будет мешать интерфейсам доступности.href
значения на что-либо кроме относительного / абсолютного пути вызовет проблемы чтения с экрана. Избегайте использования символа хеш / фунт в качестве обходного пути для этой проблемы, поскольку он не предназначен для этого. Программы чтения с экрана могут (в настоящее время VoiceOver делает) объявить, что ваша ссылка является идентификатором фрагмента (ссылка на где-то на текущей странице), а также действительна с точки зрения стандартов. см. w3.org/2001/tag/2011/01/HashInURI-20110115#NakedHashТекущий проект HTML5 также позволяет полностью пропустить атрибут href.
Чтобы ответить на ваш вопрос: да, это действительно.
источник
<a>
элемент безhref
стилизован в некоторых браузерах. Например, стили ": hover" не работают в Chrome (и других странных вещах)<a>
Тег безhref
представляет что - то другое , а не ссылка (традиционно якорь). Кроме того, существует разница между необязательным атрибутом и атрибутом, который может быть пустым.В самом деле, вы можете оставить его пустым (валидатор W3 не жалуется).
Идем к идее на шаг впереди: опускаем = "". Преимущество этого состоит в том, что ссылка не рассматривается как привязка к текущей странице.
источник
<a href></a>
→ Атрибут href без видимого значения. Атрибут может быть удален IE7.Хотя валидатор W3 может не жаловаться на пустой
href
атрибут, текущий рабочий документ HTML5 определяет:Действительный URL является URL , который соответствует URL стандарта . Теперь стандарт URL немного сбивает с толку, но он нигде не утверждает, что URL может быть пустой строкой.
... что означает, что пустая строка не является допустимым URL.
Однако в рабочем проекте HTML5 говорится:
Это означает, что мы можем просто полностью пропустить
href
атрибут:Если вы хотите, чтобы эти элементы
href
безa
элементов все еще требовали взаимодействия с клавиатурой, вам придется пойти по обычному пути назначенияrole
иtabindex
наряду с обычными обработчиками нажатия / нажатия клавиш:источник
href
делает его не гиперссылкой, что делаетonclick
функциональность недоступной для пользователей клавиатуры.Слово предостережения:
По моему опыту, пропуск
href
атрибута создает проблемы для доступности, так как навигация с помощью клавиатуры будет игнорировать его и никогда не выделять его, как при наличии href. Ручное включение вашего элемента в tabindex - способ обойти это.источник
это действительно так, но, как сказал UpTheCreek, «у каждого подхода есть свои недостатки»
если вы вызываете ajax с помощью тега, оставьте href = "", так как это сохранит перезагрузку страницы, и код ajax никогда не будет вызываться ...
только что получил эту мысль было бы хорошо поделиться
источник
Попробуйте сделать
<a href="#" class="arrow">
вместо этого. (Обратите внимание на острый#
характер).источник