I CSS3 hanno visto l'inizio del loro processo di definizione da parte del W3C gi� nel 1999. A distanza di oltre nove anni, tale processo � ancora in corso, e ci vorranno forse ancora diversi anni prima che diventino una raccomandazione e si possano usare con sicurezza sui diversi browser.
La raccomandazione ufficiale del W3C per quanto riguarda i CSS � rappresentata dai CSS2, anche se molti produttori di browser utilizzano come riferimento per l'aderenza agli standard anche i CSS2.1, una revisione della specifica ufficiale rimasta per� allo stato di working draft (ad oggi i CSS2.1 sono supportati nella quasi totalit� dalle ultime versioni di Firefox, Safari e Opera, un po' indietro risulta invece Internet Explorer 7, il cui supporto � buono ma non totale).
Molti web designer e autori del panorama internazionale iniziano a chiedersi quando sar� possibile usare i CSS3. Tra i tanti, da evidenziare la proposta di Andy Budd sulla definizione dei CSS2.2 di cui abbiamo parlato sul blog. Si tratterrebe di una specifica intermedia che racchiuderebbe le propriet� CSS3 che attualmente contano almeno un'implementazione sui browser. La proposta di Budd sta facendo discutere, e ha quanto meno risvegliato l'interesse sui CSS3.
Che vengano implementati i CSS 2.2 ancora non � possibile stabilirlo, come non � possibile sapere quando i web designer potranno beneficiare in maniera cross-browser delle utilissime propriet� CSS3. Ma � bene iniziare a conoscerle, soprattutto quelle che sono parzialmente implementate sui browser attuali: � questo lo scopo di questo articolo, in cui introdurremo i CSS3 e vedremo come sia possibile utilizzare alcune delle caratteristiche da subito e imparare ad osare.
"Piuttosto che tentare di forzare dozzine di aggiornamenti in una singola specifica monolitica, sar� pi� facile e pi� efficiente essere in grado di aggiornare in una maniera pi� puntuale e precisa singole parti della specifica. I moduli consentiranno quindi una pi� flessibile e veloce evoluzione delle specifiche nella loro totalit�."
Tra i diversi moduli del W3C, vale la pena di citare il modulo per i selettori, per il box model, quello per il layout, per gli sfondi e i bordi e per il testo multicolonne.
In questa pagina vengono presentati brevemente i moduli CSS3 e il loro stato attuale nel processo di definizione. Ciascun modulo, prima di arrivare a diventare parte integrante di una specifica, dovr� attraversare le seguenti fasi:
Si tratta di un lungo iter, soprattutto considerando che fino allo stato di reccomandation un singolo modulo pu� anche arretrare nei vari step se non dovessero esserci le condizioni per procedere al passo successivo.
Come si potr� notare molti dei moduli sono allo stato iniziale, ma ci� per fortuna non ha impedito a browser vendor quali Opera, Firefox e Safari di implementare alcune utili propriet�. In generale, � buona l'aderenza dei selettori CSS3 sui browser attuali; ma per quanto riguarda le propriet�, a volte si tratta di implementazioni non standard e soluzioni proprietarie fin tanto che il lavoro sui CSS3 porti a delle specifiche definitive, ovvero delle reccomandations.
Firefox e Safari per convenzione hanno su alcune di esse rispettivamente i prefissi -moz e -webkit. Si possono trovare ben documentate nel sito CSS3.info, un pratico riferimento per tutto ci� che riguarda il mondo dei CSS3.
Dopo questa breve introduzione teorica ai CSS3, vedremo nel prossimo appuntamento lo stato attuale dei CSS3 sui browser, insieme ad un semplice metodo per poterli usare da subito. Non mancate!
Il primo e pi� importante concetto � che dovremo introdurre soluzioni simili attraverso quello che � il progressive enhancement, ovvero l'arricchimento progressivo. Dovremo fare quindi in modo che i browser capaci siano in grado di beneficiarne, ma garantire soprattutto che sugli altri browser non vengano compromessi aspetti fondamentali quali resa visuale, usabilit�, accessibilit� e fruibilit� dei contenuti. In sostanza, allo stato attuale delle cose, l'unico uso possibile dei CSS3 � per scopi puramente decorativi ed effetti grafici non indispensabili, che magari sarebbero possibili altrimenti solo attraverso l'uso di immagini.
Il secondo punto � la mantenibilit�: mentre sappiamo ad oggi che i CSS2 sono una raccomandation, i CSS3 sono ancora in fase di sviluppo. Utilizzare soluzioni CSS3, ancor pi� se si tratta di soluzioni proprietarie, potr� richiedere un intervento sul CSS di un sito ad ogni evoluzione delle specifiche o qualora venga rilasciata una nuova versione di un browser.
Il terzo punto � la separazione, che deriva dal punto precedente. A parer mio, il modo migliore per poter sfruttare oggi le caratteristiche CSS3 � tenerle separate dal CSS principale, che dovr� aderire alle specifiche CSS2. Ci� dovrebbe garantire una buona stabilit�, confinando eventuali aggiornamenti nel CSS dedicato.
Quarto ed ultimo punto, ma non meno importante, � la validazione. Il validatore CSS accompagner� la definizione delle specifiche CSS3 fino allo stato di reccomandation. In ogni caso poi, servirsi di soluzioni proprietarie con prefisso -moz e -webkit non consente la validazione.
Alla luce di quanto appena detto, ho ideato una piccola soluzione per poter usare i CSS3 e garantire una buona separazione dal foglio di stile principale, oltre che la mantenibilit� e validalizione. Vediamola.
Ci� consente infatti di mantenere il foglio di stile principale intatto e senza la necessit� di modifiche, oltre a permetterne la validazione. Unico difetto � la dipendenza da Javascript: se risulta disabilitato sul browser dell'utente non � possibile caricare il CSS aggiuntivo. C'� da evidenziare che comunque una percentuale che oscilla tra il 95 e il 99% degli utenti ha Javascript abilitato. Inoltre, quello che andremo ad aggiungere attraverso Javascript � un CSS che per logica dovrebbe presentare caratteristiche di presentazione non essenziali, e pi� che altro decorative per i browser che potrebbero beneficiarne.
Siamo cos� pronti a presentare un esempio: si tratta di un semplice div che se visto con Firefox o Safari (versione 3 o con una versione recente di Webkit), dovrebbe avere gli angoli arrotondati. Torneremo sull'implementazione del CSS in seguito: quello su cui vorrei concentrare l'attenzione adesso � l'uso di Javascript per la parte CSS3 della pagina.
Se guardate il codice nella sezione head della pagina di esempio, noterete che ci sono due elementi script:
<script type="text/javascript" src="addCSS.js"></script> <script type="text/javascript">AddCSS('border.css')</script>La prima riga serve per includere il piccolo script esterno, che pesa meno di mezzo Kbyte. Non sono necessarie conoscenze di Javascript per poterlo usare, ma per i curiosi e chi � un po' pratico di Javascript ho preparato la pagina con il suo codice da consultare.
function AddCSS(fn){ var head = document.getElementsByTagName("head"), s=head[0] ? document.createElement("link") : null; if(s){ s.setAttribute("href",fn); s.setAttribute("rel", "stylesheet"); s.setAttribute("type", "text/css"); head[0].appendChild(s); } else setTimeout(function(){AddCSS3(fn)},10); }Tornando alle due righe viste sopra per incorporare lo script: salvo necessit� di ridefinire il percorso del file, la prima riga per incorporare necessita di modifiche.
Attraverso il secondo blocco script verr� specificato invece il nome del file CSS da aggiungere alla pagina. All'interno del blocco script in questo caso, come si pu� notare, c'� un'istuzione ovvero AddCSS('border.css'). Tra i singoli apici baster� indicare il nome del file CSS da incorporare nella pagina, eventualmente con il percorso, e lo script si preoccuper� del resto. Da evidenziare che � possibile mediante lo script aggiungere diversi file CSS, e che lo script non dovrebbe dare conflitti con altri eventuali script della pagina.
A questo punto non ci resta che procedere ad introdurre le caratteristiche dei CSS3 in pratica: nel prossimo appuntamento partiremo dai selettori. Alla prossima!
Per quanto riguarda il supporto dei browser: generalmente i selettori CSS3 sono ben supportati da Opera, Firefox e Safari; la nomenclatura adottata dai browser � aderente al modulo del W3C. C'� da dire anche che, sebbene si tratti di una parte potente e versatile dei CSS3, � forse ad oggi quella da usare con pi� cautela: infatti proprio per la loro natura, un selettore non supportato � in grado di inibire l'intera regola a cui appartiene.
I selettori di attributo Uno classe di selettori utilissima nei CSS3 � quella dedicata ai selettori di attributo, gli unici ad essere tra l'altro supportati anche da IE7, oltre che ovviamente da Opera, Firefox e Safari. Vediamo brevemente di cosa si tratta:
La pseudo-classe della forma selettore:nth-child(a+bn), dove a e b sono numeri interi con segno mentre n � una costante, definisce una regola attraverso la quale � possibile individuare un elemento individuato da "selettore" che sia il figlio con ordine corrispondente al numero o alla formula espressa tra parentesi. Alcuni esempi:
Figura 1 - selezioni personalizzate con i CSS3
La pseudo-classe ::selection permette di definire una regola per controllare l'apparenza del testo selezionato dall'utente. Regola che potr� includere, almeno dai test che ho potuto svolgere, solo il colore di sfondo e del testo della selezione.
Mentre Safari aderisce alla nomenclatura dei CSS3, per Firefox e i browser Gecko in generale, necessitano del prefisso "-moz-". Ecco le due regole utilizzate nell'esempio per far si che il testo selezionato risulti rosso su sfondo giallo:
*::selection{background: #FF0;color: #C00} *::-moz-selection{background: #FF0;color: #C00}� auspicabile che nelle future versioni di Firefox la pseudo-classe aderir� alla nomenclatura delle specifiche, e magari anche che qualche altro browser la supporti. Nel frattempo, per consentire la validazione del CSS principale, � preferibile tenere le due regole viste sopra confinate in un foglio di stile ad hoc. Nell'esempio ho salvato le due regole nel file "selection.css" e le ho incluse nella pagina con lo script che abbiamo presentato lo scorso appuntamento.
Questo � tutto per quanto riguarda i selettori. Non ci resta che vedere alcune delle potenti propriet� CSS3. Saranno argomento del prossimo appuntamento. Non mancate!
Figura 2 - testo con ombra con i CSS3 e Safari
Ecco il CSS dell'esempio per quanto riguarda l'ombra:
h1{text-shadow: #999 3px 4px 5px}La propriet� text-shadow accetta 4 valori, che sono nell'ordine:
Figura 3 - div con effetto ombra
Ecco la parte del CSS dell'esempio relativo all'ombra, aggiunto come negli altri esempi da Javascript:
div#box{-webkit-box-shadow: 2px 2px 5px #777; box-shadow: 2px 2px 5px #777}I valori ammessi dalla propriet� box-shadow sono nell'ordine: la traslazione orizzontale, quella verticale, la profondit� dell'ombra e il suo colore. Da notare che nel codice dell'esempio ho anche incluso la propriet� standard box-shadow, cos� da averla gi� pronta nel caso in cui venga implementata dalle future versioni dei browser. Un accorgimento � da tenere per� sempre presente: quando succeder�, bisogner� accertarsi se il numero o l'ordine dei valori ammessi dovesse cambiare. Da notare che questa propriet�, attualmente supportata solo da Safari, � utilizzabile anche in combinazione con gli angoli arrotondati, che sono il prossimo argomento.
Attualmente, solo Safari e Firefox li supportano, con le soluzioni proprietarie -webkit-border-radius e -moz-border-radius. Vediamo per prima cosa l'esempio e il suo screenshot:
Figura 4 - Angoli e bordi arrotondati su Safari
Ora il codice CSS dell'esempio per quanto riguarda la parte sugli angoli arrotondati:
div#box1{-webkit-border-radius:5px; -moz-border-radius:5px; border-radius:5px} div#box2{-webkit-border-radius:20px; -moz-border-radius:20px; border-radius:20px}La propriet� border-radius (e le sue derivate non standard) utilizzano un solo valore nell'esempio, ovvero il raggio dell'angolo arrotondato. Alcune cose da evidenziare: Firefox ha la tendenza a rendere gli angoli pi� piccoli rispetto a Safari; sempre in Firefox angoli e bordi arrotondati risultano privi di antialiasing, il che li rende non troppo curati. Da notare infine che se per ottenere i bordi arrotondati su un elemento, basta assegnargli un bordo.
Roger Johansson ha pubblicato gi� a settembre 2005 Custom borders with advanced CSS che presenta due esempi (primo e secondo) di utilizzo degli sfondi multipli. A distanza di quasi due anni, sono a parer mio ancora da considerare come un'ottima sperimentazione.
Questo � tutto per ora per la parte grafica delle propriet� CSS3 Nel prossimo e ultimo appuntamento vedremo un esempio riassuntivo e introdurremo le colonne multiple. Non mancate!