web-dev-qa-db-fra.com

Un href vide est-il valide?

L'un de nos développeurs Web utilise le code HTML suivant comme espace réservé pour le style d'une liste déroulante.

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

Cette balise d'ancrage est-elle considérée comme valide?

Puisqu'il n'y a pas de valeur href, elle apparaît comme cassée dans certains de nos rapports du vérificateur de liens.

165
matthew

Bien que cette question ait déjà reçu une réponse ( tl; dr: oui, une valeur vide href est valide), aucune des réponses existantes ne fait référence à la spécifications pertinentes.

Une chaîne vide ne peut pas être un URI. Cependant, l'attribut href ne prend pas seulement les URI comme valeur, mais aussi les références URI. . Une chaîne vide peut être une référence URI.

HTML 4.01

HTML 4.01 tilise RFC 2396 , où il est indiqué dans la section 4.2. Références de même document ( gras gras mien):

Une référence d'URI qui ne contient pas d'URI est une référence au document actuel. En d'autres termes, une référence d'URI vide dans un document est interprétée comme une référence au début de ce document , et une référence contenant uniquement un identificateur de fragment est une référence au fragment identifié de ce document.

La RFC 2396 est obsolète par RFC 3986 (qui est actuellement norme URI de l'IETF ), qui dit essentiellement la même chose .

HTML5

HTML5 tilise ( URL valide éventuellement entourée d'espaces adresse valide ) Spéc. URL du W3C, qui a été abandonnée. L’URL standard du WHATWG devrait être utilisée à la place (voir la dernière section).

HTML 5.1

HTML 5.1 tilise ( URL valide éventuellement entourée d'espaces URL valide ) Norme d'URL du WHATWG (voir la section suivante).

WHATWG HTML

Le HTML du WHATWG tilise ( URL valide potentiellement entouré d'espaces ) ==) la définition de chaîne d'URL valide de URL standard de WHATWG , où il est indiqué qu'il peut s'agir d'un URL relative avec chaîne de caractères , qui doit au moins être chaîne d'URL relative , qui peut être un path-relative-scheme-less-URL string , qui est un path- chaîne d'URL relative qui ne commence pas par une chaîne de système suivie de :, et sa définition indique (gras, mine):

Une chaîne d'URL relative au chemin doit être zéro ou plusieurs chaînes de segments de chemin d'URL, séparées les unes des autres par U + 002F (/), et ne commence pas par U + 002F (/).

40
unor

C'est valide.

Cependant, la pratique standard consiste à utiliser href="#" ou parfois href="javascript:;".

174
SLaks

Comme d’autres l’ont dit, c’est valable.

Cependant, il existe des inconvénients à chaque approche:

href="#" ajoute une entrée supplémentaire à l'historique du navigateur (ce qui est gênant lorsque vous cliquez par exemple sur le bouton Précédent).

href="" recharge la page

href="javascript:;" ne semble pas avoir de problèmes (autres que paraître désordonné et dénué de sens) - quelqu'un en sait-il?

110
UpTheCreek

Bien que le fait de ne pas inclure de href puisse être un code HTML totalement valide, en particulier avec un gestionnaire onclick, il convient de tenir compte de certains éléments: il ne peut pas être mis au point par le clavier sans un ensemble de valeurs tabindex. De plus, cela sera inaccessible au logiciel de lecture d’écran utilisant Internet Explorer, car IE signalera via les interfaces d’accessibilité que tout élément d’ancrage sans attribut href est non-focusable, que le tabindex ait été défini ou non.

Ainsi, alors que les éléments suivants peuvent être complètement valides:

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

Il est de loin préférable d'ajouter explicitement un attribut href null-effect

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

Pour une prise en charge complète de tous les utilisateurs, si vous utilisez la classe avec CSS pour restituer une image, vous devez également inclure du contenu textuel, tel que l'attribut title, pour fournir une description textuelle de ce qui se passe.

<a href="javascript:void(0);" class="arrow" title="Go to linked content">Link content</a>
56
Nick

L’actuel brouillon HTML5 permet également d’omettre complètement l’attribut href.

Si l'élément a n'a pas d'attribut href, il représente un espace réservé pour l'emplacement où un lien aurait autrement été placé, s'il avait été pertinent.

Pour répondre à votre question: oui c'est valide.

26
halfdan

En effet, vous pouvez le laisser vide (le validateur W3 ne se plaint pas).

En poussant l’idée un peu plus loin: laissez de côté le = "". L'avantage de ceci est que le lien n'est pas traité comme une ancre à la page actuelle.

<a href>sth</a>
16
anroots

Alors que le validateur de W3 ne peut pas se plaindre d'un attribut vide href, le brouillon de travail HTML5 actuel spécifie:

Les attributs href sur a et area doivent avoir une valeur correspondant à une URL valide potentiellement entourée par les espaces.

Une URL valide est une URL conforme à RL Standard . Maintenant, le standard d'URL est un peu déroutant, mais il ne dit nulle part qu'une URL peut être une chaîne vide.

... ce qui signifie qu'une chaîne vide est et non une URL valide.

Cependant, le brouillon de travail HTML5 continue:

Remarque: L'attribut href sur les éléments a et area n'est pas obligatoire ; lorsque ces éléments n'ont pas d'attributs href, ils ne créent pas de liens hypertexte.

Cela signifie que nous pouvons simplement omettre l'attribut href:

<a class="arrow"></a>
9
James Donnelly

Un mot d'avertissement:

Dans mon expérience, omettre l’attribut href pose des problèmes d’accessibilité car la navigation au clavier l’ignorera et ne le mettra jamais en évidence comme lorsqu’un href est présent. Inclure manuellement votre élément dans le tabindex est un moyen de contourner ce problème.

8
Jason

c'est valable, mais comme UpTheCreek a déclaré: "Il y a des inconvénients à chaque approche"

si vous appelez ajax via une balise, laissez href = "" comme ceci gardera la page rechargée et le code ajax ne sera jamais appelé ...

vient d'avoir cette pensée serait bon de partager

3
Ray Tsai

Essayez de faire <a href="#" class="arrow"> à la place. (Notez le caractère _ # net].

2
elvenbyte