Un de nos développeurs Web utilise le code HTML suivant comme espace réservé pour styliser une liste déroulante.
<a href="" class="arrow"></a>
Est-ce considéré comme une balise d'ancrage valide?
Puisqu'il n'y a pas de valeur href, il apparaît comme cassé sur certains de nos rapports de vérificateur de liens.
Réponses:
Bien que cette question soit déjà répondue ( tl; dr: oui, une
href
valeur vide est valide), aucune des réponses existantes ne fait référence aux spécifications pertinentes.Une chaîne vide ne peut pas être un URI. Cependant, l'
href
attribut ne prend pas seulement les URI comme valeur, mais également les références URI. Une chaîne vide peut être une référence URI.HTML 4.01
HTML 4.01 utilise la RFC 2396 , où il est indiqué dans la section 4.2. Références dans le même document (je souligne en gras):
La RFC 2396 est obsolète par la RFC 3986 (qui est actuellement la norme URI de l'IETF ), qui dit essentiellement la même chose .
HTML5
HTML5 utilise ( URL valide potentiellement entourée d'espaces → URL valide ) la spécification d'URL du W3C , qui a été abandonnée. Le standard d'URL de WHATWG doit être utilisé à la place (voir la dernière section).
HTML 5.1
HTML 5.1 utilise ( URL valide potentiellement entourée d'espaces → URL valide ) Norme d'URL de WHATWG (voir la section suivante).
WHATWG HTML
Le HTML de WHATWG utilise ( URL valide potentiellement entourée d'espaces ) la définition de la chaîne d'URL valide de la norme d'URL de WHATWG , où il indique qu'il peut s'agir d'une chaîne d'URL relative avec fragment , qui doit au moins être une chaîne d'URL relative , qui peut être une chaîne d'URL relative au chemin d'accès sans schéma , qui est une chaîne d'URL relative au chemin qui ne commence pas par une chaîne de schéma suivie de
:
, et sa définition dit (mise en évidence en gras):la source
C'est valable.
Cependant, la pratique courante consiste à utiliser
href="#"
ou parfoishref="javascript:;"
.la source
href="#"
, le focus se déplace vers le haut de la page dans IE, donc je pense quehref="javascript:;"
c'est mieuxComme d'autres l'ont dit, c'est valable.
Il y a cependant quelques inconvénients à chaque approche:
href="#"
ajoute une entrée supplémentaire à l'historique du navigateur (ce qui est ennuyeux par exemple lors d'un retour en arrière).href=""
recharge la pagehref="javascript:;"
ne semble pas avoir de problèmes (à part avoir l'air désordonné et dénué de sens) - quelqu'un en sait-il?la source
Bien qu'il puisse être tout à fait valide de ne pas inclure de href, en particulier avec un gestionnaire onclick, il y a certaines choses à considérer: il ne sera pas focalisable sur le clavier sans avoir une valeur tabindex définie. En outre, cela sera inaccessible aux logiciels de lecture d'écran utilisant Internet Explorer, car IE signalera via les interfaces d'accessibilité que tout élément d'ancrage sans attribut href comme non focalisable, que le tabindex ait été défini ou non.
Ainsi, alors que ce qui suit peut être tout à fait valable:
Il est préférable d'ajouter explicitement un attribut href à effet nul
Pour une prise en charge complète de tous les utilisateurs, si vous utilisez la classe avec CSS pour rendre une image, vous devez également inclure du contenu textuel, tel que l'attribut title pour fournir une description textuelle de ce qui se passe.
la source
href
affectera les interfaces d'accessibilité.href
valeur sur autre chose qu'un chemin relatif / absolu causera des problèmes de lecteur d'écran. Évitez d'utiliser un symbole dièse / dièse comme solution de contournement pour ce problème car il n'est pas destiné à cela. Les lecteurs d'écran peuvent (actuellement le fait VoiceOver) annoncer que votre lien est un identifiant de fragment (lien vers quelque part dans la page en cours) et est également valide d'un point de vue standard. voir w3.org/2001/tag/2011/01/HashInURI-20110115#NakedHashLe brouillon HTML5 actuel permet également d'omettre complètement l'attribut href.
Pour répondre à votre question: Oui, c'est valide.
la source
<a>
élément sans nonhref
est stylé directement dans certains navigateurs. Par exemple, les styles ": hover" ne fonctionnent pas dans Chrome (et d'autres choses bizarres)<a>
balise sans ahref
représente autre chose , pas un lien (traditionnellement une ancre). En outre, il existe une différence entre un attribut facultatif et un attribut qui peut être vide.En effet, vous pouvez le laisser vide (le validateur W3 ne se plaint pas).
Prenant 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 vers la page actuelle.
la source
<a href></a>
→ Attribut href sans valeur explicite vue. L'attribut peut être supprimé par IE7.Alors que le validateur de W3 ne peut pas se plaindre d'un
href
attribut vide , le brouillon de travail HTML5 actuel spécifie:Une URL valide est une URL conforme à la norme URL . Maintenant, la norme URL est un peu déroutante à comprendre, mais nulle part elle n'indique qu'une URL peut être une chaîne vide.
... ce qui signifie qu'une chaîne vide n'est pas une URL valide.
Le brouillon de travail HTML5 continue, cependant, à déclarer:
Cela signifie que nous pouvons simplement omettre
href
complètement l' attribut:Si votre intention est que ces éléments
href
-lessa
nécessitent toujours une interaction du clavier, vous devrez suivre la voie normale d'attribution d'unrole
ettabindex
aux côtés de vos gestionnaires habituels de clic / touche:la source
href
fait de ne pas utiliser le en fait pas un lien hypertexte, ce qui rend laonclick
fonctionnalité inaccessible aux utilisateurs de clavier.Un mot d'avertissement:
D'après mon expérience, l'omission de l'
href
attribut pose des problèmes d'accessibilité car la navigation au clavier l'ignorera et ne lui donnera jamais le focus comme elle le fera lorsque href est présent. Inclure manuellement votre élément dans le tabindex est un moyen de contourner cela.la source
c'est valide mais comme UpTheCreek a dit: `` Il y a des inconvénients à chaque approche ''
si vous appelez ajax via une balise, laissez le href = "" comme cela maintiendra le rechargement de la page et le code ajax ne sera jamais appelé ...
juste avoir cette pensée serait bon à partager
la source
Essayez de faire à la
<a href="#" class="arrow">
place. (Notez le#
caractère pointu ).la source