Non pensare alle classi CSS come classi orientate agli oggetti, considerale semplicemente uno strumento tra gli altri selettori per specificare da quali classi di attributo è disegnato un elemento html. Pensa a tutto tra le parentesi graffe come alla classe di attributo e i selettori sul lato sinistro dicono agli elementi che selezionano per ereditare gli attributi dalla classe di attributo . Esempio:
.foo, .bar { font-weight : bold; font-size : 2em; /* attribute class A */}
.foo { color : green; /* attribute class B */}
Quando un elemento è dato l'attributo class="foo"
, è utile pensare ad esso non come ereditare attributi dalla classe .foo
, ma dalla classe attributo A e di classe B attributo . Vale a dire, il grafico dell'ereditarietà è profondo un livello, con elementi derivanti da classi di attributi e i selettori che specificano dove vanno i bordi e determinano la precedenza quando ci sono attributi in competizione (simile all'ordine di risoluzione del metodo).
L'implicazione pratica per la programmazione è questa. Diciamo che avete il foglio di stile di cui sopra, e si desidera aggiungere una nuova classe .baz
, dove dovrebbe avere lo stesso font-size
come .foo
. La soluzione ingenua sarebbe questa:
.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! */}
Ogni volta che devo digitare qualcosa due volte mi arrabbio così tanto! Non solo devo scriverlo due volte, ora non ho modo di indicarlo programmaticamente .foo
e .baz
dovrei avere lo stesso font-size
, e ho creato una dipendenza nascosta! Il mio paradigma sopra suggerirebbe che dovrei sottrarre l' font-size
attributo dalla classe di attributi 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 */}
La lamentela principale qui è che ora devo digitare nuovamente ogni selettore dalla classe di attributi A per specificare che gli elementi che dovrebbero selezionare dovrebbero anche ereditare gli attributi dalla classe di base A degli attributi . Tuttavia, le alternative devono ricordare di modificare ogni classe di attributo in cui vi sono dipendenze nascoste ogni volta che qualcosa cambia o di utilizzare uno strumento di terze parti. La prima opzione fa ridere Dio, la seconda mi fa venir voglia di uccidermi.