<a name .... Was ist falsch
Hanjo
- html
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:
...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
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
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
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
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
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
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
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
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é
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
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
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
»
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
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
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.
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
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
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
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
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...