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-sizecome .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 .fooe .bazdovrei avere lo stesso font-size, e ho creato una dipendenza nascosta! Il mio paradigma sopra suggerirebbe che dovrei sottrarre l' font-sizeattributo 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.