2016-04-04 9 views
1

Ja ja, wir alle wissen, was ein comma between selectors bedeutet.In CSS3, was bedeutet ein Komma zwischen Deklarationsblöcken?

Dies ist anders. Ich dachte, dass ich CSS ziemlich gut kannte, aber heute stieß ich auf etwas, das ich nie zuvor gesehen habe - ein Komma zwischen den Deklarationsblöcken. Ich habe clean-css benutze, und es erzeugt das verkleinerte, gereinigt Ausgang (Ich habe einige Leerzeichen zur besseren Lesbarkeit neu eingefügt):

body .container 
{ 
    color:#EEE 
} 
, 
.navbar-default .navbar-nav>.active>a:hover, 
h1 
{ 
    color:#000 
} 

Beachten Sie das Komma (, die ich in einer eigenen Zeile platziert haben) nach die schließende geschweifte Klammer im Deklarationsblock für body .container. Ist das gültige CSS? Wenn ja, was bedeutet das?

Mein Eingang CSS für clean-CSS war wie folgt:

body .container { 
    color: #EEEEEE; 
} 

h1{ 
    color: #000; 
} 

.navbar-default .navbar-nav > .active > a:hover, { 
    color: black; 
} 
+0

Ich glaube, das ist ungültig CSS. – Aziz

+0

Ich möchte Ihnen für das Stellen dieser Frage danken, da ich einen Ausschluss-IE8-Selektor-Set-Hack und einen Bug in aktuellen Versionen von Chrome/Firefox/Edge entdeckt habe. Probieren Sie einen '.selector, # excludeIE8 :: before' in IE8, oder einen' .selector, .selector :: future-pseudo' in Chrome/Firefox/Edge haha ​​ – abluejelly

+0

Kein Problem, froh, dass ich das IE8 Wissen erweitern konnte Hacks, und damit das kollektive Wissen der Menschheit als Ganzes ;-) – alexw

Antwort

6

Nein, es ist nicht gültig CSS. Ein Komma in dieser Position bedeutet, dass davor ein leerer Selektor steht. Aber ein leerer Selektor ist überhaupt kein Selektor; Ein Selektor muss mindestens einen einfachen Selektor oder ein Pseudo-Element (mit einem impliziten *) enthalten. Von der :

Ein leerer Selektor, der keine Folge einfacher Selektoren und kein Pseudoelement enthält, ist ein ungültiger Selektor.

Dies kann das Ergebnis eines Fehlers in Clean-CSS sein. Alternativ dazu war das Eingabe-CSS zu Beginn ungültig und dies war einfach das Ergebnis von clean-css's Versuch, es zu verarbeiten.

+0

Warum zur Hölle würde jemand das XD benutzen – Phiter

+0

Ah ha! Es scheint, dass tatsächlich einige ungültige Eingabe-CSS vorhanden waren. Es gab eine Regel '.navbar-default .navbar-nav> .active> a: hover, {...}' - beachten Sie das Komma zwischen dem letzten Selektor und dem Anfang des Deklarationsblocks. Mein Lehrlingsdesigner hat noch einiges zu lernen ;-) Ich werde mehr auf clean-css schauen und schauen, ob sie eine Art "strikte" Option haben, um so etwas zu fangen. – alexw

+0

Beachten Sie, dass dies auch als Hack verwendet werden kann, um eine ganze Regel nur in LTE IE 7 zu laden, da alle anderen Browser (auch IE 8, leider) die gesamte Regel unabhängig von der Gültigkeit eines anderen Selektors löschen (s) dafür. – abluejelly