Допустим ли пустой href? - PullRequest
       10

Допустим ли пустой href?

164 голосов
/ 12 апреля 2011

Один из наших веб-разработчиков использует следующий HTML-код в качестве заполнителя для стилизации выпадающего списка.

<a href="" class="arrow"></a>

Является ли этот тег привязки действительным?

Поскольку значение href отсутствует, оно отображается как неработающее в некоторых наших отчетах о проверке ссылок.

Ответы [ 10 ]

174 голосов
/ 12 апреля 2011

Это действительно.

Однако стандартная практика заключается в использовании href="#" или иногда href="javascript:;".

110 голосов
/ 06 октября 2011

Как уже говорили другие, это действительно.

Однако у каждого подхода есть свои недостатки:

href="#" добавляет дополнительную запись в историю браузера (что раздражает, например, при нажатии на кнопку).

href="" перезагружает страницу

href="javascript:;", похоже, не имеет никаких проблем (кроме как выглядеть беспорядочно и бессмысленно) - кто-нибудь знает что-нибудь?

56 голосов
/ 08 апреля 2013

Несмотря на то, что HTML может быть полностью допустимым, если он не содержит href, особенно с обработчиком onclick, есть некоторые моменты, на которые следует обратить внимание: он не будет ориентирован на клавиатуру без установленного значения tabindex.Кроме того, это будет недоступно программному обеспечению для чтения с экрана, использующему Internet Explorer, так как IE сообщит через интерфейсы доступности, что любой элемент привязки без атрибута href не может быть сфокусирован, независимо от того, был ли установлен tabindex.

Таким образом, хотя следующее может быть полностью допустимым:

<a class="arrow">Link content</a>

Гораздо лучше явно добавить атрибут href с нулевым эффектом

<a href="javascript:void(0);" class="arrow">Link content</a>

Для полной поддержки всехпользователи, если вы используете класс с CSS для визуализации изображения, вы также должны включить некоторое текстовое содержимое, например атрибут title, чтобы предоставить текстовое описание происходящего.

<a href="javascript:void(0);" class="arrow" title="Go to linked content">Link content</a>
40 голосов
/ 11 апреля 2017

Хотя на этот вопрос уже дан ответ ( tl; dr: да, допустимо пустое значение href), ни один из существующих ответов не ссылается на соответствующие спецификации.

Пустая строка не может быть URI. Однако атрибут href принимает в качестве значения не только URI, но и ссылки на URI. Пустая строка может быть ссылкой на URI.

HTML 4,01

HTML 4.01 использует RFC 2396 , где говорится в разделе 4.2. Ссылки на тот же документ (жирный шрифт):

Ссылка на URI, которая не содержит URI, является ссылкой на текущий документ. Другими словами, пустая ссылка URI в документе интерпретируется как ссылка на начало этого документа , а ссылка, содержащая только идентификатор фрагмента, является ссылкой на идентифицированный фрагмент этого документа.

RFC 2396 устарел RFC 3986 (который в настоящее время стандарт URI IETF ), что по сути говорит то же самое .

1037 * HTML5 * HTML5 использует ( действительный URL, возможно, окруженный пробелами действительный URL ) W3C Спецификация URL , которая была прекращена. URL-адрес WHATWG Standard должен использоваться вместо этого (см. Последний раздел). HTML 5.1

HTML 5.1 использует ( действительный URL, возможно, окруженный пробелами действительный URL ) URL стандарта WHATWG (см. Следующий раздел).

WHATWG HTML

WHATWG в HTML использует ( действительный URL, возможно, окруженный пробелами ), определение действительная строка URL из стандарта URL-адреса WHATWG , где говорится, что это может быть строка относительного URL-адреса с фрагментом , которая должна быть, по крайней мере, строка относительного URL-адреса , которая может быть строкой путь-относительная схема-меньше-URL , то есть путь -relative-URL string , которая не начинается со строки схемы, за которой следует :, и ее определение гласит (выделено жирным шрифтом):

Строка относительного пути-URL должна быть ноль или более строк сегмента пути-URL, отделенных друг от друга U + 002F (/) и не начинающихся с U + 002F (/) ,

26 голосов
/ 12 апреля 2011

Текущий HTML5 черновик также позволяет полностью пропустить атрибут href.

Если элемент не имеет атрибута href, то этот элемент представляет заполнитель для ссылкииначе были бы размещены, если это было уместно.

Чтобы ответить на ваш вопрос: Да, это действительно.

16 голосов
/ 10 января 2012

Действительно, вы можете оставить его пустым (валидатор W3 не жалуется).

Идем к идее на шаг дальше: пропустим = "". Преимущество этого состоит в том, что ссылка не рассматривается как привязка к текущей странице.

<a href>sth</a>
9 голосов
/ 31 мая 2014

Хотя валидатор W3 может не жаловаться на пустой атрибут href, текущий рабочий проект HTML5 указывает:

Атрибут href для a и area элементов должен иметь значение, которое является действительным URL-адресом , потенциально окруженным пробелами.

A действительный URL - это URL, соответствующий Стандарту URL . Теперь стандарт URL немного сбивает с толку, но он нигде не утверждает, что URL может быть пустой строкой.

... это означает, что пустая строка не действительный URL.

Однако в рабочем проекте HTML5 говорится:

Примечание: Атрибут href для элементов a и area не требуется ; когда эти элементы не имеют атрибутов href, они не создают гиперссылки.

Это означает, что мы можем просто опустить атрибут href:

<a class="arrow"></a>
8 голосов
/ 24 июля 2015

Слово предостережения:

По моему опыту, пропуск атрибута href создает проблемы с доступностью, поскольку навигация с помощью клавиатуры игнорирует его и никогда не фокусирует его так, как при наличии href. Ручное включение вашего элемента в tabindex - способ обойти это.

3 голосов
/ 08 октября 2011

это действительно, но как сказал UpTheCreek «У каждого подхода есть свои недостатки»

если вы вызываете ajax через тег оставьте href = "", как это будет держать перезагрузку страницы и код Ajax никогда не будет называться ...

только что получил эту мысль, было бы хорошо поделиться

2 голосов
/ 12 апреля 2011

Попробуйте вместо <a href="#" class="arrow">. (Обратите внимание на резкий # символ).

...