1. München, den 21. Juli 2011 CSS-SPEZIFITÄTPunktgenaue Ansprache Ralf Richtsteiger, ralf.richtsteiger@peppermind.de
2. 2 01Die Kaskade 02Gewichtung und Ursprung 03Spezifität von Selektoren - Einführung in das Punktesystem 04Spezifität erhöhen - Nachfolgeselektoren, Klassen & Ids 05Spezifität erhöhen - Beispiel 06!important 07Künstliche Steigerung der Spezifität 08Tipps Ressourcen INHALT
3. 01 DIE KASKADE Vorgehen der Prüfung und Festlegung von Stylesheets: Browser erstellt anhand des HTML-Quellcodes das DOM Browser durchläuft das DOM und sucht passende CSS-Eigenschaften und deren Wert Prozess der Wertzuweisung berücksichtigt vier verschiedene Stufen Stufe 1 – Gewichtung Stufe 2 – Ursprung Stufe 3 – Spezifität Stufe 4 – Reihenfolge Grundlage zur Vermeidung von Konflikten verschiedener Stylesheets 3
4. 02 GEWICHTUNG & URSPRUNG Ursprung – wo kommt das Stylesheet her Browser-Stylesheet Benutzer-Stylesheet – vom User im Browser getätigte Einstellungen Autoren-Stylesheet Gewichtung – welches Stylesheet hat welche Priorität Browser-Stylesheet – niedrigste Priorität Benutzer-Stylesheet Autoren-Stylesheet Autoren-Stylesheet mit !important Benutzer-Stylesheet mit !important – höchste Priorität Benutzer (z. B. mit körperlichen Beeinträchtigungen) haben das letzte Wort! 4
5. 03 SPEZIFITÄT VON SELEKTORENEinführung in das Punktesystem leicht verständliches Punktesystem mit vier per Komma getrennten Zahlen Gruppe A inline-Styles: <p style=“color:red;“> Spezifität: 1,0,0,0 – Punkte: 1000 Gruppe B ID: #red Spezifität: 0,1,0,0 – Punkte: 100 Gruppe C Klasse, Pseudoklasse oder Attributselektor: .red Spezifität: 0,0,1,0 – Punkte: 10 Gruppe D Typ-Selektor oder Pseudoelement: p Spezifität: 0,0,0,1 – Punkte: 1 5
14. 05 SPEZIFITÄT ERHÖHEN Einfaches Beispiel HTML <p id=„check“ class=„error“>Ich bin eine Fehlermeldung</p> Spezifitäten im Überblick 7
15. 05 SPEZIFITÄT ERHÖHENNachfolgeselektoren, Klassen & IDs HTML <link rel=„stylesheet“ type=„text/css“ href=„color.css“ /> <link rel=„stylesheet“ type=„text/css“ href=„font.css“ /> <div class=“error“> <p>Ich bin eine Fehlermeldung</p> <p class=„info“>Ich bin eine Zusatzinformation</p> </div> CSSp.info{ color:green; } /* color.css*/.error p { color:red; } /* font.css */ Problem: Infotexterscheint rot anstatt dem gewünschten Grün Erklärung Spezifität beider Selektoren ist 0,0,1,1 und damit gleichwertig letzte Regel der Kaskade tritt in Kraft (Reihenfolge) – zuletzt definierte Anweisung wird ausgeführt 8
16. SPEZIFITÄT ERHÖHENNachfolgeselektoren, Klassen & IDs 05 HTML <link rel=„stylesheet“ type=„text/css“ href=„color.css“ /> <link rel=„stylesheet“ type=„text/css“ href=„font.css“ /> <div class=“error“> <p>Ich bin eine Fehlermeldung</p> <p class=„info“>Ich bin eine Zusatzinformation</p> </div> CSSp.info{ color:green; } /* color.css */.error p { color:red; } /* font.css */ Lösung: Erhöhung der Spezifität durch Verwendung eines Nachfolgeselektors:div p.info { color:green; } /* color.css */ Erklärung Spezifität erhöht auf 0,0,1,2 und ist daher höherwertig – der Infotext erscheint grün 9
22. kann nur mit weiteren !important-Anweisungen überschrieben werdenBesonderheit IE6 .error { color:red!important; color:blue; } Ergebnis: Farbe im IE6 = blau Farbe in allen anderen Browsern = rot 11
23. 07 STEIGERUNG DER SPEZIFITÄT Universalselektor HTML <div id=“main“> <p class=“error“>Ich bin eine Fehlermeldung</p> </div> CSS #main { color:black; } p.error { color:red; } Universalselektor *: #main * { color:black; } Erklärung Durch den Universalselektor wird das Element explizit angesprochen und die höhere Spezifität der ID gewinnt. 12