lulu: Stylesheet im noscript - funktioniert, ist aber nicht valide ...

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

--
bythewaythewebsuxgoofflineandenjoytheday
  1. 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

  2. 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

    1. 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.

  3. 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

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. Huhu Cybaer

      1. 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

      1. Nicht-valide Methode: NOSCRIPT im HEAD.

      Viele Grüße

      lulu

      --
      bythewaythewebsuxgoofflineandenjoytheday
      1. 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

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. 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

          --
          bythewaythewebsuxgoofflineandenjoytheday
          1. 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

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
            1. 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

              --
              Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
              1. 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

                --
                bythewaythewebsuxgoofflineandenjoytheday