Является ли пустой href действительным?

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

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

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

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

Ответ 1

Хотя этот вопрос уже ответил ( 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 (который в настоящее время стандарт IETFs URI), который в основном говорит то же самое.

HTML5

HTML5 использует (действительный URL, потенциально окруженный пробеламидействительный URL) Спецификация URL W3Cs, которая была прекращена. WHATWGs URL Standard следует использовать вместо этого (см. последний раздел).

HTML 5.1

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

WHATWG HTML

WHATWGs HTML использует (действительный URL, потенциально окруженный пробелами) определение допустимой строки URL от WHATWGs URL Standard, где говорится, что это может быть строка relative-URL-with-fragment, которая должна быть как минимум относительной URL-строкой, который может быть строка path-relative-schem-less-URL, которая является строка path-relative-URL, которая не начинается со строки схемы, за которой следует :, и ее определение говорит (смелый акцент мой):

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

Ответ 2

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

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

Ответ 3

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

Есть некоторые недостатки для каждого подхода:

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

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

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

Ответ 4

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

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

<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>

Ответ 5

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

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

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

Ответ 6

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

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

<a href>sth</a>

Ответ 7

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

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

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

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

В рабочем документе HTML5, однако, говорится:

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

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

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

Ответ 8

Предупреждение:

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

Ответ 9

он действителен, но как сказал UpTheCreek "Для каждого подхода есть некоторые недостатки"

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

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

Ответ 10

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