Doctype

Hallo Experten,

nach W3C ist es ja notwendig, an den Beginn eines HTML-Dokuments die DOCTYPE-Definition zu stellen, die „dem HTML-Code entspricht, den man verwendet“. Auch nach dem Lesen der W3C-Seite ist mir noch nicht ganz klar, wozu man den braucht und wie man den DOCTYPE richtig deklariert.

Wie finde ich heraus, welche DOCTYPE-Deklaration die für mich passende ist?

Zum Beispiel wird eine Seite (X-HTML und CSS) ordungsgemäß angezeigt. Sobald ich jedoch eine DOCTYPE-Deklaration einfüge, sind einige Formatierungen verschoben.

Wie würdet Ihr vorgehen? Eine Deklaration z.B.

XHTML 1.1 - DTD:

auswählen und dann so lange am Code rumbasteln, bis die Seite wieder korrekt angezeigt wird?

Viele Grüße,
Andreas

Hallo,

Wie finde ich heraus, welche DOCTYPE-Deklaration die für mich
passende ist?

such dir eine aus :smile:
Manche Webdesigner betrachten HTML 4.01 als „alt“, während XHTML 1.0 Strict und aufwärts häufig einen „moderneren“ Touch hat. Letzlich ist aber, solange der Doctype wenigstens vorhanden ist, auch 4.01 in Ordnung.

auswählen und dann so lange am Code rumbasteln, bis die Seite
wieder korrekt angezeigt wird?

Nimm die, die am wenigsten verändert, und mach das dann so.

Normalerweise kommt das allerdings nicht vor, weil man sich zuerst den Doctype überlegt und dann erst anfängt, zu schreiben.

mfg
MB

DOCTYPE als HTML-Qualitätssiegel
Hallo Andreas.

nach dem Lesen der W3C-Seite ist mir noch nicht ganz klar,
wozu man den braucht

Es hilft, sich in die Lage des Webbrowsers zu versetzen:
Mit dem DOCTYPE gibst Du ihm das Versprechen, dass er
das nachfolgende HTML nach klaren Regeln einlesen und
interpretieren kann
.

Das vereinfacht für den Webbrowser die Arbeit und
verhindert, dass die Darstellung der Seite aufgrund
von falsch geschriebenem HTML fehlerhaft oder
unvollständig ist.

Findet ein Browser nämlich keine DOCTYPE-Deklaration
oder ist das HTML fehlerhaft, schaltet er automatisch
in den berüchtigten „Quirk-Modus“. In diesem Modus
versucht der Browser das fehlerhafte HTML so gut es
geht noch vernünftig darzustellen.

Da die Fehlerbehandlung aber nicht in einem Standard
festgelegt wurde, macht das jeder Browser anders, so
dass die Seite in den verschiedenen Browsern
teilweise sehr unterschiedlich aussehen wird.

… und wie man den DOCTYPE richtig deklariert.

Siehe die Übersicht unter:

http://www.webstandards.org/learn/reference/charts/d…

Beachte auch, in welchen Fällen die Browser in den
Quirk-Modus wechseln (mit Q gekennzeichnet).

Wie würdet Ihr vorgehen? Eine Deklaration z.B.
auswählen und dann so lange am Code rumbasteln, bis die Seite
wieder korrekt angezeigt wird?

Das regelkonforme Schreiben von HTML nach einem DOCTYPE
hat einen Preis: Du musst die Regeln kennen.

Wenn Du damit also nicht viel Zeit investieren willst,
mach es wie die 90% aller anderen Webseitenautoren
und lass den Browser das nicht-regelkonforme HTML
irgendwie darstellen mit dem Problem, dass die Seite
in anderen, von Dir nicht getesteten Browsern vielleicht
gar nicht dargestellt wird.

Wenn Dich dagegen der Ehrgeiz packt, gutes HTML zu schreiben
und Du Webbrowser und Besucher Deiner Webseiten nicht quälen
möchtest:

(a) lerne die HTML-Regeln mit einem guten Buch, einer Webseite
wie SelfHTML und durch Blick in die Standards unter
http://www.w3.org/MarkUp/

