Seit Version 7.0.2 kann mit Hilfe des Feldes
$$HTMLFrontMatter der DocType von durch den HTTP-Task erzeugten
Webseiten bestimmt werden.
Mein erster Gedanke war sofort, nun
kann ich endlich XHTML-Ausgaben generieren. Doch auf die Generierung des
HTMLs hat die Angabe keine Auswirkung. Es wird weiterhin HTML 4.01 Transitional
erzeugt. Wenn sich die Ausgabe nicht beeinflussen lässt, warum sollte man
den DocType angegeben?
Spannend wird die DocType-Angabe im
Zusammenhang mit dem Internet Explorer und Cascading Style Sheets (CSS).
Bis einschließlich der Version 5.5 des IE wurden bei Angaben bzgl. der
Breite eines Block Elementes (<div>, <h1>, <p>, etc.)
entgegen der Spezifikation die Breite des Rahmens und des Innenabstandes
von der Gesamtbreite abgezogen. Dieses Verhalten wird auch als "Box
Model Bug" bezeichnet. Mit der Version 6 hat Microsoft diesen Fehler
behoben. Nun standen die Entwickler aber vor dem Problem, dass es unzählige
Webseiten gab, die auf die falsche Darstellung hin optimiert waren. In
diesem Zusammenhang bekommt der DocType-Angabe eine besondere Aufgabe zuteil.
Findet der IE eine DocType-Definition
ohne URI-Angabe
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">,
geht er von einer älteren HTML-Datei
aus und schaltet in den so genannten "Quirks Mode". In diesem
Modus wird bei Breitenangaben die laut Spezifikation falsche Darstellung
gewählt.
Bei einer Angabe einer DocType-Definition
mit URI-Angabe
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
befindet sich der IE im "Standards
Mode", in dem Breitenangaben richtig interpretiert werden.
Dieses Verhalten wird auch als Dokumenttyp-Weiche
("Doctype Switch") bezeichnet.
Was ist mit Firefox und Opera? Diese
Browser haben die Breitenangaben schon immer richtig interpretiert. Wenn
das gleiche Cascading Style Sheet sowohl für IE als auch für Firefox und
Opera verwendet werden soll, so ist es wichtig das der IE sich im Standards
Mode befindet. Leider gibt der HTTP-Task von Domino standardmäßig die DocType-Definition
ohne URI aus, was den IE im Quirks Mode operieren lässt.
Der Domino Entwickler kann einfach in
eine webfähige Maske im Feld $$HTMLFrontMatter die Formel
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD
HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">"
+ @Newline
einfügen und schon befindet sich der
Internet Explorer im "Standards Mode".
Ich will das Verhalten einmal an einem
Beispiel demonstrieren.
Der folgenden HTML-Code sollte laut
Spezifikation eine Breite von 280 Pixeln ergeben.
<div style="width:200px; padding:20px; border:20px
solid #D4112F;">Soll-Breite: 280px</div>
Die Breite setzt sich zusammen aus 20px
(linker Rand) + 20px (linker Innenabstand) + 200px (Breite des Blocks)
+ 20px (rechter Rand) + 20px (rechter Innenabstand) = 280px.
Ohne die Angabe der URI ("http://www.w3.org/TR/html4/loose.dtd")
in der DocType-Definition ist die Gesamtbreite der Box im Internet Explorer
nur 200px.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
Mit der vollständigen DocType-Definition
mit URI stellt der Internet Explorer die Box richtig dar.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
Firefox stellt auch ohne URI-Angabe
die Gesamtbreite der Box richtig dar.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
Ihr Domino Server befindet sich noch
nicht auf der Version 7.0.2? Ab der Version 6.5.3 kann auch Ihnen geholfen
werden. Mit dem Eintrag DominoCompleteDoctype
in der notes.ini
kann global eingestellt werden, welche DocType-Definition verwendet werden
soll.
notes.ini | DocType-Definition |
DominoCompleteDoctype=0 (default) | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
DominoCompleteDoctype=1 | <!DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/
html4/loose.dtd"> |
DominoCompleteDoctype=2 | <!DOCTYPE
HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/
html4/strict.dtd"> |