Hanjo: <a name .... Was ist falsch

Moin auch,

ich versuche eine Seite W3C-konform zu machen.
Nun scheint der Validator eine Sache nicht zu fressen, und ich versteh - trotz Nachschlagen der Dokumente - nicht, was falsch ist und wie es anders sein sollte.

Quelltext:

10: <meta name="Content-Language" content="de">
  11:
  12: <title>Hanjo Grüßner</title>
  13:
  14: <link rel="stylesheet" type="text/css" href="/styles/standard.css" >
  15: </head>
  16:
  17: <body>
  18:
  19: <a name="#Top">
  20:
  21:
  22: <table border="0" cellpadding="0" cellspacing="0" width="700"align="center">

Der Validator bemängelt:
   1.  Line 22, column 75:  document type does not allow element "TABLE" here; missing one of "APPLET", "OBJECT", "MAP", "IFRAME", "BUTTON" start-tag

... cellspacing="0" width="700"align="center">

Und immer weiter:
65: <td onMouseOver="this.bgColor='#FFFFFF';" onMouseOut="this.bgColor='#CCCCCC';"> <a class="basemenu" href="/angebote/index.html">Angebote</a></td>

Und er meint:

Line 65, column 132:  document type does not allow element "A" here  (explain...).

...basemenu" href="/angebote/index.html">Angebote</a></td>

Dieses wiederholt.

Was ist falsch ?

Wie wäre es richtig ?

Wer nimmt mir die Tomaten von den Augen ?

Gruß von der Ostsee

