Cuando se quiere hacer referencia a alguna parte de una página web con el http://example.com/#foo
método " ", se debe usar
<h1><a name="foo"/>Foo Title</h1>
o
<h1 id="foo">Foo Title</h1>
Ambos funcionan, pero ¿son iguales o tienen diferencias semánticas?
html
hyperlink
fragment-identifier
Henrik Paul
fuente
fuente
http://example.com#foo
(sin el / antes #)http://example.com#foo
yhttp://example.com/#foo
son equivalentes como se define en uno de los RFC en URI.Respuestas:
De acuerdo con la especificación HTML 5, 5.9.8 Navegación a un identificador de fragmento :
Entonces, buscará
id="foo"
, y luego seguirá aname="foo"
Editar: como señaló @hsivonen, en HTML5 el
a
elemento no tiene atributo de nombre. Sin embargo, las reglas anteriores todavía se aplican a otros elementos nombrados.fuente
<h1 id="foo">Foo Title</h1>
funciona incluso en IE6 y es parte de la especificación HTML 4.01name="foo"
y aid="foo"
(independientemente de su orden dentro de la página), Chrome y Firefox saltarán alid
, pero IE (probado en 11) y Edge saltarán alname
No debe usar
<h1><a name="foo"/>Foo Title</h1>
ningún tipo de HTML servidotext/html
, porque la sintaxis de elemento vacío XML no es compatibletext/html
. Sin embargo,<h1><a name="foo">Foo Title</a></h1>
está bien en HTML4. No es válido en HTML5 como está redactado actualmente.<h1 id="foo">Foo Title</h1>
está bien tanto en HTML4 como en HTML5. Esto no funcionará en Netscape 4, pero probablemente usará una docena de otras características que no funcionan en Netscape 4.fuente
id
s comoname
anclas en términos de fragmentos de URL y compatibilidad del:target
selector CSS . Probado: Chrome 6, Firefox 1.5, IE6, Opera 8.02, Safari 3.1.2, Netscape 7.2, Lynx 2.24 y navegadores móviles: Android 2.2, Chrome 26, Dolphin 9.3, Firefox 19, IE10, Safari 4 y Opera Mini 5.1.Debo decir que si va a vincular a esa área en la página ... como page.html # foo y Foo Title no es un enlace que debería usar:
Si, por el contrario, coloca una
<a>
referencia a su alrededor, su título estará influenciado por un<a>
CSS específico dentro de su sitio. Es solo un marcado adicional, y no debería necesitarlo. Recomiendo encarecidamente colocar una identificación en el título, no solo está mejor formada, sino que le permitirá abordar ese objeto en Javascript o CSS.fuente
Wikipedia hace un uso intensivo de esta característica como esta:
Y Wikipedia está funcionando para todos, por lo que me sentiría seguro al seguir este formulario.
Además, no olvide que puede usar esto no solo con tramos sino también con divs o incluso celdas de tabla, y luego tiene acceso a la pseudoclase: target en el elemento. Solo tenga cuidado de no cambiar el ancho, como con texto en negrita, porque eso mueve el contenido, lo cual es inquietante.
Anclajes nombrados: mi voto es evitar:
fuente
a {color:red}
diseña, coloreará sus enlaces <a href> Y sus fragmentos <a name>. Puede solucionar esto con pseudo clasesa:link {color:red]}
o selectores de atributosa:not([href]) {color:red;}
<a name="heading1"></a> ... document.html#heading1
sin establecer la ID, porque la ID puede chocar con otra ID en la página. Es una pena que no hayan puesto elname
atributo en HTML5.es lo que se debe usar. No use un ancla a menos que quiera un enlace.
fuente
Atención a los usuarios de JavaScript: todas las ID se convierten en variables globales en la ventana .
Acabo de crear el JS global:
El valor de
window.foo
seráHTMLElement
para elh1
.A menos que pueda garantizar que todos los valores utilizados en los
id
atributos sean seguros, puede preferir atenerse aname
:fuente
window
. Por ejemplo,<div id="open"></div>
no sobrescribirá la funciónwindow.open
.No hay diferencia semántica; La tendencia en las normas es hacia el uso de
id
más quename
. Sin embargo, hay diferencias que pueden llevar a preferirname
en algunos casos. La especificación HTML 4.01 ofrece las siguientes sugerencias :Usar
id
oname
? Los autores deben considerar los siguientes problemas al decidir si usarid
oname
para un nombre de anclaje:fuente
id
anclas funcionaran en Safari para iOS 5, por lo que no solo los navegadores eran "realmente viejos" en el '09. Tuve que agregarname
s para que mi sitio funcionara correctamente en el iPad. Esto podría haberse solucionado ahora, no tengo ningún dispositivo iOS 6 para verificar.id
anclas parecen funcionar universalmente. Si este simple ejemplo no funciona en su dispositivo móvil, comprobaría la configuración de accesibilidad del dispositivo. (@deathApril El sitio móvil de Wikipedia tiene Javascript que efectivamente hace que se ignore el fragmento de URL.)El método de ID no funcionará en navegadores más antiguos, el método de nombre de anclaje quedará en desuso en las versiones HTML más nuevas ... Yo iría con id.
fuente
Tengo una página web que consta de varios contenedores div apilados verticalmente, idénticos en formato y que solo difieren en número de serie. Quería ocultar el nombre del ancla en la parte superior de cada div, por lo que la solución más económica resultó ser incluir el ancla como una identificación dentro de la etiqueta div de apertura, es decir,
fuente
La segunda muestra asigna una identificación única al elemento en cuestión. Este elemento se puede manipular o acceder mediante DHTML.
El primero, por otro lado, establece una ubicación con nombre dentro del documento, similar a un marcador. Unido a un "ancla", tiene mucho sentido.
fuente
Solo una observación sobre el marcado El formulario de marcado en versiones anteriores de HTML proporcionó un punto de anclaje. Los formularios de marcado en HTML5 que utilizan el atributo id, aunque son en su mayoría equivalentes, requieren un elemento para identificar, casi todos los cuales normalmente se espera que contengan contenido.
Se podría usar un span o div vacío, por ejemplo, pero este uso se ve y huele degenerado.
Un pensamiento es usar el elemento wbr para este propósito. El wbr tiene un modelo de contenido vacío y simplemente declara que es posible un salto de línea; Esto sigue siendo un uso ligeramente gratuito de una etiqueta de marcado, pero mucho menos que las divisiones de documentos gratuitos o espacios de texto vacíos.
fuente
wbr
: w3.org/TR/html-markup/wbr.html Usar en<wbr id="foo" />
lugar de<a name="foo"></a>
En html 5, el
id=""
atributo define un identificador único para un elemento, que también es un ancla para un enlace de fragmento. En estándares html anteriores, elname=""
atributo del<a>
elemento define un ancla para un enlace de fragmento. Recomiendo algo como:<a name="foo" id="foo"></a><h1>Foo Title</h1>
Debido a que el soporte para el
id=""
atributo es un poco irregular (aunque las últimas versiones de todos los navegadores principales lo admiten, las versiones que no tienen más de unos pocos años [Y es mejor no romper algo si no hay una buena razón para]). Es compatible y no da estilo a lo que sea que esté en el elemento vinculado, ya que el cierre </a> todavía está fuera del elemento, pero sigue siendo válido en todos los estándares actuales.Asegúrese de que los atributos
name=""
yid=""
del<a>
elemento sean los mismos.fuente
name
atributo en una etiqueta de anclaje que se requería; colocar atributos enhN
ospan
no funcionó.¿Qué tal usar el atributo de nombre para los navegadores antiguos y el atributo de identificación para los nuevos navegadores? Se usarán ambas opciones y se implementará el método alternativo de forma predeterminada.
fuente
Todo el concepto de "ancla con nombre" utiliza el atributo de nombre, por definición. Debería limitarse a usar el nombre, pero el atributo ID podría ser útil para algunas situaciones de JavaScript.
Como en los comentarios, siempre puedes usar ambos para cubrir tus apuestas.
fuente