Friedel: <a name="xyz"> nicht mehr erlaubt, <a> (ohne href) erlaubt?

Hallo, nur um sicher zu gehen: Ich habe gerade auf https://wiki.selfhtml.org/wiki/Referenz:HTML/a gelesen, dass man a jetzt ohne href verwenden darf. Oder habe ich das falsch verstanden? in Html4 musst man ja immer <a href=""> schreiben, um einen Dummy-Link zu erzeugen.

Außerdem steht da und auch auf https://wiki.selfhtml.org/wiki/Name auch, dass das name-Attribut in Links nicht mehr erlaubt ist. Da würde mich interessieren, ob jemand eine Idee hat, warum das geändert wurde. Es wird ja weiterhin funktionieren müssen, damit Html abwärtskompatibel bleibt. Und die Auswirkungen auf ältere Javascripte, sind ja auch nicht gerade zu vernachlässigbar.

  1. Servus!

    Hallo, nur um sicher zu gehen: Ich habe gerade auf https://wiki.selfhtml.org/wiki/Referenz:HTML/a gelesen, dass man a jetzt ohne href verwenden darf. Oder habe ich das falsch verstanden? in Html4 musst man ja immer <a href=""> schreiben, um einen Dummy-Link zu erzeugen.

    So wie ich das verstanden habe, geht beides.

    (SO: https://stackoverflow.com/questions/10510191/valid-to-use-a-anchor-tag-without-href-attribute)

    Außerdem steht da und auch auf https://wiki.selfhtml.org/wiki/Name auch, dass das name-Attribut in Links nicht mehr erlaubt ist. Da würde mich interessieren, ob jemand eine Idee hat, warum das geändert wurde.

    Ganz früher gab es zwei Arten Verweise/Anker:

    1. Der auf den gezeigt wurde <a name="irgendwas">
    2. Der der dorthin verlinkt hat: <a href="#rgendwas">

    Der erste Fall führte zu

    <h2>
      <a name="heading2">
        Überschrift
      </a>
    </h2>
    

    was ja durch <h2 id="heading2">Überschrift</h2>viel einfacher geschrieben werden kann.

    Es wird ja weiterhin funktionieren müssen, damit Html abwärtskompatibel bleibt. Und die Auswirkungen auf ältere Javascripte, sind ja auch nicht gerade zu vernachlässigbar.

    Ja, lassen kann man es. Wenn man eine Seite überarbeitet, wäre es aber gut, wenn man auf <a name="">verzichtet

    PS: Ich freue mich schon, dich auf dem SELF-Treffen kennenzulernen!

    Herzliche Grüße

    Matthias Scharwies

    --
    Einfach mal was von der ToDo-Liste auf die Was-Solls-Liste setzen.“
    1. Ja, lassen kann man es. Wenn man eine Seite überarbeitet, wäre es aber gut, wenn man auf <a name="">verzichtet

      Ja. Bisher habe ich das beim Überarbeiten nie geändert. Natürlich ist <h2><a name als Sprungziel unpraktischer als <h2 id. Aber wenn es schon seit 20 Jahren in der Vorlage steht, die man gerade kopiert …

      PS: Ich freue mich schon, dich auf dem SELF-Treffen kennenzulernen!

      Das geht mir bei mehreren Leuten — dich eingeschlossen — so, die ich bisher nur vom Lesen kenne.

  2. Schönen Feierabend,

    nur um sicher zu gehen: Ich habe gerade auf https://wiki.selfhtml.org/wiki/Referenz:HTML/a gelesen, dass man a jetzt ohne href verwenden darf.

    meines Wissens war ein a-Element ohne href schon immer erlaubt, aber noch nie wirklich sinnvoll.

    in Html4 musst man ja immer <a href=""> schreiben, um einen Dummy-Link zu erzeugen.

    Einen Link, der auf die aktuelle Seite verweist. Wozu das?

    Außerdem steht da und auch auf https://wiki.selfhtml.org/wiki/Name auch, dass das name-Attribut in Links nicht mehr erlaubt ist.

    Das wäre mir allerdings neu. Ich vermute, dass <a> da nur vergessen wurde, weil's eben keinen (semantischen) Sinn egibt.

    Da würde mich interessieren, ob jemand eine Idee hat, warum das geändert wurde. Es wird ja weiterhin funktionieren müssen, damit Html abwärtskompatibel bleibt. Und die Auswirkungen auf ältere Javascripte, sind ja auch nicht gerade zu vernachlässigbar.

    Eben. HTML5 ist ja überall darauf bedacht, abwärtskopatible zu bleiben.

    Live long and pros healthy,
     Martin

    --
    Home is where my beer is.
    1. Einen Link, der auf die aktuelle Seite verweist. Wozu das?

      Ich habe schon oft Scripte geschrieben, die Verweisziele verändert haben. Und dabei kann es dann auch passieren, dass dann auch Links ohne Ziel entstehen. Bis vor einiger Zeit haben die Validatoren Fehler ausgegeben, wenn das Attribut href gefehlt hat. Aber href darf, im Gegensatz zu name, leer sein.

      Außerdem steht da und auch auf https://wiki.selfhtml.org/wiki/Name auch, dass das name-Attribut in Links nicht mehr erlaubt ist.

      Das wäre mir allerdings neu. Ich vermute, dass <a> da nur vergessen wurde, weil's eben keinen (semantischen) Sinn egibt.

      Nein, offensichtlich wurde es nicht vergessen. In der Spezifikation ist es nicht mehr drin. (https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element). Es ist auch bei Universalattributen nicht mehr aufgezählt. Und wenn beim name-Attribut vergessen worden wäre, dass es in a erlaubt ist, und beim a-Element das name-Attribut vergessen worden wäre, wäre das zusammen mit dem Fehlen bei den Universalattributen schon ziemlich viel.

      1. Hallo Friedel,

        das name-Attribut des a Elements ist obsolete, but conforming. D.h. ein Konformitätschecker wirft eine Warnung aus.

        Ich sehe das so, dass deswegen das das name-Attribut aber nicht verboten ist. Dafür müsste es non-conforming sein oder als deprecated (missbilligt) bezeichnet werden. Ist es aber nicht - lediglich sein Existenzzweck wurde ihm entzogen. Wie Matthias schon schrieb, diente <a name="..."> dem Zweck, ein internes Verweisziel für URLs mit Fragment-Anteil (#foo) zu setzen. Diese Aufgabe wird in HTML 5 vom id-Attribut übernommen, das auf jedem Element stehen kann.

        Rolf

        --
        sumpsi - posui - obstruxi
        1. @@Rolf B

          Ich sehe das so, dass deswegen das das name-Attribut aber nicht verboten ist. Dafür müsste es non-conforming sein oder als deprecated (missbilligt) bezeichnet werden. Ist es aber nicht - lediglich sein Existenzzweck wurde ihm entzogen.

          ??

          Das ließt sich so, als würden Browser keine Sprünge zu <a name=""> mehr machen würden.

          Das glaube ich nicht. Abwärtskompatibilität wurde ja schon angesprochen.

          Wie Matthias schon schrieb, diente <a name="..."> dem Zweck, ein internes Verweisziel für URLs mit Fragment-Anteil (#foo) zu setzen. Diese Aufgabe wird in HTML 5 vom id-Attribut übernommen, das auf jedem Element stehen kann.

          Diese Aufgabe wurde auch schon in HTML 4 vom id-Attribut übernommen.

          😷 LLAP

          --
          „Sag mir, wie Du Deine Maske trägst, und ich sage Dir, ob Du ein Idiot bist.“ —@Ann_Waeltin
          1. Hallo Gunnar,

            Das ließt sich so

            So warß aber nicht gemeint.

            Diese Aufgabe wurde auch schon in HTML 4 vom id-Attribut übernommen.

            Gut, ich bin kein HTMListoriker. Warum hat <a name="..."> dann jemals existiert? Gab es eine HTML Version, wo ids noch nicht als Fragment-Sprungziel dienen konnten?

            Rolf

            --
            sumpsi - posui - obstruxi
            1. @@Rolf B

              Gut, ich bin kein HTMListoriker. Warum hat <a name="..."> dann jemals existiert? Gab es eine HTML Version, wo ids noch nicht als Fragment-Sprungziel dienen konnten?

              Das ist doch nicht so schwer rauszufinden, dass es ids in HTML 3.2 noch nicht gab.

              😷 LLAP

              --
              „Sag mir, wie Du Deine Maske trägst, und ich sage Dir, ob Du ein Idiot bist.“ —@Ann_Waeltin
              1. Hallo Gunnar,

                je nachdem, wo man ist und womit man eigentlich beschäftigt ist, schon 😉

                Danke für die Auskunft.

                Rolf

                --
                sumpsi - posui - obstruxi
    2. Hallo Der Martin,

      meines Wissens war ein a-Element ohne href schon immer erlaubt, aber noch nie wirklich sinnvoll.

      in Html4 musst man ja immer <a href=""> schreiben, um einen Dummy-Link zu erzeugen.

      Einen Link, der auf die aktuelle Seite verweist. Wozu das?

      Ein a-Element ohne href-Attribut ist kein Link.

      Wenn man mit einer Programmiersprache eine Liste von Links erzeugt, kann man, da man nicht auf die aktuelle Seite verlinken möchte, einfach das href-Attribut weglassen.

      Bis demnächst
      Matthias

      --
      Du kannst das Projekt SELFHTML unterstützen,
      indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
      1. Hallo Matthias,

        in Html4 musst man ja immer <a href=""> schreiben, um einen Dummy-Link zu erzeugen.

        Einen Link, der auf die aktuelle Seite verweist. Wozu das?

        Ein a-Element ohne href-Attribut ist kein Link.

        aber ein a-Element mit einem leeren href-Attribut ist ein Link. Technisch jedenfalls.

        Wenn man mit einer Programmiersprache eine Liste von Links erzeugt, kann man, da man nicht auf die aktuelle Seite verlinken möchte, einfach das href-Attribut weglassen.

        Ja. Aber ein fehlendes und ein leeres href-Attribut sind zwei verschiedene Dinge.

        Live long and pros healthy,
         Martin

        --
        Home is where my beer is.
        1. Hallo Der Martin,

          Hallo Matthias,

          in Html4 musst man ja immer <a href=""> schreiben, um einen Dummy-Link zu erzeugen.

          Einen Link, der auf die aktuelle Seite verweist. Wozu das?

          Ein a-Element ohne href-Attribut ist kein Link.

          aber ein a-Element mit einem leeren href-Attribut ist ein Link. Technisch jedenfalls.

          Ja. Ich hätte anders zitieren sollen:

          meines Wissens war ein a-Element ohne href schon immer erlaubt, aber noch nie wirklich sinnvoll.

          Darauf habe ich mich bezogen.

          Bis demnächst
          Matthias

          --
          Du kannst das Projekt SELFHTML unterstützen,
          indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
    3. @@Der Martin

      meines Wissens war ein a-Element ohne href schon immer erlaubt, aber noch nie wirklich sinnvoll.

      Doch, sinnvoll. Genau in dem Sinne, die ihm HTML gibt: “a placeholder for where a link might otherwise have been placed, if it had been relevant, consisting of just the element's contents.”

      <li>
        <a
      <?php if (!$currentPage): ?>
          href="https://example.net/seite3"
      <?php endif; ?>
        >
          Seite 3
        </a>
      </li>
      
      

      ist einfacher geschrieben als

      <li>
      <?php if (!$currentPage): ?>
        <a href="https://example.net/seite3">
      <?php else: ?>
        <span>
      <?php endif; ?>
          Seite 3
      <?php if (!$currentPage): ?>
        </a>
      <?php else: ?>
        </span>
      <?php endif; ?>
      </li>
      

      Und auch mit clientseitigem JavaScript ist ein href-Attribut viel einfacher entfernt als ein Elementtyp geändert (neues Element generieren, Inhalt kopieren, altes Element löschen).

      😷 LLAP

      --
      „Sag mir, wie Du Deine Maske trägst, und ich sage Dir, ob Du ein Idiot bist.“ —@Ann_Waeltin
  3. @@Friedel

    nur um sicher zu gehen: Ich habe gerade auf https://wiki.selfhtml.org/wiki/Referenz:HTML/a gelesen

    Um sicher zu gehen hilft nur ein Blick in die Spezifikation; nicht in Quellen, die diese mehr oder weniger richtig wiedergeben.

    dass man a jetzt ohne href verwenden darf. Oder habe ich das falsch verstanden? in Html4 musst man ja immer <a href=""> schreiben, um einen Dummy-Link zu erzeugen.

    Nein. HTML 4 erlaubte <a href=""> und <a name="">. HTML 4 war durch eine Grammatik in Form einer DTD definiert. Da gab es die Möglichkeit zu sagen, dass ein Attribut Pflicht oder optional ist. Es gab aber keine Möglichkeit zu sagen, dass entweder das eine oder das andere Attribut gesetzt sein muss. Folglich war <a> ohne Attribut in HTML 4 erlaubt.

    Und <a> ist was ganz anderes als <a href="">: erstes ist kein Link, zweites ist ein Link zur aktuellen Seite.

    Außerdem steht da und auch auf https://wiki.selfhtml.org/wiki/Name auch, dass das name-Attribut in Links nicht mehr erlaubt ist.

    Das halte ich für einen Fehler im Wiki. Um sicher zu gehen hilft nur ein Blick in die Spezifikation … aber das sagte ich ja schon.

    Da würde mich interessieren, ob jemand eine Idee hat, warum das geändert wurde.

    <a name=""> ist unnötig. Dafür ist das id-Attribut da.

    Es wird ja weiterhin funktionieren müssen, damit Html abwärtskompatibel bleibt.

    Ja. Aber verlass dich nicht drauf. Es gibt einige Altlasten, deren Browser sich bereits entledigt haben und nicht mehr unterstützen.

    😷 LLAP

    --
    „Sag mir, wie Du Deine Maske trägst, und ich sage Dir, ob Du ein Idiot bist.“ —@Ann_Waeltin