Le pseudo-classi CSS sono utilizzate per aggiungere effetti speciali ad alcuni selettori e si riconoscono perchè hanno i "due punti " che precedono la dichiarazione. I CSS3 stanno per introdurre una gran quantità di nuove pseudo classi, che renderanno la vita dei webdesigner molto più facile (se si esclude la compatibilità con tutti i browser). Le pseudo-classi aiutano sia l’estetica e l’usabilità, e possono fare velocemente e facilmente cose che una volta erano difficili da ottenere.
Purtroppo, anche se alcune di esse appartengono già alle specifiche CSS 2.1, non sono supportate da nesusn browser IE. Ecco allora che ci vengono in aiuto alcune librerie JavaScript che uniformano il comportamento di IE ai browser più recenti.
IE7.js è una libreria JavaScript (100kb) per far sì che Internet Explorer 6+ si comporti come un browser standard-compliant. Essa risolve molti problemi legati a HTML, CSS e fa funzionare correttamente con IE5 e IE6 le PNG trasparenti.
Scarichiamola e scegliamo di includere il JavaScript che ci permette di aggiornare tutti gli IE alla versione 9, così:
<!--[if lt IE 9]> <script src="IE9.js"></script> <![endif]-->
Pseudoclassi: sintassi
Tutte le pseudo-classi seguono questa sintassi:
elemento:pseudoClasse { ... }
Alcune pseudo-classi fanno uso anche delle parentesi. Per esempio, la pseudo-classe :not()
dichiara quale regola CSS non applicare. Ciò è utile quando si desidera applicare qualcosa a tutto tranne a un certa classe/ID. Per esempio, questa dichiarazione:
.miaClasse:not(div) { background:#CCC; }
imposta uno sfondo di colore #CCC
per tutti gli elementi che non siano div
.
Utilizzo delle pseudo-classi
Pseudo-classi correlate ai link
Queste pseudo-classi applicano degli stili ai diversi stati di un link. Ecco di seguito la lista completa e cosa possiamo ottenere:
:link
applica uno stile a un link non visitato:visited
applica uno stile a un link visitato:hover
applica uno stile su un elemento al passaggio del mouse:active
applica uno stile a un elemento attivo. Per esempio, un link è attivo da quando ci si clicca a quando si rilascia il click
A questo riguardo occorre ricordare che l’ordine sopra indicato non è casuale: in fatti, ogni pseudo-classe link-related ha una sua specificità.
Esiste una sorta di short-hand per ricordarsi la corretta successione: prendendo la lettera iniziale di ogni stato si ottiene "LVHA", che può essere ampliato a "LoVe HAte".
Pseudo-classi correlate a Input & link
:focus
applica uno stile a un elemento in uso. Per esempio, quando si scrive dentro unatextarea
, in quel momento essa è in uso:target
se si dispone di un URL tipoindex.html#about
, questo permetterà di applicare i CSS per l’elemento conid="about"
:enabled
seleziona tutti gli elementiinput
in statoenable
:disabled
seleziona tutti gli elementiinput
in statodisabled
:checked
controllato nelle caselle di immissione selezionate:indeterminate
seleziona i radio e i check-box, quando essi non sono né selezionata né non selezionata:required
seleziona gli elementiinput
che sonorequired
:optional
seleziona gli elementiinput
che sonooptional
:invalid
selezionainput
non validi:in-range
selziona elementi che sono in unrange
(da utilizzare coninput type="range"
in HTML5):out-of-range
seleziona elementi fuori dalrange
:default
seleziona l’elemento di default, per esempio, in unform
il bottonesubmit
:valid
seleziona un campoinput
valido (HTML5)
Pseudo-classi correlate alla posizione/numero
Ecco un esempio:
:root
applica uno stile CSS all’elemento radice, ossia il tag <html> in un documento HTML:first-child
applica uno stile al primo figlio di un elemento:last-child
applica i CSS all’ultimo elemento contenuto. Esempio divp:last-child
seleziona l’ultimo paragrafo d undiv
:nth-child(N)
seleziona elementi numerati, su base 1. Per esempio,p:nth-child(3)
seleziona l’elementop
che è il terzo figlio. Si possono anche aggiungere regole, per esempio p:nth-child(2n+1), doven
è il numero di partenza partendo da0
e viene incrementato di1
. Perciò, questa regola seleziona tutti gli elementi pari (odd): in questo caso è equivalente a scriverenth-child(odd)
, così come per i dispari si scriventh-child(even)
:nth-of-type(N)
applicare i CSS a un elemento numerato di un certo tipo. Per esempio:div:nth-of-type(2)
seleziona il secondo di quel tipo:nth-last-of-type(N)
seleziona un elemento in base alla sua posizione, per esempionth-last-of-type(4)
:first-of-type
applica i CSS solo al primo alemento di quel genere. Per esempio, se ci sono duediv
consecutivi, applica la regola solo al primo:last-of-type
Seleziona l’utlimo elemento di un genere:only-child
seleziona un elemento solo se è l’unico figlio del contenitore padre:only-of-type
seleziona un elemento solo se esso è l’unico nel suo genere contenuto nell’elemento padre
Pseudo-classi relazionali
:not(elemento | classe)
applica una regola CSS solo agli elementi che non sono specificati tra le parentesi:empty
applica i CSS a un elemento solo se è vuoto
Pseudo classi e paseudo elementi legati al testo
Pseudo-elementi
:first-line
definisce lo stile CSS della prima riga di un elemento:first-letter
definisce lo stile CSS del primo carattere di un elemento
Pseudo-classi
:lang()
applica uno stile a un elemento che usa una lingua specifica, per esempio:lang(en)
per l’inglese. È quindi possibile metterelang = "en"
in un tag HTML e impostare gli stili solo per esso::selection
permette di cambiare lo stile del testo selezionato nel browser:read-only
seleziona gli elementi che sonoread-only
:read-write
seleziona la parte editabile in un elemento
Content-related pseudo-elementi
:before
è in grado di aggiungere contenuti prima di un certo elemento:after
è in grado di aggiungere contenuti, dopo un certo elemento
jQuery: pseudo-selettori CSS3
jQuery permette di usare tutti questi selettori, per esempio:
:first
funziona come:nth-child(1)
:eq(X)
è uguale a:nth-child(X)
:contains('text')
:lt(X)
come:nth-child(-n+X)
, seleziona “i primi X elementi”:gt(X)
è come:nth-child(n+X)
, seleziona tutto tranne “i primi (X-1) elementi”:even
è come:nth-child(even)
o:nth-child(2n)
:odd
è uguale a:nth-child(odd)
o:nth-child(2n+1)
:has(S)
controlla se l’elemento contiene un certo discendente
Oltre a questi ve ne sono molti altri.
Selettori di discendenza
C’è una differenza tra figli e discendenti?
Vediamo come impostare degli stili CSS per capire come funzionano il combinatore figlio diretto, il combinatore fratello adiacente, e il combinatore fratello di pari livello.
Child: combinatore "figlio diretto"
Nel codice sottostante, dichiariamo una discendenza generica (Combinatore del discendente – Descendant), e di seguito, una diretta.
#child p { color: #000;font-weight:normal; } #child > p { color: #F00;font-weight:bold; }
Adjacent sibling: combinatore "fratello adiacente"
Ecco come funziona adjacent sibling: in pratica appica lo stile all’elemento, se e solo se, esso è immediatamente successivo altro elemento indicato.
p + p { font-size: smaller; } /* Applica lo stile solo al paragrafo che ne segue un altro (adiacente) */ #intro + ul { margin-top: 0; } /* Applica lo stile solo alla lista che segue direttamente un elemento con ID intro */
General sibling: combinatore "fratello generico"
General sibling è molto simile ad adiacent sibling: la differenza è che l’elemento che viene selezionato non ha bisogno di essere immediatamente successivo al primo elemento, ma può apparire ovunque dopo di esso. Ecco un esempio di general sibling:
p ~ p { background-color:#0F0; color:#FFF; padding:10px; }
Letture consigliate
Cleaner Code with CSS3 Selectors
Sitepoint: CSS3 Pseudo-classes
What is Modernizr?
IEe7-js.googlecode
Sizzle: A pure-JavaScript CSS selector engine
Enable CSS pseudo-element selectors in Internet Explorer with IE
The Mysterious Pseudo Class in CSS
Child and Sibling Selectors
Meet the Pseudo Class Selectors
CSS2 Test Suite: Prototypical Pages
Pseudo Elements Guide
CSS Pseudo Elements: The Syntax
I selettori combinatori nei CSS3
Selettori CSS3 cross-browser con jQuery