Hanjo

  1. Hallo,

    Wer nimmt mir die Tomaten von den Augen ?

    Du hast einfach das schliessende </a> Tag vergessen.

    => Du versuchst, eine Tabelle in einen Link zu packen.
    <a><table> ... </table></a>
    Das ist verboten.
    A ist ein Inline-Element, TABLE ein Block-Level-Element.

    Die zweite Fehlermeldung kommt davon,
    dass er meint, dass Du ein zweites A
    im ersten verschachteln willst.

    Unter XHTML darf <a> uebrigens nicht direkt
    Kind von <body> sein - nur Block-Level-Elemente
    duerfen direkt Kind von <body> sein.

    Auch unter HTML waere es besserer Stil, sich
    daran zu halten.
    Mach den Anker einfach oben links in die erste
    Zelle der Tabelle. Und schliess ihn!

    Gruesse,

    Thomas

    1. Hi,

      Unter XHTML darf <a> uebrigens nicht direkt
      Kind von <body> sein - nur Block-Level-Elemente
      duerfen direkt Kind von <body> sein.

      Du verwechselst den Unterschied von strict zu transitional mit dem von XHTML1.0 zu HTML 4.01.

      Bei strict dürfen inline-Elemente nicht in body stehen, bei transitional schon.
      Und zwar unabhängig vom X.

      aus der XHTML 1.0 transitional - DTD:

      <!ELEMENT body %Flow;>
      und
      <!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*">

      aus der HTML 4.01 strict - DTD:

      <!ELEMENT BODY O O (%block;|SCRIPT)+ +(INS|DEL) -- document body -->

      cu,
      Andreas

      --
      MudGuard? Siehe http://www.mud-guard.de/
      1. Hallo Andreas,

        Du verwechselst den Unterschied von strict zu transitional mit dem von XHTML1.0 zu HTML 4.01.
        Bei strict dürfen inline-Elemente nicht in body stehen, bei transitional schon.

        Danke fuer die Berichtigung.
        (Inkl. Quellenangabe - ich haette Dir auch so geglaubt...)

        Gleich nach dem Abschicken war ich mir nicht mehr sicher,
        ob ich nicht genau diese Dinge verwechselt hatte ;-)

        Du bist hoffentlich mit mir einig, dass es in allen
        (X)HTML-Varianten "besserer Stil" ist, saemtlichen
        Content in Block-Level-Elementen verpackt zu haben.
        (Das duerfte vermutlich auch die CSS-Gestaltung
        einfacher und robuster machen.)

        Freundliche Gruesse,

        Thomas

        1. Hi,

          Du bist hoffentlich mit mir einig, dass es in allen
          (X)HTML-Varianten "besserer Stil" ist, saemtlichen
          Content in Block-Level-Elementen verpackt zu haben.
          (Das duerfte vermutlich auch die CSS-Gestaltung
          einfacher und robuster machen.)

          Es gibt für mich so gut wie keinen Grund, transitional zu benutzen.
          Also bau ich meine Seiten immer nach strict auf. Insofern stellt sich mir die Stil-Frage gar nicht. Aber ja, es ist m.E. sinnvoller, als direkte Kinder des body nur Blöcke zu haben.

          Die wenigen Fälle, wo dann doch mal ein applet benutzt wird (ist dienstlich der Fall), wird erst die Seite nach strict gebaut und zum Schluß das Applet eingebaut und der Doctype ausgetauscht...

          cu,
          Andreas

          --
          MudGuard? Siehe http://www.mud-guard.de/
  2. Hallo,

    bei <a name="#top"> musst du auch den Tag wieder schließen und etwas
    muss auch drinstehen. Probiers mal mit:

    <a name="#top"> </a>

    Ich denke, ohne weiter gelesen zu haben, dass die anderen Fehler
    Folgefehler von a name sind.

    Gruß, Björn

  3. Der Validator bemängelt:
       1.  Line 22, column 75:  document type does not allow element "TABLE" here; missing one of "APPLET", "OBJECT", "MAP", "IFRAME", "BUTTON" start-tag

    muss <a> Tag nicht abgeschlossen werden ? <a name="#" />  oder <a name="#"></a>

    Gruß
    the-FoX

    • der Fuchs im Netz -
    1. Hallo,

      muss <a> Tag nicht abgeschlossen werden ?

      Doch, richtig erkannt! :-)

      <a name="#" />

      Nein, das waere voellig illegal.
      In HTML und auch in XHTML.
      http://selfhtml.teamone.de/html/xhtml/unterschiede.htm#leere_elemente

      oder <a name="#"></a>

      Ja, das waere moeglich.
      Allerdings mit einem richtigen Ankernamen.
      (Hinweis: Nur die Links zum Anker fangen mit # an,
      die Ankernamen dagegen nicht...)

      @Bjoern: Leere Anker (wie obiges Beispiel) sind erlaubt,
      und sie funktionieren sogar mit Netscape 2.

      @TorstenA: Kann sein, dass wirklich "alle" Browser
      bei <a href="#">...</a> nach oben springen. Darauf wuerde
      ich mich nicht verlassen. Auch nicht auf den
      "impliziten" Anker "top" - <a href="#top">...</a>
      funktioniert ohne einen Anker <a name="top">...</a>
      nur in gewissen Browsern.
      Es ist also durchaus sinnvoll, explizit einen
      Anker <a name="top">...</a> am Seitenanfang zu
      plazieren, wenn man Sprunglinks dorthin machen will.

      Gruesse,

      Thomas

  4. Hallo,

    ein Anfang ist:

    Quelltext:

    10: <meta name="Content-Language" content="de">
      11:
      12: <title>Hanjo Grüßner</title>
      13:

    14: <link rel="stylesheet" type="text/css"                         href="styles/standard.css" >

    15: </head>
      17: <body>
      19: <a name="#Top">
      22: <table border="0" cellpadding="0" cellspacing="0" width="700" align="center">

    MfG

    André

    --
    ss:{ zu:} ls:? fo:| de:] va:) ch:] sh:) n4:{ rl:( br:^ js:| ie:| fl:) mo:}
    http://forum.de.selfhtml.org/archiv/2003/10/60651/#m341175
    1. Hallo.

      ein Anfang ist:

      Quelltext:
      10: <meta name="Content-Language" content="de">
        12: <title>Hanjo Grüßner</title>
      14: <link rel="stylesheet" type="text/css"                         href="styles/standard.css" >
        15: </head>
        17: <body>
        19: <a name="#Top">
        22: <table border="0" cellpadding="0" cellspacing="0" width="700" align="center">

      "Der Anfang von Ende" vielleicht? Oder sind Leerzeichen im <head> die Universallösung? Weiterhin: Kennst du http://selfhtml.teamone.de/html/allgemein/referenzieren.htm#absolut?
      MfG, at

  5. Hallo Hanjo,

    Nun scheint der Validator eine Sache nicht zu fressen, und ich versteh - trotz Nachschlagen der Dokumente - nicht, was falsch ist und wie es anders sein sollte.

    Oh, da ist mehreres falsch:

    19: <a name="#Top">

    Ein Name muss mit einem Buchstaben beginnen:
    http://www.w3.org/TR/html4/types.html#type-cdata

    Das End-Tag ist zwingend erforderlich:
    http://www.w3.org/TR/html4/struct/links.html#adef-name-A

    Dieser Fehler

    1.  Line 22, column 75:  document type does not allow element "TABLE" here; missing one of "APPLET", "OBJECT", "MAP", "IFRAME", "BUTTON" start-tag

    dürfte aus dem nicht geschlossenen A-Element resultieren.

    Line 65, column 132:  document type does not allow element "A" here  (explain...).

    Dieser wahrscheinlich auch.

    Btw, wenn du als Linkziel nur die Raute angibst, springt der Browser beim Anklicken meines Wissens nach von sich aus an den Dokumentenanfang, einen Anker "Top" brauchst du dafür nicht.

    Vielleicht hilfts
    Torsten

    1. Moin auch,

      dank dir und auch den anderen.
      Das wars!

      Gruß von der Ostsee

      Hanjo

      Das End-Tag ist zwingend erforderlich:
      http://www.w3.org/TR/html4/struct/links.html#adef-name-A

      »

    2. Hi,

      Ein Name muss mit einem Buchstaben beginnen:
      http://www.w3.org/TR/html4/types.html#type-cdata

      Und wo im CDATA ist definiert, daß ein Buchstabe am Anfang stehen muß?

      Auch wenn das Attribut name des a-Elements zufällig den Namen "name" hat, ist es KEIN ID- oder NAME-Tag, auf die im Absatz NACH dem CDATA eingegangen wird (für den auch ein Extra-Anker namens #type-name gesetzt ist: http://www.w3.org/TR/html401/types.html#type-name).

      Das name ist vom Typ CDATA. Und da dürfen beliebige Zeichendaten rein.

      Der Datentyp NAME (siehe http://www.w3.org/TR/html401/types.html#type-name) ist nur für die name und http-equiv Attribute des Meta-Elements definiert, der Datentyp ID nur für das id-Attribut (für fast alle Elemente).

      Siehe auch hier: http://validator.w3.org/check?uri=http%3A%2F%2Ftemp.andreas-waechter.de%2Ftest2.html&charset=(detect+automatically)&doctype=(detect+automatically)

      Ich hab mich da auch jahrelang täuschen lassen...

      cu,
      Andreas

      --
      MudGuard? Siehe http://www.mud-guard.de/
      1. Hallo MudGuard,

        Auch wenn das Attribut name des a-Elements zufällig den Namen "name" hat, ist es KEIN ID- oder NAME-Tag, auf die im Absatz NACH dem CDATA eingegangen wird (für den auch ein Extra-Anker namens #type-name gesetzt ist: http://www.w3.org/TR/html401/types.html#type-name) [...]

        Herrjemine, da soll sich noch mal einer über die Unverständlichkeit deutscher Gesetze aufregen, die HTML-Spezifikation steht dem an manchen Stellen in nichts nach.

        Ich hab mich da auch jahrelang täuschen lassen...

        Dank dir sind's bei mir nur ein paar Monate ;-)

        Grüße
        Torsten

  6. Moin auch,

    Abend.
    ---*schnipp*---

    Was ist falsch ?

    Das <table> innerhalb des <a>s, das <a> innerhalb des <a>s

    Wie wäre es richtig ?

    <table id="top" ...> ...
    Erklärung: Man kann nicht nur sprunglinks auf <a name=""> setzten, sondern auch auf jedes beliebige Element mit entsprechender id.

    Gruß von der Ostsee
    Hanjo

    Gruß aus Dresden,
    Max.

    1. Hallo,

      <table id="top" ...> ...
      Erklärung: Man kann nicht nur sprunglinks auf <a name=""> setzten, sondern auch auf jedes beliebige Element mit entsprechender id.

      Man kann schon.

      Das funktioniert aber nur mit einigermassen modernen Browsern.
      Netscape 4.75 kann es z.B. nicht.

      Hier - wo es um Funktionalitaet und nicht
      um optischen Schnickschnack geht - bin ich
      ueberzeugt, dass es am besten ist, auch
      die alten Browser zu beruecksichtigen
      und ihnen einen zuverlaessigen Anker
      zu geben, naemlich <a name="top"></a>.

      Wenn man Freude an IDs und XML hat,
      kann, darf und soll man in HTML 4 und
      XHTML 1.0 ja auch schreiben:
      <a name="top" id="top"></a>.
      http://www.w3.org/TR/xhtml1/#C_8

      Gruesse,

      Thomas

      1. hi,

        Erklärung: Man kann nicht nur sprunglinks auf <a name=""> setzten, sondern auch auf jedes beliebige Element mit entsprechender id.

        Man kann schon.

        Das funktioniert aber nur mit einigermassen modernen Browsern.
        Netscape 4.75 kann es z.B. nicht.

        huah ... als ob das noch ein "browser" wäre.

        Hier - wo es um Funktionalitaet und nicht
        um optischen Schnickschnack geht - bin ich
        ueberzeugt, dass es am besten ist, auch
        die alten Browser zu beruecksichtigen
        und ihnen einen zuverlaessigen Anker
        zu geben, naemlich <a name="top"></a>.

        es geht hier um eine _kleine_ zusätzliche annehmlichkeit für den benutzer, keineswegs um grundlegende funktionalität - zudem erreiche ich den effekt "springe ganz nach oben an den seitenanfang" in _jedem_ mir bekannten browser über das drücken der taste [Pos1], und zwar ganz ohne erst mit der maus irgendeinen link ansteuern zu müssen ...

        wenn diese "funktionalität" also in einem uralt-browser nicht funktioniert, ist das m.E. alles andere als ein beinbruch - und es rechtfertigt keinesfalls, auf alle ewigkeit auf modernes (x)html zu verzichten, nur um auch krücken wie den NS4 noch zu unterstützen, wenn es um solche kinkerlitzchen geht.

        btw: auch wenn dr. web hier (zu recht) nicht den allerbesten ruf geniesst - die hatten vor einiger zeit mal eine umfrage zum thema "wohin mit dem top-link".
        mehr als jeder zweite teilnehmer dieser umfrage war der meinung, dass ein top-link _überhaupt nicht_ benötigt wird.
        http://www.drweb.de/usability/toplink.shtml

        gruss,
        wahsaga

        1. Hallo wahsaga,

          Hier - wo es um Funktionalitaet [...] geht
          einen zuverlaessigen Anker
          zu geben, naemlich <a name="top"></a>.

          es geht hier um eine _kleine_ zusätzliche annehmlichkeit für den benutzer, keineswegs um grundlegende funktionalität

          Du hast Dich da sehr auf den Anker "top" eingeschossen,
          der - wie ich sehr wohl weiss - von vielen als ueberfluessig
          betrachtet wird (siehe Ende dieses Postings).

          Ich wollte aber in meinem Posting vielmehr der
          Aussage von Maximilian widersprechen, der meinte,
          dass eine ID in beliebigen HTML-Elementen ja auch
          als Sprungmarke (also als Anker-Ersatz) dienen koenne.

          Das hiesse, dass man anstelle von z.B.
          <h3><a name="kapitel3">Kapitel 3</a></h3>
          ebensogut schreiben koennte
          <h3 id="kapitel3">Kapitel 3</h3>
          um dann einen Sprunglink
          <a href="#kapitel3">Zum Kapitel 3</a>
          zu machen.

          _Dagegen_ wollte ich mich aussprechen.

          Anker _mitten in der Seite_ sind fuer
          die Funktionalitaet bei laengeren
          Dokumenten IMHO sehr wichtig.

          Und somit fuer mich ein Grund, auf
          alte Browser Ruecksicht zu nehmen.

          Ich teile Deine Einschaetzung nicht,
          dass es bei Ankern nur

          [...] um solche kinkerlitzchen geht.

          ---

          mehr als jeder zweite teilnehmer dieser umfrage war der meinung, dass ein top-link _überhaupt nicht_ benötigt wird.
          http://www.drweb.de/usability/toplink.shtml

          Danke fuer den Link.

          Jaja, die ewige Diskussion um #top...

          Ich denke, dass man mit einem "Zum Seitenanfang" Link
          niemandem etwas zuleide tut.

          Und ich denke, dass in den Foren/Newsgroups, wo dieses
          "Problem" diskutiert wird, und eben auch bei Dr. Web,
          hauptsaechlich Leute wie wir unterwegs sind, also
          Leute, die ihre Kiste ueberdurchschnittlich gut kennen
          und wissen, dass es eine "Home" Taste (.de: "Pos1")
          gibt und was diese Taste in Ihrem Browser bewirkt.

          Gruesse,

          Thomas

          1. hi,

            Du hast Dich da sehr auf den Anker "top" eingeschossen,

            ja, stimmt.

            Anker _mitten in der Seite_ sind fuer
            die Funktionalitaet bei laengeren
            Dokumenten IMHO sehr wichtig.

            stimme dir zu.

            Ich teile Deine Einschaetzung nicht,
            dass es bei Ankern nur

            [...] um solche kinkerlitzchen geht.

            war ja auch nicht auf anker allgemein bezogen, sondern auf - siehe ersten von mir zitierten satz deines postings ;-)

            gruss,
            wahsaga

          2. Ich wollte aber in meinem Posting vielmehr der
            Aussage von Maximilian widersprechen, der meinte,
            dass eine ID in beliebigen HTML-Elementen ja auch
            als Sprungmarke (also als Anker-Ersatz) dienen koenne.

            Imho ist das kein Ersatz, sondern die sinvollere Methode, "Sprungmarken" mittels IDs zu definieren, da es nicht sehr sinnvoll ist, ein zusätzliches Element als Sprungziel zu erstellen, wo man doch eigentlich dessen Vorfahr-Element ansteueren möchte

            Anker _mitten in der Seite_ sind fuer
            die Funktionalitaet bei laengeren
            Dokumenten IMHO sehr wichtig.

            Korrekt.

            Und somit fuer mich ein Grund, auf
            alte Browser Ruecksicht zu nehmen.

            Das schon, aber ich will dafür nicht Elemente benutzen, die imho überflüssig sind. Und mit so einem <a name=""> steeuert man ja nicht einmal den gesamten Bereich an, der eigentlich das Sprungziel ist...