milky: alle CSS-Definitionen in eine Zeile

Hallo,

ich hatte heute (ein bischen herumgespielt) eine HTML Seite durch
einen Filter geschickt, der die ganzen CR/NLs entfernt und somit
den den ganzen Code auf eine Zeile reduziert.
Es soll jetzt hier nicht um Sinn und Unsinn dieser Aktion gehen,
sondern darum, daß bei dieser Aktion natürlich auch der Bereich
mit den Stylesheet-definitionen in Mitleidenschaft gezogen wurde,
so daß aus dem ursprünglichen:

<style type="text/css"><!--
body {whatever:...}
.box {border:...}
a {textdeco:none...}
//--></script>

folgendes herausgekommen ist:

<html>...<style><!-- body {...} .box {...} a {...} //--></style>...

Und das verrückte ist nun, das dies im Opera(6) ganz exakt genauso
angezeigt wird wie vorher; scheinbar alle CSS-Definitonen sind
nach wie vor aktiv (sind in diesem Beispiel ja eh nur eine Handvoll).

Ich bin bisher immer davon ausgegangen das dieses in-eine-Zeile-packen
neben den <PRE> und <SCHNULLISCRIPT>-Bereichen auch den
CSS-Bereich unbrauchbar machen würde, und jetzt logischerweise
ziemlich überrascht.
Im SelfHtml8 steht tatsächlich auch kein Ton davon, daß es notwendig
sei jede CSS-Definition in eine eigene Zeile zu packen; daher jetzt
meine Frage: weiß jemand, ob dies offiziell vom w3c genehmigt wurde,
und wenn ja wie steht es mit der Verwendbarkeit in den real
existierenden Browsern??

MsF,
milky

P.S. Ich gebe ganz offen zu, das ist mit Abstand die am wenigsten
nützliche Frage die ich mir hier bisher geleistet habe, aber gegen
Neugier ist halt kein Kraut gewachsen.

  1. Hi,

    ich hatte heute (ein bischen herumgespielt) eine
    HTML Seite durch einen Filter geschickt, der die
    ganzen CR/NLs entfernt und somit den den ganzen Code
    auf eine Zeile reduziert.

    so etwas Ähnliches verwende ich auch.

    Allerdings ist es für HTML im Allgemeinen nicht nutzbar, da Zeilenumbrüche als whitespace gelten und dieses innerhalb von Text keineswegs entfernt werden darf. Andererseits gibt es wiederum Stellen, wo das whitespace stört (beispielsweise nach einem "<td>").

    Daher entferne ich zwar führende und folgende Leerzeichen (ich _weiß_, daß ich kein <pre> verwende) sowie Kommentare in der 'proprietären' PASCAL-Formatierung "(* ... *)", aber Zeilenumbrüche nur dann, wenn das letzte nicht-whitespace der Zeile ein von mir definiertes Zeichen ist (ich verwende dafür "", aber das ist willkürlich). Ich muß also im "Original-Quelltext" Zeilen, die verschmolzen werden dürfen, als solche explizit markieren.
    Aufeinanderfolgende Zeilenumbrüche verschmelze ich allerdings automatisch zu nur noch einem solchen.

    Ich bin bisher immer davon ausgegangen das dieses
    in-eine-Zeile-packen neben den <PRE> und
    <SCHNULLISCRIPT>-Bereichen auch den CSS-Bereich
    unbrauchbar machen würde

    Ich nicht.

    Jede einzelne CSS-Deklaration ist hinreichend gut geklammert, um whitespace aller Art irrelevant zu machen. Und die Einbindung von CSS in HTML erfolgt mit HTML-Tags ...
    Nach meiner Erfahrung klappt das auch mit sehr langen Zeilen in allen bekannten Browsern.

    Viele Grüße
          Michael

    1. Hey,

      Also wenn das tatsächlich erlaubt ist und zudem auch noch in allen
      Browsern funktioniert, feine Sache!

      Allerdings ist es für HTML im Allgemeinen nicht nutzbar, da

      Zeilenumbrüche als whitespace gelten und dieses innerhalb von Text
      keineswegs entfernt werden darf. Andererseits gibt es wiederum Stellen, wo
      das whitespace stört (beispielsweise nach einem "<td>").

      ich habe einfach alles ganz schlicht durch preg_replace('/>\s+</', '><')
      zusammenziehen lassen, hat ein paar wenige Nebeneffekte, aber für die
      meisten Seiten ist es völlig ok.

      MsF,
      milky

  2. hi,

    ich hatte heute (ein bischen herumgespielt) eine HTML Seite durch
    einen Filter geschickt, der die ganzen CR/NLs entfernt und somit
    den den ganzen Code auf eine Zeile reduziert.

    Und das verrückte ist nun, das dies im Opera(6) ganz exakt genauso
    angezeigt wird wie vorher; scheinbar alle CSS-Definitonen sind
    nach wie vor aktiv (sind in diesem Beispiel ja eh nur eine Handvoll).

    Was ist daran verrückt? Es ist so spezifiziert, also ist das das zu erwartende Ergebnis. Jedes andere Verhalten des Browsers wäre fehlerhaft.

    CSS erlaubt an vielen Stellen Whitespace.
    Whitespace ist dabei definiert als: [ \t\r\n\f]+
    also Leerzeichen, Tabulator, Wagenrücklauf, Zeilenvorschub, Seitenvorschub
    Diese Zeichen sind gleichberechtigt.

    Das hättest Du durch einen Blick in die Spezifikation leicht rausfinden können.

    Ich bin bisher immer davon ausgegangen das dieses in-eine-Zeile-packen
    neben den <PRE> und <SCHNULLISCRIPT>-Bereichen auch den
    CSS-Bereich unbrauchbar machen würde, und jetzt logischerweise
    ziemlich überrascht.

    RTFM.

    Im SelfHtml8 steht tatsächlich auch kein Ton davon, daß es notwendig
    sei jede CSS-Definition in eine eigene Zeile zu packen; daher jetzt
    meine Frage: weiß jemand, ob dies offiziell vom w3c genehmigt wurde,
    und wenn ja wie steht es mit der Verwendbarkeit in den real
    existierenden Browsern??

    Ja, natürlich ist das erlaubt. Außer dem Netscape 4.x ist mir kein Browser bekannt, der mit Whitespace im CSS Probleme hat (und da geht es nicht um Zeilenvorschübe, sondern um Whitespace rund um die { } und die :

    Siehe http://www.w3.org/TR/REC-CSS2/grammar.html

    Andreas

    1. Hi,

      Was ist daran verrückt? Es ist so spezifiziert, also ist das das zu erwartende Ergebnis. Jedes andere Verhalten des Browsers wäre fehlerhaft.
      Das hättest Du durch einen Blick in die Spezifikation leicht rausfinden können.

      Das werde ich beim nächsten Mal auch machen, im SelfHtml wurde mir nur
      dummerweise durch die fortlaufende und konsequente Verwendung von
      Zeilenümbrüchen in ALLEN Beispielen suggeriert, daß diese ganz zwingend
      dort hinheingehören.
      Aber zum Glück gibt es ja die vielen Forumsteilnehemer, die alle
      w3c-Empfehlungen gelesen und diese dann auch noch in die aktuelle
      Browserwirklichkeit einordnen können  :-)

      tnx,
      milky