Stylesheet im noscript - funktioniert, ist aber nicht valide ...
lulu
- css
Hallo
ein alternatives CSS im "noscript"-tag einzubinden funktioniert zwar prima,
ist aber leider nicht valide.
Es geht um folgende Konstruktion:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<title>test</title>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
<style type="text/css" media="screen">@import "/css/basic.css";</style>
</head>
<body>
<noscript>
<style type="text/css" media="screen">@import "/css/nojavascript.css";</style>
</noscript>
</body>
</html>
Das "noscript"-Tag darf nicht in den "head" und das "style"-Tag darf nicht in den "body".
Also ist es leider auch nicht lösbar wenn man es in den "head" schreibt.
Schade, es funktioniert zwar wunderbar, soll aber auch valide sein.
Gibt es da doch eine Lösungsmöglichkeit oder ist der Ansatz so nicht umzusetzen?
Als Alternative fällt mir gerade nur ein die für die "mit Javascript"-Variante benötigten CSS-Angaben per Javascript dynamisch zu ergänzen.
Aber die Variante mit "noscript" gefällt mir eigentlich besser ...
Wie regelt Ihr das wenn Ihr unterschiedliche Stylesheets für "JavaScript an" / "JavaScript aus" braucht?
Viele Grüße
lulu
Hi,
Wie regelt Ihr das wenn Ihr unterschiedliche Stylesheets für "JavaScript an" / "JavaScript aus" braucht?
Eine Möglichkeit: ein zweites Stylesheet mit Javascript in den Head schreiben.
Eine andere - falls Javascript nur für den IE nötig ist und für moderne Browser durch CSS ersetzt werden kann - sind Conditional Comments.
freundliche Grüße
Ingo
Hallo!
ein alternatives CSS im "noscript"-tag einzubinden funktioniert zwar prima,
ist aber leider nicht valide.
Das "noscript"-Tag darf nicht in den "head" und das "style"-Tag darf nicht in den "body".
Also ist es leider auch nicht lösbar wenn man es in den "head" schreibt.Schade, es funktioniert zwar wunderbar, soll aber auch valide sein.
Gibt es da doch eine Lösungsmöglichkeit oder ist der Ansatz so nicht umzusetzen?Wie regelt Ihr das wenn Ihr unterschiedliche Stylesheets für "JavaScript an" / "JavaScript aus" braucht?
Ich bastel gerade an demselben Problem herum,und habe bis jetzt auch noch keine befriedigende Lösung gefunden. Das "Problem" besteht in erster Linie darin, dass man ja immer die No-JS-CSS-Datei laden muss, ausser..., ja ausser man benutzt das von dir erwähnte Konstrukt.
In Anbetracht der zahlreichen Browserinkompatibilitäten & -unzulänglichkeiten bei den "validen" Möglichkeiten, bin ich fast soweit, bei meinem speziellen Projekt auf die Validität zu verzichten. Ehrlich gesagt kann ich das auch nicht ganz verstehen, warum dieses Konstrukt invalide ist, denn wenn ich laut Definition einen Script-Bereich im Head verwenden darf, warum dann in dreiteufelsnamen keinen Noscript-Bereich (, der doch eigentlich das logische Pendant dazu ist, für Browser, die kein JS können, bzw. bei denen JS deaktiviert ist).
Auch sehe ich für die Zukunft keine Probleme, da <noscript> mit zu den wenigen Eigenschaften gehört, die eigentlich alle Browser "richtig" verstehen.
Natürlich wäre mir eine valide Lösung viel, viel lieber (muss aber trotzdem praktikabel sein)!
Also in diesem Sinne schließe ich mich der Frage von lulu an. Wer eine Lösung weiß - immer her damit - Danke!
Gruß Gunther
Auch sehe ich für die Zukunft keine Probleme, da <noscript> mit zu den wenigen Eigenschaften gehört, die eigentlich alle Browser "richtig" verstehen.
Welche HTML "Eigenschaften" werden denn falsch verstanden?
Struppi.
Hi,
Wie regelt Ihr das wenn Ihr unterschiedliche Stylesheets für "JavaScript an" / "JavaScript aus" braucht?
1. Nicht-valide Methode: NOSCRIPT im HEAD. Der ist da zwar laut den W3C-DTDs nicht erlaubt, funktioniert aber trotzdem bei allen mir bekannten JS-Browsern (was nicht wenige sind ;-)).
2. Valide Methode: Mit JS ein "<!--" vor und ein "-->" nach den Non-JS-Styles im HEAD schreiben. Diese sind dann, falls JS aktiviert, einfach auskommentiert.
Gruß, Cybaer
Huhu Cybaer
- Valide Methode: Mit JS ein "<!--" vor und ein "-->" nach den Non-JS-Styles im HEAD schreiben. Diese sind dann, falls JS aktiviert, einfach auskommentiert.
Ah, gute, weil einfache, Idee.
Mmmmh, ich hab es aber trotzdem (noch) nicht ohne Validator-Fehler bzw. Warnings hinbekommen.
Wenn Du das irgendwo schonmal eingesetzt hast, oder eine Seite kennst die das benutzt könntest Du ja vielleicht den Link posten.
Das wäre fein. Ansonsten probiere ich später nochmal mit diesem Ansatz herum.
Jetzt bleibt es vorerst erstmal bei
- Nicht-valide Methode: NOSCRIPT im HEAD.
Viele Grüße
lulu
Hi,
Ah, gute, weil einfache, Idee.
Mmmmh, ich hab es aber trotzdem (noch) nicht ohne Validator-Fehler bzw. Warnings hinbekommen.
Dann machst Du was falsch - aber was anderes. ;-)
Wenn Du das irgendwo schonmal eingesetzt hast, oder eine Seite kennst die das benutzt könntest Du ja vielleicht den Link posten.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>Test</title>
<link rel="stylesheet" type="text/css" href="screen.css">
<script type="text/javascript"><!-- // Script-Geruest
document.writeln('<!\-\-');
//--></script>
<link rel="stylesheet" type="text/css" href="printer.css">
<script type="text/javascript"><!-- // Script-Geruest
document.writeln('\-\->');
//--></script>
</head>
<body>
<h1>JS-Test:</h1>
<h1 class="Screen">JS vorhanden!</h1>
</body>
</html>
Laut W3C-Validator valide.
In printer.css ist die Klasse 'Screen' definiert mit display:none - entsprechend wird die 2. H1 nur gezeigt, wenn JS aktiv ist.
Gruß, Cybaer
Huhu Cybaer
danke für das Beispiel.
Leider funktioniert das in den Gecko-Browsern nicht.
Die rendern da offenbar falsch/ bzw. anders.
Im IE und Opera ist es ok, aber so schaut es im Firefox aus (WIN XP)
Wenn ich das Beispiel wie folgt modifiziere funktioniert es, aber dann steht da ein "wildes" Kommentarende.
<code>
[...]
<script type="text/javascript">
document.writeln('<!--');
</script>
<link rel="stylesheet" type="text/css" href="printer.css">
<script type="text/javascript">
document.writeln('-->');
//--></script>
</head>
[...]
</code>
Das gefällt mir so natürlich nicht.
Mmmmh, bis jetzt bleibe ich also erstmal beim "verbotenen" noscript-tag.
Viele Grüße
lulu
Hi,
Leider funktioniert das in den Gecko-Browsern nicht.
Die rendern da offenbar falsch/ bzw. anders.
Grummel - in der Tat. Die Gecko-Programmierer sind bei der Umsetzung von write() (ja noch eklatanter bei XHTML-Dokumenten) offensichtlich in ein Rumfaß gefallen (oder zeitgemäßer: in ein Hanffeld gestolpert). =;->
Im IE und Opera ist es ok, aber so schaut es im Firefox aus (WIN XP)
Im Konqueror ist es (natürlich) auch OK.
Im Gecko nur im Kompatiblitätsmodus. Also ohne DOCTYPE-Angabe oder mit einem z.b. 3.2-Doctype.
Mmmmh, bis jetzt bleibe ich also erstmal beim "verbotenen" noscript-tag.
OK, zwei Ideen habe ich noch. Melde mich dann nochmal abschließend (so oder so).
Gruß, Cybaer
Nachtrag:
OK, zwei Ideen habe ich noch. Melde mich dann nochmal abschließend (so oder so).
Ging leider keines von beiden. Bliebe vielleicht noch die direkte Manipulation des DOM-Baumes. Aber das habe ich nicht ausprobiert.
Gruß, Cybaer
Huhu
Ging leider keines von beiden. Bliebe vielleicht noch die direkte Manipulation des DOM-Baumes. Aber das habe ich nicht ausprobiert.
Mmmmh, per Dom-Baum wird es ggf. etwas langsam/ umständlich und dann muss man
sich vermutlich mit unfähigen Browsern rumärgern.
Trotzdem Danke für Deine Bemühungen.
Viele Grüße
lulu