Newsgroup: it.comp.www.html
Titolo: Ereditarietà CSS

Ho letto in giro parecchio sull'argomento, ma non riesco a capire se e
come posso fare una cosa.
Ho capito che l'ereditarietà sui css funziona su oggetti contenuti uno
nell'altro quindi anche diversi tra loro. Per chi conosce il CPP vorrei
creare una ereditarietà com'è esistente nelle classi cpp.
Io vorrei creare una classe(chiamiamola ClassePadre) con tutte le
proprietà del caso. Poi vorrei creare una classe (chiamiamola
ClasseFiglio) che eredita tutte le proprietà di ClassePadre e poi
eventualmente modificare qualcosa.
Magari vi dico il mio esempio per capirci meglio.
ClassePadre sarà utilizzata per i link del menu di destra di tutto il
mio sito. Ipotizziamo che le sue proprietà siano:
verdana, 110%, sfondo bianco, colore nero
nelle varie sezioni del sito non dichiaro i link del menu di destra
come di tipo ClassePadre ma come ClasseFiglio (chiaramente ogni sezione
sarà una classefiglio diversa) e ClasseFiglio non ha definito nessuna
proprietà.
Se un domani mi vien chiesto di cambiare le dimensioni del carattere
per sola quella sezione aggiungerò alla ClasseFiglio la proprietà
dimensione impostandola al valore desiderato. Se mi verrà chiesto di
cambiare per tutto il sito il colore di sfondo cambierò la classe
ClassePadre.
Mi sembra d'aver capito che posso fare questa cosa utilizzando la
doppia classe, cioè dichiarando il mio link in questo modo
<a href="xxxxx" class="ClassePadre ClasseFiglio">xxxxxx</a>
Questo è un utilizzo standard dei css?
Quello che voglio fare io si può fare in altro modo? Mi piacerebbe
poter fare il tutto semplicemente così
<a href="xxxxx" class="ClasseFiglio">xxxxxx</a>
ma non so come dichiarare il tutto nel css... e non ho trovato da
nessuna parte qualcosa del genere.
Grazie Mauro

 nessuna parte qualcosa del genere.
Perché sbagli nel pensare che sia il CSS ad imporre l'ereditarietà,
o "cascading", mentre è il documento che vai a scrivere a farlo.
Quando scrivi:
body {
  font: ... ;
}
Assegni a tutti nodi figli dell'elemento body un font non solo perché
lo hai scritto nel CSS ma soprattuto perché body li contiene. Di classi 
come vedi in questo caso non ve ne sono, eppure il cascading funziona
ugualmente.
Quello che vuoi fare tu nei CSS si può risolvere in diverse
maniere. Di solito io assegno uno stile base per i link con i soliti:
a:link, a:visited, a:hover, a:active {
  ...
}
Poi 9 volte su 10 il menu di navigazione avrà uno stile
speciale ed in quel caso scrivo:
#nav a:link, #nav a:visited, #nav a:hover, #nav a:active {
   ...
}
Può capitare come vuoi fare tu che alcune pagine abbiano
bisogno di una barra di navigazione con un aspetto diverso,
ma non occorre predefinirla prima, IMO. Quando (e se) ti verrà
chiesto farai la modifica. Potrai scrivere:
<ul id="nav" class="mia-classe">
   <li>...Home...</li>
   <li>...About...</li>
   ...
</ul>
E poi nel CSS aggiustare solo quelle propietà
che ti servono;
#nav a.mia-classe:link, ... {
   color: red;
}
Qui ha senso usare una classe perché queste ultime
sono state pensate apposta per applicare attributi "trasversali".
Avresti potuto usare un altro ID (es. "mia-nav", al posto di 
"mia-classe") al posto di "nav" ma perderesti tutto il set di propietà 
che hai definito per "nav". Anche in questo caso c'è una scappatoia, però:
#nav, #mia-nav {
....
}
Questa ultima soluzione è un po' più ridondante e vai a rimettere
le mani in "nav".
Io preferisco usare le classi per i piccoli "ritocchi"
agli stili.
Ciao.
-- 
deelan
http://passiomatic.com/
http://www.deelan.com/

 eventualmente modificare qualcosa.
Un possibile modo potrebbe essere:
.ClassePadre, .ClasseFiglio {
  /* dichiarazioni della classe padre */
}
.ClasseFiglio {
  /* dichiarazioni per la sola classe figlio */
}
Ciao.
-- 
Federico

> ....
1000 grazie dei tuoi utilissimi consigli!
Mauro

 }
Interessante. 1000 grazie.
Mauro