GE.ORG: Notation von Textankern

Hi!

Da die Frage der XHTML-Konformität von leeren Tags sehr bedeutend ist, stellt sich bei mir eine neue Frage:

Macht es einen Unterschied, ob ich Anker so notiere:

<a name="ankername">Text</a>

Oder so:

<a name="ankername"></a>Text

Beide Arten funktionieren ja ... aber gibt es vielleicht Bedenken in Bezug auf W3C-Konformität? ... oder ist die Frage überflüssig? :-)

Schönen Tag,

GE.ORG

  1. Hallo Georg,

    Macht es einen Unterschied, ob ich Anker so notiere:
    <a name="ankername">Text</a>
    Oder so:
    <a name="ankername"></a>Text

    Die DTD von XHTML 1.0 äußert sich nicht dazu, auch der Standard nicht.
    Es ist also erlaubt, aber im Sinne einer Auszeichnungssprache unschön.

    Beide Arten funktionieren ja ... aber gibt es vielleicht Bedenken in Bezug
    auf W3C-Konformität?

    Gibt es. Aber aus einer ganz anderen Richtung, als Du denkst.

    Für das Anspringen bestimmter Teile eines Dokumentes mit »#beispiel« ist
    im Zuge der XMLisierung von HTML nicht mehr das Attribut »name« im Element
    »a« sondern das Attribut »id«, das in praktisch jedem Element verfügbar
    ist, vorgesehen.

    Im XHTML 1.0 Standard heißt es ganz genau:
      »In order to ensure that XHTML 1.0 documents are well-structured XML
      documents, XHTML 1.0 documents MUST use the id attribute when defining
      fragment identifiers on the elements listed above.«
      (http://www.w3.org/TR/xhtml1/#h-4.10)

    Und in der Modularisierung von XHTML bzw. XHTML 1.1 gibt es das Attribut
    »name« nicht mehr. D.h. Du solltest in XHTML immer id einsetzen. Einen
    Vorteil hast Du dadurch: Du kannst dieses Attribut in praktisch jedem
    Element, von h1 über p bis div einsetzen und diese direkt anspringen,
    mußt also nicht mehr mit dem a-Element rumhantieren.

    Bei älteren Browsern geht das eventuell nicht, die wollen dann name.
    Dann kannst Du beide Attribute im a-Element einsetzen, wie es auch
    die HTML Kompabilitätsrichtlinien des XHTML 1.0 Standard empfehlen.

    http://www.w3.org/TR/xhtml1/#C_8

    (Vorsicht: Nur in XHTML 1.0, nicht mehr in XHTML 1.1! Ich habe mit diesem
    Thema mal eine Stunde meines Lebenszeit verschwendet.)

    Tim

    1. Hi Tim!

      Danke für die wiedermal rasche & ausführliche Antwort!
      Die id/name-Thematik in Bezug auf XHTML ist mir bekannt, also muss ich nun leider Dein Zitat wiederholen: "Ich habe mit diesem
      Thema mal eine Stunde meines Lebenszeit verschwendet." -- nur hoffentlich war es diesmal keine Stunde, sondern nur ein paar Minuten! ... ODER aber, diese Antwort konnte anderen helfen und sie auf dieses Thema sensibilisieren! ;-)

      Vielen Dank jedoch für Dein Reply!

      Schönen Tag noch ... aber vielleicht fallen mir ja heute doch noch ein paar Fargen ein? *g*

      LG,

      GE.ORG

    2. Hi,

      Vorteil hast Du dadurch: Du kannst dieses Attribut in praktisch jedem
      Element, von h1 über p bis div einsetzen und diese direkt anspringen,

      das hatte ich zuerst auch gedacht... inzwischen nutze ich hierzu aber nur noch kurze absätze oder überschriften.
      wenn ich nämlich ein (durch viel inhalt) recht hohes div anspringe, scrollt mozilla die seite so weit, bis das _ende_ des divs am unteren rand angezeigt wird...

      freundliche Grüße
      Ingo

      1. Hallo Ingo,

        wenn ich nämlich ein (durch viel inhalt) recht hohes div anspringe, scrollt
        mozilla die seite so weit, bis das _ende_ des divs am unteren rand angezeigt
        wird...

        Diese Erfahrung habe ich in meinen diversen Mozillen noch nicht gemacht. Da
        wird so gesprungen, daß die obere Kante der Elementbox mit dem Anker oben
        im Viewport ist. Ausnahme natürlich, wenn die Seite zu Ende ist.

        Um was für eine Mozillaversion handelt es sich denn hier?

        Tim

        1. Hi,

          Um was für eine Mozillaversion handelt es sich denn hier?

          Mozilla 1.4b Mozilla/5.0 (Windows; U; Windows NT 5.1; de-AT; rv:1.4b) Gecko/20030507

          vielleicht liegt's aber daran, daß es floatende divs sind?
          freundliche Grüße
          Ingo

  2. Macht es einen Unterschied, ob ich Anker so notiere:

    <a name="ankername">Text</a>

    Oder so:

    <a name="ankername"></a>Text

    hi GE.ORG,

    ja macht es, ältere Browser ignorieren gern mal einen Verweis zu einem leeren Anker.

    mfg. YLT

    1. ja macht es, ältere Browser ignorieren gern mal einen Verweis zu einem leeren Anker.

      Hi YLT,

      Etwas philosophische Frage:

      "Ist ' ' ein Inhalt oder nicht, also wäre der Anker dann leer?" :-)

      greetingz,
      GE.ORG

      1. "Ist ' ' ein Inhalt oder nicht, also wäre der Anker dann leer?" :-)

        hi GE.ORG,

        da würd ich mal behaupten ja, ist ein Inhalt, wie es die benannten Browser sehen, weiss ich allerdings nicht.

        mfg. YLT

      2. hi,

        Etwas philosophische Frage:
        "Ist ' ' ein Inhalt oder nicht, also wäre der Anker dann leer?" :-)

        es ist ein inhalt; ein element welches ein   enthält ist defintiv _nicht_ leer.

        gruss,
        wahsaga

    2. Hallo,

      <a name="ankername"></a>Text
      ja macht es, ältere Browser ignorieren gern mal einen Verweis zu einem leeren Anker.

      Das ist ein uraltes Geruecht bzw. ein alter Aberglaube,
      das offenbar immernoch weit verbreitet ist.
      Tatsache ist: Selbst Netscape 2.02 (aus dem Jahr 1995!)
      kommt mit leeren Ankern zurecht.

      Wegen dem unerwuenschten Hover-Effekt bei Ankern
      schreibe ich meine Anker konsequent leer.

      Es gibt aber auch ein paar CSS-Ansaetze, um diesen Effekt zu
      verhindern, z.B.

      a:link:hover, a:visited:hover { }
      statt
      a:hover { }

      Gruesse,

      Thomas

      1. a:link:hover, a:visited:hover { }
        statt
        a:hover { }

        Wie genau funktioniert der Ansatz?

        1. Hallo,

          Wie genau funktioniert der Ansatz?

          Oft schreibt man die Angaben fuer das A-Element so:

          a:link {}
          a:visited {}
          a:hover {}
          a:focus {}
          a:active {}

          und moechte eigentlich nur die Links damit formatieren,
          nicht aber die (reinen) Anker.
          Mozilla wendet dann aber die Angaben in a:hover (korrekterweise!)
          auch fuer einen reinen Anker an, d.h. wenn man z.B. mit der
          Maus ueber dieses Element geht:
          <h3><a name="thema2">Zwischentitel</a></h3>
          kriegt der Text voruebergehend das Aussehen,
          das man fuer Links vorgesehen hat.
          Das ist der "nervige Hover-Effekt", der fuer die
          Benutzer ziemlich verwirrend sein kann (sie klicken
          dann auf den Text, aber nichts passiert).

          Um diesen Effekt zu vermeiden, kann man entweder
          die Anker "leer" machen:
          <h3><a name="thema2"></a>Zwischentitel</h3>

          Oder man schreibt das CSS um, z.B. eben so:

          a:link {}
          a:visited {}
          a:link:hover, a:visited:hover {}
          a:focus {}
          a:active {}

          Ich hoffe, das war verstaendlich.

          Gruesse,

          Thomas

      2. hi Thomas,

        Das ist ein uraltes Geruecht bzw. ein alter Aberglaube,
        das offenbar immernoch weit verbreitet ist.
        Tatsache ist: Selbst Netscape 2.02 (aus dem Jahr 1995!)
        kommt mit leeren Ankern zurecht.

        Welche älteren Browser hast du denn alle getestet ??? Ein Gegenbeispiel entkräftet einige nicht. Dieser alte "Aberglaube" wird übr. auch von Selfhtml dann gefördert ;-).

        Wegen dem unerwuenschten Hover-Effekt bei Ankern
        schreibe ich meine Anker konsequent leer.

        Welcher Hover-Effekt ??? Dies ist mir neu und hab ich noch nie gesehen.

        mfg. YLT

        1. Hallo YLT,

          Welcher Hover-Effekt ??? Dies ist mir neu und hab ich noch nie gesehen.

          In CSS wird häufig der Selektor a:hover gebraucht. Dieser wirkt auf
          a-Elemente, wenn der Mauszeiger darüber schwebt. Eigentlich meint
          man dieses meist nur für Links, also a-Elemente mit einem href-Attribut.
          Das Pseudoelement :hover läßt sich jedoch auf so ziemlich jedes beliebige
          Element anwenden, also auch auf a-Elemente, die kein Link sondern ein
          Anker sind. Neuere Browser (also nicht der IE) zeigen dieses auch brav
          an. Dies ist der unerwünschte Hover-Effekt bei Ankern.

          Man will natürlich diesen Hover-Effekt nur bei a-Elementen, die auch
          ein Link sind anwenden. Thomas' Variante, nämlich der Selektor a:link:hover
          ist eine Methode. Eine andere ist der attributbedingte Selektor a[href]:hover,
          der nur auf a-Elemente, die auch das Attribut href besitzen, wirkt.
          Dummerweise verstehen ältere Browser wie z.B. der IE diesen Selektor nicht,
          für diese müßte man wieder mit a:hover und der Ausnutzung bestimmter
          browserspezifischer Bugs rumhantieren. Und das ist ziemlich lästig.

          Mit id als fragment identifier wäre das nicht passiert. ;-)

          Tim

          1. hi Tim,

            dann hab ich eben erst Mist gepostet *g*. Bei welchen Browsern tritt dieser Effekt denn genau auf, hät gern ein Beispiel, damit ich weiss mit welchen Browser ich testen sollte.

            mfg. YLT

            1. Hallo,

              Bei welchen Browsern tritt dieser Effekt denn genau auf, hät gern ein Beispiel, damit ich weiss mit welchen Browser ich testen sollte.

              Bei Geckos, also bei Mozilla, Netscape 6/7 u.s.w.
              Die koennen :hover auf beliebige Elemente anwenden, also auch
              auf Tabellenzellen ( td:hover {}) u.s.w.
              (So wie es eben in der Spec. vorgesehen ist...)

              Eine (etwas alte) Seite von mir zu Thema "Anker":
              http://www.tiptom.ch/tests/css/a_name.html

              Ich muss die Seite bei Gelegenheit noch um die
              a:link:hover, a:visited:hover {}
              Variante und die uebrigen im Thread genannten
              Methoden ergaenzen...

              Gruesse,

              Thomas

              1. hi Thomas,

                danke fein, werd wohl Mozilla in meine Testliste aufnehmen.

                mfg. YLT

  3. Hallo,

    Mit html will man ja Text auszeichnen. Mit einem Anker willst Du ja eine Stelle makieren, auf die gesprungen werden soll. Du musst Dir also überlegen, auf welche Stelle Du springen willst. Nach meiner Auffassung sollte das ein repräsentativer Text sein, etwa eine Überschrift. Daher müsste man wenn man es sauber machen will, einen Text anspringen.

    Weitere Probleme haben YoLaTengo und Tim ja angesprochen.

    Heiner

  4. Hallo,

    <a name="ankername">Text</a>

    Oder so:

    <a name="ankername"></a>Text

    Das Problem bei der ersten Variante ist aber, dass mir dann der Text so wie ein Link formatiert wird. Wie muss ich eine Klasse anker (habt Ihr einen griffigeren Namen, z. B. auf Englisch?) gestalten, damit ich das umgehe, bzw. gibt es eine andere Lösung zur Vermeidung?

    Guillermo

    1. Wie muss ich eine Klasse anker (habt Ihr einen griffigeren Namen, z. B. auf Englisch?)

      Wie wär's mit "anchor"?
      Und genau das von Dir, Guillermo, angesprochen Problem hat mich eben dazu veranlasst, den Tag <a name=""></a> *vor* den Text zu ziehen, da dadurch die Formatierung von 'a' genommen wurde!

      GE.ORG

    2. hi,

      Das Problem bei der ersten Variante ist aber, dass mir dann der Text so wie ein Link formatiert wird. Wie muss ich eine Klasse anker (habt Ihr einen griffigeren Namen, z. B. auf Englisch?) gestalten, damit ich das umgehe, bzw. gibt es eine andere Lösung zur Vermeidung?

      wenn du eine klasse verwendest, dann musst du in dieser halt alle eigenschaften, die einen link bei dir als solchen kennzeichnen, durch (standard-)werte überschreiben.
      also text-decoration:none z.b.

      statt einer klasse würde sich allerdings m.e. ein attribut-selektor viel eher anbieten, der von vorneherein nur die links formatiert, die ein href-attribut haben.
      (leider gibt's da einen browser, der dafür zu blöd ist ...)

      gruss,
      wahsaga

    3. hi Guillermo,

      durch Pseudoformate tritt dieses erst gar nicht auf, nutz ich gern und mir war dieses Problem nicht einmal bekannt ;-), ansonsten siehe wahsaga.

      mfg. YLT