HTML, CSS e tutto il resto
In: CSS| HTML| JavaScript| Webdesign
16 mag 2010Le 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]-->
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.
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 clickA 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".
:focus applica uno stile a un elemento in uso. Per esempio, quando si scrive dentro una textarea, in quel momento essa è in uso:target se si dispone di un URL tipo index.html#about, questo permetterà di applicare i CSS per l’elemento con id="about":enabled seleziona tutti gli elementi input in stato enable:disabled seleziona tutti gli elementi input in stato disabled: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 elementi input che sono required:optional seleziona gli elementi input che sono optional:invalid seleziona input non validi:in-range selziona elementi che sono in un range (da utilizzare con input type="range" in HTML5):out-of-range seleziona elementi fuori dal range:default seleziona l’elemento di default, per esempio, in un form il bottone submit:valid seleziona un campo input valido (HTML5)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-childapplica i CSS all’ultimo elemento contenuto. Esempio div p:last-child seleziona l’ultimo paragrafo d un div:nth-child(N) seleziona elementi numerati, su base 1. Per esempio, p:nth-child(3) seleziona l’elemento p che è il terzo figlio. Si possono anche aggiungere regole, per esempio p:nth-child(2n+1), dove n è il numero di partenza partendo da 0 e viene incrementato di 1. Perciò, questa regola seleziona tutti gli elementi pari (odd): in questo caso è equivalente a scrivere nth-child(odd), così come per i dispari si scrive nth-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 esempio nth-last-of-type(4):first-of-type applica i CSS solo al primo alemento di quel genere. Per esempio, se ci sono due div 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: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:first-line definisce lo stile CSS della prima riga di un elemento:first-letter definisce lo stile CSS del primo carattere di un elemento:lang() applica uno stile a un elemento che usa una lingua specifica, per esempio :lang(en) per l’inglese. È quindi possibile mettere lang = "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 sono read-only:read-write seleziona la parte editabile in un elemento:before è in grado di aggiungere contenuti prima di un certo elemento:after è in grado di aggiungere contenuti, dopo un certo elementojQuery 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 discendenteOltre a questi ve ne sono molti altri.
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.
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; }
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 è 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; }
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
Questo blog si offre come spazio di condivisione e conoscenza per tutti i webdesigner principianti che aspirano ad allargare le proprie conoscenze su html e css.