CSS mit Javascript valide einfügen
Elias
- html
Hallo
Ich füge im Head für Browser mit aktiviertem Javascript eine extra CSS-Datei ein welche bestimmte Werte aus der Gesamt-CSS überschreibt.
Und zwar so:
<script type="text/javascript">
document.write('<link rel="stylesheet" type="text/css" href="no_js.css">');
</script>
Funktioniert, ist aber nicht valide (XHTML1 - transitional).
Der Validator schreibt:
document type does not allow element "link" here.
...="stylesheet" type="text/css" href="menue.css">');
The element named above was found in a context where it is not allowed. This could mean that you have incorrectly nested elements -- such as a "style" element in the "body" section instead of inside "head" -- or two elements that overlap (which is not allowed).
One common cause for this error is the use of XHTML syntax in HTML documents. Due to HTML's rules of implicitly closed elements, this error can create cascading effects. For instance, using XHTML's "self-closing" tags for "meta" and "link" in the "head" section of a HTML document may cause the parser to infer the end of the "head" section and the beginning of the "body" section (where "link" and "meta" are not allowed; hence the reported error).
Wie kann ich das valide lösen?
Danke, Elias
Hi Elias!
Dazu gibt es schon einen Thread. Ich bin sicher, dass er dir weiterhilft.
https://forum.selfhtml.org/?t=123530&m=795380
MfG H☼psel
Hi Elias!
Dazu gibt es schon einen Thread. Ich bin sicher, dass er dir weiterhilft.
https://forum.selfhtml.org/?t=123530&m=795380
MfG H☼psel
Danke, es war das /* <![CDATA[ */ ......
Elias
Hallo
<script type="text/javascript">
document.write('<link rel="stylesheet" type="text/css" href="no_js.css">');
</script>
Funktioniert, ist aber nicht valide (XHTML1 - transitional).
Dir ist hoffentlich klar, daß XHTML ein XML-Derivat ist?
XML darf aber nicht als text/html ausgeliefert werden.
Ein korrekter content-type wäre:
application/xhtml+xml
(funktioniert zwar im Schwächelbrowser IE nicht, aber man sollte auch an die Zukunft denken, sonnst entsteht dann ein zusätzlicher Aufwand)
Nun funktioniert aber in einem korrekt ausgelieferten XHTML-Dokument Dein obiger Javascriptcode nicht mehr.
Also verzichte besser von vornherein auf solche Sachen, kann ist Dein zukünftiges Leben einfacher.
Das richtige stylesheet läßt sich doch auch serverseitig einfügen.
Gruß
KiloBravo
Hallo KiloBravo.
Dir ist hoffentlich klar, daß XHTML ein XML-Derivat ist?
Soweit korrekt.
XML darf aber nicht als text/html ausgeliefert werden.
Das mag zwar stimmen, gilt aber nicht für XHTML.
Siehe XHTML 1.0 § 5.1 - Internet Media Type:
XHTML Documents which follow the guidelines set forth in Appendix C, "HTML Compatibility Guidelines" may be labeled with the Internet Media Type "text/html" [RFC2854], as they are compatible with most HTML browsers.
Ein korrekter content-type wäre:
application/xhtml+xml
Für XHTML ja, für XML nein.
(funktioniert zwar im Schwächelbrowser IE nicht, aber man sollte auch an die Zukunft denken, sonnst entsteht dann ein zusätzlicher Aufwand)
Auch wenn ich dies nachvollziehen kann, besteht derzeitig auch kaum ein Aufwand.
Meine derzeitige Lösung:
if (isset($_SERVER["HTTP_ACCEPT"]) and stristr($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml')) {
header('Content-type: application/xhtml+xml; charset=utf-8');
echo '<?xml version="1.0" encoding="utf-8"?>'."\n".
}
(Aufs Nötigste heruntergekürzt.)
Nun funktioniert aber in einem korrekt ausgelieferten XHTML-Dokument Dein obiger Javascriptcode nicht mehr.
Natürlich nicht. Der Dokumentenbaum darf in XML nur per DOM-Methoden manipuliert werden.
Einen schönen Montag noch.
Gruß, Ashura
Hallo,
Nun funktioniert aber in einem korrekt ausgelieferten XHTML-Dokument Dein obiger Javascriptcode nicht mehr.
Natürlich nicht.
Wieso »natürlich nicht«? Warum ist das »natürlich« für XML?
Der Dokumentenbaum darf in XML nur per DOM-Methoden manipuliert werden.
Vielleicht sollte man immer dazu sagen, dass auch bei echtem XHTML das DOM HTML wunderbar funktionieren *kann*. Es spricht prinzipiell nichts dagegen, warum es nicht in diesem Modus funktionieren sollte. Mittlerweile erlauben es die meisten Browser auch.
Im Speziellen funktioniert document.write im XHTML-Modus tatsächlich nicht. Aber auch das ist keine wesenhafte Eigenart von XHTML, das ist nirgends vorgeschrieben und rein technisch spricht nichts dagegen. Das ist eine »politische« Entscheidung von verschiedenen Browserherstellern. innerHTML z.B. funktioniert zur gleichen Zeit problemlos. Nein, das ist nicht logisch. Schon gar nicht »natürlich«.
Mathias
Hallo,
Funktioniert, ist aber nicht valide (XHTML1 - transitional).
Nun funktioniert aber in einem korrekt ausgelieferten XHTML-Dokument Dein obiger Javascriptcode nicht mehr.
Warum?
Weil das Markup nicht wohlgeformt ist?
Dann macht man es halt wohlgeformt.
Wo ist das Problem?
Mathias