Einer unserer Webentwickler verwendet das folgende HTML als Platzhalter für die Gestaltung einer Dropdown-Liste.
<a href="" class="arrow"></a>
Ist dieses Ankertag gültig?
Da es keinen href-Wert gibt, wird er in einigen unserer Link-Checker-Berichte als fehlerhaft angezeigt.
Antworten:
Obwohl diese Frage bereits beantwortet wurde ( tl; dr: yes, ein leerer
href
Wert ist gültig), verweist keine der vorhandenen Antworten auf die relevanten Spezifikationen.Eine leere Zeichenfolge kann keine URI sein. Das
href
Attribut verwendet jedoch nicht nur URIs als Wert, sondern auch URI-Referenzen. Eine leere Zeichenfolge kann eine URI-Referenz sein.HTML 4.01
HTML 4.01 verwendet RFC 2396 , wie in Abschnitt 4.2 angegeben. Referenzen im selben Dokument (fett hervorgehoben):
RFC 2396 wird durch RFC 3986 (der derzeit der URI-Standard der IETF ist) überholt , der im Wesentlichen dasselbe sagt .
HTML5
HTML5 verwendet ( gültige URL möglicherweise von Leerzeichen umgeben → gültige URL ) die URL-Spezifikation von W3C , die eingestellt wurde. Stattdessen sollte der URL-Standard von WHATWG verwendet werden (siehe letzter Abschnitt).
HTML 5.1
HTML 5.1 verwendet ( gültige URL möglicherweise von Leerzeichen umgeben → gültige URL ) den URL-Standard von WHATWG (siehe nächster Abschnitt).
WHATWG HTML
Der HTML-Code von WHATWG verwendet ( gültige URL, die möglicherweise von Leerzeichen umgeben ist ) die Definition einer gültigen URL-Zeichenfolge aus dem URL-Standard von WHATWG , in der angegeben wird, dass es sich um eine relative URL mit Fragmentzeichenfolge handeln kann , die mindestens eine relative URL-Zeichenfolge sein muss. Dies kann eine Pfad-relative-Schema-weniger-URL-Zeichenfolge sein . Dies ist eine Pfad-relative-URL-Zeichenfolge , die nicht mit einer Schema-Zeichenfolge beginnt, gefolgt von
:
ihrer Definition (fett hervorgehoben).quelle
Es ist gültig.
Es ist jedoch üblich,
href="#"
oder manchmal zu verwendenhref="javascript:;"
.quelle
href="#"
, wird der Fokus im IE an den oberen Rand der Seite verschoben, sodass ich denke, dasshref="javascript:;"
es besser istWie andere gesagt haben, ist es gültig.
Jeder Ansatz hat jedoch einige Nachteile:
href="#"
Fügt dem Browserverlauf einen zusätzlichen Eintrag hinzu (was beim Zurückschalten ärgerlich ist).href=""
lädt die Seite neuhref="javascript:;"
scheint keine Probleme zu haben (außer unordentlich und bedeutungslos auszusehen) - kennt jemand welche?quelle
Während es möglicherweise vollständig gültiges HTML ist, kein href zu enthalten, insbesondere mit einem Onclick-Handler, sind einige Dinge zu beachten: Es kann nicht auf die Tastatur fokussiert werden, ohne dass ein Tabindex-Wert festgelegt ist. Darüber hinaus kann Screenreader-Software mit Internet Explorer nicht darauf zugreifen, da der IE über die Eingabehilfen-Schnittstellen meldet, dass jedes Ankerelement ohne href-Attribut nicht fokussierbar ist, unabhängig davon, ob der Tabindex festgelegt wurde.
Während also Folgendes vollständig gültig sein kann:
Es ist weitaus besser, explizit ein href-Attribut mit Null-Effekt hinzuzufügen
Um die volle Unterstützung aller Benutzer zu erhalten, sollten Sie, wenn Sie die Klasse mit CSS zum Rendern eines Bildes verwenden, auch Textinhalte einfügen, z. B. das title-Attribut, um eine Textbeschreibung der Vorgänge bereitzustellen.
quelle
href
die Eingabehilfen beeinträchtigt.href
Werts auf etwas anderes als einen relativen / absoluten Pfad Probleme mit dem Bildschirmleser verursacht. Vermeiden Sie die Verwendung eines Hash / Pound-Symbols als Problemumgehung für dieses Problem, da es nicht dafür gedacht ist. Bildschirmleser können (derzeit VoiceOver) Ihren Link als Fragment-ID (Link zu einer Stelle auf der aktuellen Seite ) ankündigen und sind auch unter Standardgesichtspunkten gültig. siehe w3.org/2001/tag/2011/01/HashInURI-20110115#NakedHashDer aktuelle HTML5-Entwurf ermöglicht auch das vollständige Auslassen des href-Attributs.
Um Ihre Frage zu beantworten: Ja, es ist gültig.
quelle
<a>
Element mit Neinhref
wird in einigen Browsern direkt gestaltet. Zum Beispiel funktionieren ": hover" -Stile nicht in Chrome (und anderen seltsamen Dingen)<a>
Tag ohne ein stehthref
für etwas anderes , nicht für einen Link (traditionell ein Anker). Es gibt auch einen Unterschied zwischen einem optionalen Attribut und einem Attribut, das leer sein kann.In der Tat können Sie es leer lassen (W3-Validator beschwert sich nicht).
Gehen Sie noch einen Schritt weiter: Lassen Sie das = "" weg. Dies hat den Vorteil, dass der Link nicht als Anker für die aktuelle Seite behandelt wird.
quelle
<a href></a>
→ Attribut href ohne expliziten Wert gesehen. Das Attribut kann von IE7 gelöscht werden.Während sich der Validator von W3 möglicherweise nicht über ein leeres
href
Attribut beschwert , gibt der aktuelle HTML5-Arbeitsentwurf Folgendes an:Eine gültige URL ist eine URL, die dem URL-Standard entspricht . Jetzt ist der URL-Standard etwas verwirrend, um sich zurechtzufinden. Nirgendwo heißt es jedoch, dass eine URL eine leere Zeichenfolge sein kann.
... was bedeutet, dass eine leere Zeichenfolge keine gültige URL ist.
Im HTML5-Arbeitsentwurf heißt es jedoch weiter:
Dies bedeutet, dass wir das
href
Attribut einfach ganz weglassen können :Wenn Ihre Absicht ist , dass diese
href
-wenigera
Elemente noch Tastatur interraction benötigen sollten, werden Sie die normale Route von einer Zuordnung nach unten gehen müssenrole
undtabindex
neben Ihrem üblichen Klick / keydown Handler:quelle
href
nicht um einen Hyperlink, wodurch dieonclick
Funktionalität für Tastaturbenutzer unzugänglich wird.Ein Wort der Vorsicht:
Nach meiner Erfahrung führt das Weglassen des
href
Attributs zu Problemen bei der Barrierefreiheit, da die Tastaturnavigation es ignoriert und es niemals so fokussiert, wie es der Fall ist, wenn href vorhanden ist. Das manuelle Einfügen Ihres Elements in den Tabindex ist ein Weg, um dies zu umgehen.quelle
Es ist gültig, aber wie UpTheCreek sagte: "Jeder Ansatz hat einige Nachteile."
Wenn Sie Ajax über ein Tag aufrufen, lassen Sie das href = "" wie folgt, damit die Seite neu geladen wird und der Ajax-Code niemals aufgerufen wird ...
Ich habe gerade diesen Gedanken bekommen, wäre gut zu teilen
quelle
Versuchen Sie es
<a href="#" class="arrow">
stattdessen. (Beachten Sie das scharfe#
Zeichen).quelle