(b) lass Deine Seite von einem so genannten Validierer
überprüfen. Das ist ein Programm, welches Dein HTML sowie CSS
auf die Einhaltung der Regeln testet und Dir alle
fehlerhaften Stellen ausgibt. Siehe z.B. http://validator.w3.org/

Bestehende HTML-Seiten kannst Du auch zu einem gewissen Grad
automatisch korrigieren lassen, siehe HTML-Tidy unter http://www.w3.org/People/Raggett/tidy/.

Wie finde ich heraus, welche DOCTYPE-Deklaration die für mich
passende ist?

Ich würde Dir zu XHTML (Transitional oder besser Strict) raten.
Da es sich hier um echtes XML handelt, kannst Du es dann mit
einem der vielen freien XML-Werkzeuge in eine Vielzahl von Formaten
wie z.B. PDF umwandeln lassen.

Gruß,
-Andreas.

Ich mach hier ständig nur Werbung für meine Seite *g

Nein im Ernst: schau dir mal den DOCTYPE meiner Site (marcus-ringer.de) an. Du siehst, dass es sich dabei um den strengsten DOCTYPE handelt, den das W3C gern überall hätte.

Grundsätzlich geht es darum, dass Inhalt und Layout voneinander getrennt werden.

So hat zum Beispiel das Tag im DOCTYPE „Srict“ nichts zu suchen, da es nur optisch hervor hebt. Es stellt die Schrift zwar fett dar, sagt aber nicht, dass es sich hierbei um Text Handelt, der auch sprachlich betont werden soll. Für Screenreader wie ihn Blinde benutzen, wäre es also vollkommen nutzlos und daher nur für die Optik relevant.

Dagegen sagt das Tag aus, dass hier ein Text auch wirklich sprachlich hervor gehoben werden soll. Optisch hat es den gleichen Effekt.

Eine Tabelle zum Beispiel wurde nie für Layoutzwecke erfunden, sondern wie der Name schon sagt, für die Darstellung tabellarischer Daten.

Das W3C „fordert“, oder besser „möchte“ nun mit den strengsten DOCTYPE (Strict), dass die Tags endlich ihrer eigendlichen Bestimmung entsprechend verwendet werden, was ich auch durchaus nachvollziehen kann.

Das DOCTYPE Transitional macht da noch kompromisse.

Die meisten Seiten verwenden daher transitional, weil es etwas nachsichtiger ist.

Am strengsten DOCTYPE stört mich vorallem, dass das W3C nicht erlaubt, Links in einem extra Fenster zu öffnen, die man das ja mit target="_blank" machen würde.
Aber da ist das W3C schon am überlegen, ob man das nicht auch da wieder erlauben soll …

Gruß Marcus :smile:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Andreas!

„Andreas“ schrieb:

nach W3C ist es ja notwendig, an den Beginn eines
HTML-Dokuments die DOCTYPE-Definition zu stellen, die „dem
HTML-Code entspricht, den man verwendet“. Auch nach dem Lesen
der W3C-Seite ist mir noch nicht ganz klar, wozu man den
braucht und wie man den DOCTYPE richtig deklariert.

Wie finde ich heraus, welche DOCTYPE-Deklaration die für mich
passende ist?

Zum Beispiel wird eine Seite (X-HTML und CSS) ordungsgemäß
angezeigt. Sobald ich jedoch eine DOCTYPE-Deklaration einfüge,
sind einige Formatierungen verschoben.

Wie würdet Ihr vorgehen? Eine Deklaration z.B.

XHTML 1.1 - DTD:
http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd“>

auswählen und dann so lange am Code rumbasteln, bis die Seite
wieder korrekt angezeigt wird?

Lies bitte:
http://www.heise.de/ix/artikel/2004/03/136/
http://www.mediaevent.de/xhtml/doctype.html
http://jendryschik.de/wsdev/einfuehrung/css/browser-…
http://www.carsten-protsch.de/zwischennetz/doctype/
http://www.hessendscher.de/benefits/

Gruss Oliver

Hi Sven,

