Wenn man mit der http://example.com/#foo
Methode " " auf einen Teil einer Webseite verweisen möchte , sollte man diese verwenden
<h1><a name="foo"/>Foo Title</h1>
oder
<h1 id="foo">Foo Title</h1>
Sie arbeiten beide, aber sind sie gleich oder haben sie semantische Unterschiede?
html
hyperlink
fragment-identifier
Henrik Paul
quelle
quelle
http://example.com#foo
(also ohne das / vor #)http://example.com#foo
undhttp://example.com/#foo
sind äquivalent wie in einem der RFCs auf URIs definiert.Antworten:
Gemäß der HTML 5-Spezifikation, 5.9.8 Navigieren zu einer Fragmentkennung :
Also wird es suchen
id="foo"
und dann folgenname="foo"
Bearbeiten: Wie von @hsivonen hervorgehoben, hat das
a
Element in HTML5 kein Namensattribut . Die obigen Regeln gelten jedoch weiterhin für andere benannte Elemente.quelle
<h1 id="foo">Foo Title</h1>
funktioniert sogar in IE6 und ist Teil der HTML 4.01-Spezifikationname="foo"
und einemid="foo"
(unabhängig von ihrer Reihenfolge innerhalb der Seite) springen Chrome und Firefox zumid
, aber IE (getestet in 11) und Edge springen zumname
Sie sollten keine
<h1><a name="foo"/>Foo Title</h1>
HTML-Version verwenden, die als dienttext/html
, da die XML-Syntax für leere Elemente in nicht unterstützt wirdtext/html
. Allerdings<h1><a name="foo">Foo Title</a></h1>
ist OK in HTML4. Es ist in HTML5 nicht gültig, wie es derzeit entworfen wurde.<h1 id="foo">Foo Title</h1>
ist sowohl in HTML4 als auch in HTML5 in Ordnung. Dies funktioniert in Netscape 4 nicht, aber Sie werden wahrscheinlich ein Dutzend anderer Funktionen verwenden, die in Netscape 4 nicht funktionieren.quelle
id
sname
in Bezug auf URL-Fragmente und Kompatibilität des CSS-:target
Selektors wie Anker behandeln . Getestet: Chrome 6, Firefox 1.5, IE6, Opera 8.02, Safari 3.1.2, Netscape 7.2, Lynx 2.24 und mobile Browser: Android 2.2, Chrome 26, Dolphin 9.3, Firefox 19, IE10, Safari 4 und Opera Mini 5.1.Ich muss sagen, wenn Sie auf diesen Bereich auf der Seite verlinken wollen ... wie page.html # foo und Foo Title ist kein Link, den Sie verwenden sollten:
Wenn Sie stattdessen eine
<a>
Referenz einfügen, wird Ihre Überschrift von einem<a>
bestimmten CSS auf Ihrer Website beeinflusst. Es ist nur ein zusätzliches Markup, und Sie sollten es nicht brauchen. Ich würde wärmstens empfehlen, eine ID in die Überschrift zu setzen. Sie ist nicht nur besser geformt, sondern ermöglicht es Ihnen auch, dieses Objekt entweder in Javascript oder CSS zu adressieren.quelle
Wikipedia nutzt diese Funktion wie folgt:
Und Wikipedia arbeitet für alle, daher würde ich mich sicher fühlen, wenn ich mich an dieses Formular halte.
Vergessen Sie auch nicht, dass Sie dies nicht nur mit Spannen, sondern auch mit Divs oder sogar Tabellenzellen verwenden können, und dann haben Sie Zugriff auf die Pseudoklasse: target für das Element. Achten Sie nur darauf, die Breite nicht zu ändern, wie bei fettem Text, da dies den Inhalt bewegt, was störend ist.
Benannte Anker - meine Stimme ist zu vermeiden:
quelle
a {color:red}
Schlagen Sie vor, Punkt 3 von 4 zu bearbeiten: Wenn Sie jemals einen Stil erstellen, werden sowohl Ihre <a href> -Links als auch Ihre <a name> -Fragmente eingefärbt. Sie können dies mita:link {color:red]}
a:not([href]) {color:red;}
<a name="heading1"></a> ... document.html#heading1
ohne die ID festzulegen , da die ID möglicherweise mit einer anderen ID auf der Seite kollidiert. Es ist eine Schande, dass sie dasname
Attribut nicht in HTML5 eingefügt haben.ist das, was verwendet werden sollte. Verwenden Sie keinen Anker, es sei denn, Sie möchten einen Link.
quelle
Heads-up für JavaScript-Benutzer: Alle IDs werden unter Fenster zu globalen Variablen .
Gerade die JS global erstellt:
Der Wert von
window.foo
wird derHTMLElement
für seinh1
.Wenn Sie nicht garantieren können, dass alle in
id
Attributen verwendeten Werte sicher sind, sollten Sie sich an Folgendes haltenname
:quelle
window
. Zum Beispiel<div id="open"></div>
wird die Funktion nicht überschriebenwindow.open
.Es gibt keinen semantischen Unterschied; Der Trend in den Standards geht eher zur Verwendung von
id
als vonname
. Es gibt jedoch Unterschiede, diename
in einigen Fällen zu einer Bevorzugung führen können. Die HTML 4.01-Spezifikation bietet die folgenden Hinweise :Verwenden Sie
id
odername
? Autoren sollten die folgenden Punkte berücksichtigen, wenn sie entscheiden, ob sie einen Ankernamen verwendenid
oder nichtname
:quelle
id
in Safari für iOS 5 keine Anker zum Laufen bringen , daher waren nicht nur Browser bereits "wirklich alt" in '09. Ich musstename
s hinzufügen , damit meine Website auf dem iPad ordnungsgemäß funktioniert. Möglicherweise wurde dies inzwischen behoben. Ich besitze keine zu überprüfenden iOS 6-Geräte.id
Anker scheinen universell zu funktionieren. Wenn dieses einfache Beispiel auf Ihrem Handy nicht funktioniert, würde ich die Einstellungen für die Barrierefreiheit des Geräts überprüfen. (@deathApril Wikipedia mobile Website hat Javascript, die effektiv bewirkt, dass das URL-Fragment ignoriert wird.)Die ID-Methode funktioniert in älteren Browsern nicht, die Ankernamenmethode ist in neueren HTML-Versionen veraltet ... Ich würde mich für die ID entscheiden.
quelle
Ich habe eine Webseite, die aus mehreren vertikal gestapelten Div-Containern besteht, die im Format identisch sind und sich nur in der Seriennummer unterscheiden. Ich wollte den Namensanker oben in jedem Div ausblenden, daher stellte sich heraus, dass die wirtschaftlichste Lösung darin bestand, den Anker als ID in das öffnende Div-Tag aufzunehmen, d. H.
quelle
Nur eine Beobachtung zum Markup Das Markup-Formular in früheren HTML-Versionen bot einen Ankerpunkt. Die Markup-Formulare in HTML5, die das id-Attribut verwenden, sind zwar größtenteils gleichwertig, erfordern jedoch ein zu identifizierendes Element, von dem normalerweise erwartet wird, dass fast alle Inhalte enthalten.
Eine leere Spanne oder ein Leerzeichen könnte zum Beispiel verwendet werden, aber diese Verwendung sieht und riecht degeneriert aus.
Ein Gedanke ist, das wbr-Element für diesen Zweck zu verwenden. Das wbr hat ein leeres Inhaltsmodell und erklärt einfach, dass ein Zeilenumbruch möglich ist. Dies ist immer noch eine etwas unbegründete Verwendung eines Markup-Tags, aber viel weniger als eine unbegründete Dokumentteilung oder leere Textbereiche.
quelle
wbr
: w3.org/TR/html-markup/wbr.html Verwenden Sie<wbr id="foo" />
statt<a name="foo"></a>
Das zweite Beispiel weist dem betreffenden Element eine eindeutige ID zu. Dieses Element kann dann mit DHTML bearbeitet oder aufgerufen werden.
Der erste legt andererseits eine benannte Position innerhalb des Dokuments fest, ähnlich einem Lesezeichen. An einem "Anker" befestigt, macht es vollkommen Sinn.
quelle
In HTML 5
id=""
definiert das Attribut einen eindeutigen Bezeichner für ein Element, der auch ein Anker für eine Fragmentverknüpfung ist. In früheren HTML-Standards definiert dasname=""
Attribut des<a>
Elements einen Anker für eine Fragmentverknüpfung. Ich empfehle etwas wie:<a name="foo" id="foo"></a><h1>Foo Title</h1>
Da die Unterstützung für das
id=""
Attribut etwas fleckig ist (obwohl die neuesten Versionen aller gängigen Browser dies unterstützen, sind die Versionen nicht älter als ein paar Jahre [und es ist am besten, etwas nicht zu beschädigen wenn es keinen guten Grund dafür gibt]). Es ist kompatibel und formatiert nicht, was auch immer im verknüpften Element enthalten ist, da das Schließen </a> immer noch außerhalb des Elements liegt, aber in allen aktuellen Standards weiterhin gültig ist.Stellen Sie sicher, dass die
name=""
undid=""
Attribute des<a>
Elements identisch sind.quelle
name
Attribut auf einem Ankertag, das erforderlich war. Platzieren von Attributen auf einemhN
oderspan
nicht funktioniert.Wie wäre es mit der Verwendung des Namensattributs für alte Browser und des ID-Attributs für die neuen Browser? Beide Optionen werden verwendet und die Fallback-Methode wird standardmäßig implementiert !!!
quelle
Das gesamte Konzept des "benannten Ankers" verwendet per Definition das Namensattribut. Sie sollten sich nur an die Verwendung des Namens halten, aber das ID-Attribut kann in einigen Javascript-Situationen nützlich sein.
Wie in den Kommentaren können Sie immer beide verwenden, um Ihre Wetten abzusichern.
quelle