alle CSS-Definitionen in eine Zeile
milky
- css
0 Michael Schröpl0 milky
0 MudGuard0 milky
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.
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
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
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
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