4 selettori e parentele

font

Come per l’attributo border visto nella scorsa lezione, posso specificare più proprietà insieme anche per altri, abbiamo visto i vari attributi per font (font-size, font-width, font-family), proviamo a raggrupparle tutte dentro font:

font: 40px bold "Arial,Helvetica, sans-serif";

text

Vediamo alcuni attributi di text

text-align: center;
text-decoration: underline;
text-transform: lowercase;

testo centrato, sottolineato, trasformato in minuscolo. raggruppando:

interlinea

dato questo paragrafo a 4 righe con la classe spaziato

<p class="spaziato">
   <ul>
    <li class="squadra">MILAN</li><br>
    <li>Il resto della pagina</li><br>
    <li>Il resto della pagina</li><br>
    <li>Il resto della pagina</li><br>
   </ul>
</p>

imposto la spaziatura tra le righe con

line-height: 3em;

Ovviamente si può esprimere la spaziatura anche in pixel

list

Si può usare delle immagini al posto dei pallini con l’attriburo list-style-image 

.lista {
    list-style-image: url("https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Seme_coppe_carte_napoletane.svg/293px-Seme_coppe_carte_napoletane.svg.png");
}

usando il list-style-type si possono cambiare i pallini con altri simboli, se supportati dai browsers

list-style-type: lower-greek;

le lettere greche minuscole compariranno al posto dei pallini (non supportate dai vecchi internet explorer).

selettori

il simbolo di cancelletto # applica le regole a tutti gli elementi html che hanno quell’id specificato dopo il #.

#milan {background-color: black; color: red;}
#inter {background-color: black; color: blue;}
#juve {background-color: black; color: white;}

notiamo che i 3 selettori hanno in comune lo sfondo nero, per cui posso raggruppare tale proprietà a tutti e 3.

#milan, #inter, #juve {background-color: black}
#milan {color: red;}
#inter {color: blue;}
#juve {color: white;}

l’importante che ogni selettore venga separato da virgola. Poi posso inserire le regole specifiche per ognuno selettore. Il raggruppamento con virgola funziona con tutti i tag e le classi e gli id.

Facciamo un esempio per vedere un’altra possibilità, abbiamo del testo che parla di squadre di calcio, quindi applichiamo uno sfondo rosa e colore del testo nero (tipo gazzetta), però quando si parla comunque di una squadra e siamo all’interno di un elenco puntato, vogliamo che la scritta sia il doppio e in grassetto. Associamo quindi una classe squadra ai tag e scriviamo la regola css

.squadra { background-color: pink; color: black; }

Inoltre per applicare ulteriori regole quando la classe squadra è dentro <li>

LI .squadra {font-size: 2em; font-weight: bold }

quando la classe squadra (.squadra) sta dentro un tag <li> aumenta la dimensione e lo spessore.

Analogamente quando un id sta dentro un <li>

LI #milan {background-color: black; color: red;}

Si può assegnare più classi allo stesso elemento:

<li class="squadra preferita">GENOA</li>

e quindi la regola

.squadra.preferita {font-size: 5em;}

seleziono gli elementi che contengono nel loro elenco di classi sia preferita sia squadra. L’ordine col quale si mettono le 2 classi è indifferente, verranno applicate le regole  quei tag che contengono entrambe le classi.

Fino ad ora abbiamo applicato selettori in base al nome, ma è possibile farlo anche in base alla posizione reciproca nel documento html oppure in base al loro grado di parentela.

Potrei voler formattare diversamente il primo li di ogni lista

li:first-child { color: blue; font-style: italic;}

Questa regola viene applicata ad ogni primo list item di ogni lista (ul o ol) tramite l’operatore due punti ( : ) e la parola first-child .

p:first-child { color: blue; font-style: italic;}

In questo caso applico la regola ad ogni primo paragrafo della pagina. Se il paragrafo è contenuto all’interno di un <div> viene considerato come primo paragrafo (di quel div) e la regola viene applicata.

Sata la tabella

<table>
    <tr>
        <td><p>CREMONESE</p></td>
        <td><p>CASALESE</p></td>
    </tr>
    <tr>
        <td></td>
        <td></td>
    </tr>
</table>

applichiamo queste regole alla tabella e ai suoi elementi

table, tr, td {border: 2px black solid}

ora applico una regola generale ai paragrafi

p {font-size: 3em; color: blue;}

bene, voglio però applicare una regola differente ai paragrafi contenuti nei table data (td)

td > p {font-size: 1em; color: red}

Con questa forma si dice che ogni paragrafo figlio (simbolo maggiore) di ogni td . Si inizia sempre mettendo il genitore ! .

<td><span><p>CASALESE</p></span></td>

in questo caso la regola non viene applicata perché p non è figlio diretto di td, ma di span. Se voglio invece applicare la regola su ogni paragrafo contenuto, anche indirettamente, in ogni td, uso questa forma:

td p {font-size: 1em; color: red}

Qualunque paragrafo discendente da un td, viene applicata la regola.

table + p {background-color: pink; }

Questa sintassi è la fratellanza, e si legge come il primo paragrafo conseguente una tabella, applico la regola, aggiungo per prova un paragrafo dopo la tabella:

<table>
    <tr>
        <td><p>CREMONESE</p></td>
        <td><span><p>CASALESE</p></span></td>
    </tr>
    <tr>
        <td></td>
        <td></td>
    </tr>
</table><p>sottotitolo</p>