Denken Sie nicht an css Klassen als objektorientierte Klassen, betrachten Sie sie lediglich als ein Werkzeug unter anderen Selektoren, um festzulegen, welche Attributklassen ein html-Element wird gestylt durch. Betrachten Sie alles zwischen den geschweiften Klammern als die Attributklasse , und die Selektoren auf der linken Seite weisen die ausgewählten Elemente an erben Attribute aus dem Attributklasse . Beispiel:
.foo, .bar { font-weight : bold; font-size : 2em; /* attribute class A */}
.foo { color : green; /* attribute class B */}
Wenn ein Element mit dem Attribut class="foo"
ist es sinnvoll, sie nicht als Erben von Attributen der Klasse .foo
sondern von Attributklasse A y Attributklasse B . D.h., der Vererbungsgraph ist eine Ebene tiefer, wobei die Elemente sich von Attributklassen und die Selektoren geben an, wohin die Kanten gehen, und bestimmen den Vorrang, wenn es konkurrierende Attribute gibt (ähnlich wie bei der Reihenfolge der Methodenauflösung).
Die praktische Auswirkung auf die Programmierung ist folgende. Angenommen, Sie haben die oben angegebene Stilvorlage und möchten eine neue Klasse hinzufügen .baz
wo es die gleiche Bedeutung haben sollte. font-size
als .foo
. Die naive Lösung wäre die folgende:
.foo, .bar { font-weight : bold; font-size : 2em; /* attribute class A */}
.foo { color : green; /* attribute class B */}
.baz { font-size : 2em; /* attribute class C, hidden dependency! */}
Jedes Mal, wenn ich etwas zweimal tippen muss, werde ich so wütend! Nicht nur, dass ich es zweimal schreiben muss, jetzt habe ich auch keine Möglichkeit, programmatisch anzugeben, dass .foo
y .baz
sollten die gleichen font-size
und ich habe eine versteckte Abhängigkeit! Mein obiges Paradigma würde nahelegen, dass ich die font-size
Attribut von Attributklasse A :
.foo, .bar, .baz { font-size : 2em; /* attribute base class for A */}
.foo, .bar { font-weight : bold; /* attribute class A */}
.foo { color : green; /* attribute class B */}
Die Hauptbeschwerde ist, dass ich jetzt jeden Selektor von Attributklasse A wieder, um festzulegen, dass die Elemente, die sie auswählen sollen, auch die Attribute von Attribut Basisklasse A . Die Alternativen sind jedoch, dass man sich daran erinnern muss, jeden Tag zu bearbeiten. Attributklasse wo es bei jeder Änderung versteckte Abhängigkeiten gibt, oder die Verwendung eines Tools von Dritten. Die erste Option bringt Gott zum Lachen, bei der zweiten möchte ich mich umbringen.
4 Stimmen
Denken Sie eher an Kaskadierung als an Vererbung, das trifft hier nicht zu
1 Stimmen
Wahnsinn!!! haacked.com/archive/2009/12/02/t4-template-for-less-css.aspx
0 Stimmen
Vielleicht Duplikat von stackoverflow.com/questions/25381072/