Lorsque l'on veut se référer à une partie d'une page Web avec la http://example.com/#foo
méthode " ", doit-on utiliser
<h1><a name="foo"/>Foo Title</h1>
ou
<h1 id="foo">Foo Title</h1>
Ils fonctionnent tous les deux, mais sont-ils égaux ou ont-ils des différences sémantiques?
html
hyperlink
fragment-identifier
Henrik Paul
la source
la source
http://example.com#foo
(donc sans le / avant le #)http://example.com#foo
ethttp://example.com/#foo
sont équivalents tels que définis dans l'un des RFC sur les URI.Réponses:
Selon la spécification HTML 5, 5.9.8 Navigation vers un identificateur de fragment :
Donc, il cherchera
id="foo"
, puis suivra pourname="foo"
Edit: Comme souligné par @hsivonen, en HTML5 l'
a
élément n'a pas d'attribut de nom. Cependant, les règles ci-dessus s'appliquent toujours aux autres éléments nommés.la source
<h1 id="foo">Foo Title</h1>
fonctionne même dans IE6 et fait partie de la spécification HTML 4.01name="foo"
et unid="foo"
(indépendamment de leur ordre dans la page), Chrome et Firefox passeront auid
, mais IE (testé en 11) et Edge passeront auname
Vous ne devez pas utiliser
<h1><a name="foo"/>Foo Title</h1>
dans n'importe quelle saveur de HTML servi commetext/html
, car la syntaxe d'élément vide XML n'est pas prise en charge danstext/html
. Cependant,<h1><a name="foo">Foo Title</a></h1>
est OK en HTML4. Il n'est pas valide en HTML5 tel qu'il est actuellement rédigé.<h1 id="foo">Foo Title</h1>
est OK à la fois en HTML4 et HTML5. Cela ne fonctionnera pas dans Netscape 4, mais vous utiliserez probablement une douzaine d'autres fonctionnalités qui ne fonctionnent pas dans Netscape 4.la source
id
s comme desname
ancres en termes de fragments d'URL et de compatibilité du:target
sélecteur CSS . Testé: Chrome 6, Firefox 1.5, IE6, Opera 8.02, Safari 3.1.2, Netscape 7.2, Lynx 2.24 et les navigateurs mobiles: Android 2.2, Chrome 26, Dolphin 9.3, Firefox 19, IE10, Safari 4 et Opera Mini 5.1.Je dois dire que si vous allez créer un lien vers cette zone de la page ... comme page.html # foo et Foo Title n'est pas un lien que vous devriez utiliser:
Si vous placez plutôt une
<a>
référence autour d'elle, votre titre sera influencé par un<a>
CSS spécifique au sein de votre site. C'est juste un balisage supplémentaire, et vous ne devriez pas en avoir besoin. Je recommande fortement de placer un identifiant sur le titre, non seulement il est mieux formé, mais il vous permettra d'adresser cet objet en Javascript ou CSS.la source
Wikipedia fait un usage intensif de cette fonctionnalité comme ceci:
Et Wikipédia fonctionne pour tout le monde, donc je me sentirais en sécurité avec ce formulaire.
N'oubliez pas non plus que vous pouvez l'utiliser non seulement avec des étendues, mais aussi avec des div ou même des cellules de tableau, puis vous avez accès à la pseudo-classe: target sur l'élément. Faites juste attention à ne pas changer la largeur, comme avec du texte en gras, car cela déplace le contenu, ce qui est dérangeant.
Ancres nommées - mon vote est d'éviter:
la source
a {color:red}
il colorera à la fois vos liens <a href> ET vos fragments <a name>. Vous pouvez contourner cela avec des pseudo-classesa:link {color:red]}
ou des sélecteurs d'attributsa:not([href]) {color:red;}
<a name="heading1"></a> ... document.html#heading1
sans définir l'ID, car l'ID peut entrer en conflit avec un autre ID sur la page. C'est dommage qu'ils n'aient pas mis l'name
attribut en HTML5.est ce qui devrait être utilisé. N'utilisez pas d'ancre sauf si vous voulez un lien.
la source
Attention aux utilisateurs JavaScript: tous les ID deviennent des variables globales sous fenêtre .
Je viens de créer le JS global:
La valeur de
window.foo
sera laHTMLElement
pourh1
.À moins que vous ne puissiez garantir que toutes les valeurs utilisées dans les
id
attributs sont sûres, vous préférerez peut-être vous en tenir àname
:la source
window
. Par exemple,<div id="open"></div>
n'écrasera pas la fonctionwindow.open
.Il n'y a pas de différence sémantique; la tendance dans les normes est vers l'utilisation de
id
plutôt quename
. Cependant, il existe des différences qui peuvent conduire à préférername
dans certains cas. La spécification HTML 4.01 offre les conseils suivants :Utilisez
id
ouname
? Les auteurs doivent prendre en compte les problèmes suivants lorsqu'ils décident d'utiliserid
ouname
pour un nom d'ancre:la source
id
ancres dans Safari pour iOS 5, donc ce ne sont pas seulement les navigateurs qui étaient déjà "vraiment vieux" en '09. J'ai dû ajouter desname
s pour que mon site fonctionne correctement sur l'iPad. Cela a peut-être été corrigé maintenant, je ne possède aucun appareil iOS 6 à vérifier.id
ancres semblent fonctionner universellement. Si cet exemple simple ne fonctionne pas sur votre mobile, je vérifierais les paramètres d'accessibilité de l'appareil. (Le site mobile Wikipédia @deathApril dispose de Javascript qui fait que le fragment d'URL est ignoré.)La méthode ID ne fonctionnera pas sur les anciens navigateurs, la méthode du nom d'ancre sera déconseillée dans les versions HTML plus récentes ... J'irais avec id.
la source
J'ai une page Web composée d'un certain nombre de conteneurs div empilés verticalement, de format identique et ne différant que par le numéro de série. Je voulais masquer l'ancre de nom en haut de chaque div, donc la solution la plus économique s'est avérée inclure l'ancre comme identifiant dans la balise div d'ouverture, c'est-à-dire,
la source
Le deuxième échantillon attribue un ID unique à l'élément en question. Cet élément peut ensuite être manipulé ou accessible à l'aide de DHTML.
Le premier, d'autre part, définit un emplacement nommé dans le document, semblable à un signet. Attaché à une "ancre", il est parfaitement logique.
la source
Juste une observation sur le balisage Le formulaire de balisage dans les versions antérieures de HTML fournissait un point d'ancrage. Les formulaires de balisage en HTML5 utilisant l'attribut id, bien que généralement équivalents, nécessitent un élément à identifier, dont presque tous devraient normalement contenir du contenu.
Un span ou div vide pourrait être utilisé, par exemple, mais cette utilisation semble et dégénère.
Une pensée est d'utiliser l'élément wbr à cette fin. Le wbr a un modèle de contenu vide et déclare simplement qu'un saut de ligne est possible; il s'agit toujours d'une utilisation légèrement gratuite d'une balise de balisage, mais beaucoup moins que des divisions de documents gratuites ou des étendues de texte vides.
la source
wbr
: w3.org/TR/html-markup/wbr.html Utilisez<wbr id="foo" />
plutôt que<a name="foo"></a>
En html 5, l'
id=""
attribut définit un identifiant unique pour un élément, qui est également une ancre pour un lien de fragment. Dans les normes html précédentes, l'name=""
attribut de l'<a>
élément définit une ancre pour un lien de fragment. Je recommande quelque chose comme:<a name="foo" id="foo"></a><h1>Foo Title</h1>
Parce que le soutien à la
id=""
attribut est un peu inégale (même si les dernières versions de tous les principaux navigateurs le prennent en charge, les versions qui ne datent pas de plus de quelques années [Et il vaut mieux ne pas casser quelque chose s'il n'y a pas de bonne raison de]). Il est compatible et ne modifie pas ce qui se trouve dans l'élément lié, car la fermeture </a> est toujours en dehors de l'élément, mais il est toujours valide dans toutes les normes actuelles.Assurez-vous que les attributs
name=""
etid=""
de l'<a>
élément sont identiques.la source
name
attribut sur une balise d'ancrage qui était requis; placer des attributs sur unhN
ouspan
ne fonctionnait pas.Que diriez-vous d'utiliser l'attribut name pour les anciens navigateurs et l'attribut id pour les nouveaux navigateurs. Les deux options seront utilisées et la méthode de secours sera implémentée par défaut !!!
la source
L'ensemble du concept "ancre nommée" utilise l'attribut name, par définition. Vous devez simplement vous en tenir au nom, mais l'attribut ID peut être utile pour certaines situations javascript.
Comme dans les commentaires, vous pouvez toujours utiliser les deux pour couvrir vos paris.
la source