Am strengsten DOCTYPE stört mich vorallem, dass das W3C nicht
erlaubt, Links in einem extra Fenster zu öffnen, die man das
ja mit target="_blank" machen würde.
Aber da ist das W3C schon am überlegen, ob man das nicht auch
da wieder erlauben soll …

Stimmt, inzwischen kannst Du das aber mit einer kleinen Javascript-Routine beheben. Da Screenreader Javascript sowieso nicht unterstützen, hat dies auf die Validität des Codes keine Auswirkung.

Kennzeichne alle Anchors, von denen Du möchtest, dass sie in einer neuen Seite öffnen (meist sind dies externe Links), mit einer Related-Eigenschaft, z.B.

[rel="external"\>Externer Link](http://fremdedomain.com/)

Du benutzt so das rel auch so wie es gedacht ist (zur Kennzeichnung der logischen Beziehung von Links), und kannst nun diese mit Javascript alle rausfiltern und ihnen das target verpassen.

anchors = document.getElementsByTagName("a");
for (var i=0; i\<anchors.length; i++) {
 rel = anchors[i].getAttribute("rel");
 if (rel == "external") {
 target = document.createAttribute("target");
 target.nodeValue="\_blank";
 anchors[i].setAttributeNode(target);
 }
}

Dass sich interne Links im selben Fenster öffnen, ist in den meisten Fällen sowieso besser. Gedacht wäre das fehlende target ja so, dass der User selbst bestimmen kann (mit Alt, Strg oder Rechtsklick), wie sich ein geklickter Link öffnet (für Frameseiten gibt es ja ein eigenes Doctype) - de facto wäre das in jedem Fall das beste. Leider beherrschen das vor allem unerfahrene Surfer nicht, deshalb auch die Kontroverse bei diesem Thema.

Bye,
Rudy

Stimmt, inzwischen kannst Du das aber mit einer kleinen
Javascript-Routine beheben.

Danke für den Tipp.
Ich benutze JavaScript recht ungern, weil es in den Einstellungen des Browsers deaktiviert werden kann. Somit würde das auch nicht mehr funktionieren.

Ist dann überhaupt das Markup noch valide?

Dass sich interne Links im selben Fenster öffnen, ist in den
meisten Fällen sowieso besser. Gedacht wäre das fehlende
target ja so, dass der User selbst bestimmen kann (mit Alt,
Strg oder Rechtsklick), wie sich ein geklickter Link öffnet
(für Frameseiten gibt es ja ein eigenes Doctype) - de facto
wäre das in jedem Fall das beste. Leider beherrschen das vor
allem unerfahrene Surfer nicht, deshalb auch die Kontroverse
bei diesem Thema.

Ja, ich habe auf meiner Internetseite (www.marcus-ringer.de) auf diese Möglichkeit der freien Entscheidung hingewiesen, in der Hoffnung dass davon Gebraucht gemacht wird.

Gruß Marcus

Hi Sven,

Ich benutze JavaScript recht ungern, weil es in den
Einstellungen des Browsers deaktiviert werden kann. Somit
würde das auch nicht mehr funktionieren.

Das ist schon klar, dann öffnet sich bei Usern ohne JS der Link nach User-Ermessen oder eben im selben Fenster - auch kein Weltuntergang. Auf die Funktion der Links selbst hat das aber dann keine Auswirkung.

Ist dann überhaupt das Markup noch valide?

Das Markup selbst, d.h. ohne die von Javascript generierten target-Attribute - ja, das bleibt valide. Was Javascript dann macht ist gewissermaßen getrickst. Denn obwohl ein strikter Doctype angegeben ist, befolgen die Browser das dynamisch hinzugefügte target und öffnen in einem neuen Fenster. Kein Validator wird aber das target sehen, weil diese das Javascript übergehen.

Ja, ich habe auf meiner Internetseite (www.marcus-ringer.de)
auf diese Möglichkeit der freien Entscheidung hingewiesen, in
der Hoffnung dass davon Gebraucht gemacht wird.

Das wäre natürlich das Beste. Aber um manche Kunden zufrieden zu stellen muss man ungewöhnliche Wege gehen, und lieber als bloß wegen des Targets alles transitional machen… :smile:)

Ciao,
Rudy