Css
Css
Introduzione
Dietro il semplice acronimo CSS (Cascading Style Sheets - Fogli di stile a cascata) si nasconde uno
dei fondamentali linguaggi standard del W3C. La sua storia cammina su binari paralleli rispetto a
quelli di HTML, di cui vuole essere l'ideale complemento. Da sempre infatti, nelle intenzioni degli
uomini del Consortium, HTML, cos come la sua recente evoluzione, XHTML, dovrebbe essere
visto semplicemente come un linguaggio strutturale, alieno da qualunque scopo attinente la
presentazione di un documento. Per questo obiettivo, ovvero arricchire l'aspetto visuale ed estetico
di una pagina, lo strumento designato sono appunto i CSS. L'ideale perseguito da anni si pu
sintetizzare con una nota espressione: separare il contenuto dalla presentazione.
La prima specifica ufficiale di CSS (CSS1) risale al dicembre del 1996. Nel maggio 1998 stata la
volta della seconda versione: CSS2. Niente stravolgimenti, ma molte aggiunte rispetto alla prima.
CSS2 non altro che CSS1 pi alcune nuove propriet, valori di propriet e definizioni per stili non
canonici come quelli rivolti alla stampa o alla definizione di contenuti audio. E' attualmente allo
stato di Working Draft la nuova specifica CSS3.
A cosa servono
Se siete seriamente interessati alle tecnologie web non potete ignorare i CSS. Chi conosce un
minimo di HTML pienamente consapevole dei limiti di questo linguaggio sul lato della pura
presentazione. A dire il vero, non giusto parlare di limiti: HTML non nato per questo. E' stato
per piegato a fare cose che intrinsecamente non era in grado di fare. Bene: quasi tutto quello che
con HTML non potete realizzare, riuscirete a farlo con i fogli di stile.
Finalmente, ad esempio, potrete dare al testo delle vostre pagine un aspetto da word-processor: non
solo con il colore o i font che preferite, ma con un sistema di interlinea pratico e funzionale, con le
decorazioni che desiderate, riuscendo a spaziare lettere e parole, impostando stili diversi per titoli e
paragrafi, sfruttando i benefici dell'indentatura o della giustificazione.
Ancora, potrete finalmente distanziare gli elementi della vostra pagina in maniera semplice e
intuitiva con un potente meccanismo di gestione dei margini. Tonnellate di gif trasparenti usate per
spaziare possono essere finalmente gettate nel cestino del vostro computer. E se i margini non
bastano sarete in grado ora di aggiungere bellissimi bordi non solo alle tabelle, ma a tutti gli
elementi di una pagina.
Per non parlare degli sfondi: li potrete applicare a quello che volete. E dimenticate quelle brutte
micro-textures. Finalmente potrete sbattere su una pagina, magari ben piazzato al centro, quel
vostro bellissimo disegno di 600x400 pixel senza doverlo necessariamente vedere trasformato in
orribili riquadri ripetuti sulla pagina. Sarete voi a decidere come usare un'immagine di sfondo: la
potete ripetere in una sola direzione, in due o per niente! Facile e comodo.
La cosa pi bella che la gestione del sito non sar mai pi un incubo. Se quel bellissimo disegno
di prima vi stufa, non dovrete pi andare a modificare una per una 300 pagine! I CSS sono separati
dal documento. Aprite un foglio di stile, cambiate l'immagine e il gioco fatto. Il risultato sono
pagine pi leggere e facili da modificare. Milioni di byte di banda risparmiati per la gioia degli
utenti.
Se poi avete a cuore l'accessibilit i CSS sono uno strumento portentoso, anche grazie al fatto di
poter essere gestiti con linguaggi di scripting avanzati in grado di modificare con un solo click
l'aspetto di una pagina.
2
Le parole "titolo" e "paragrafo" appariranno su due righe diverse, perch <H1> e <P> sono elementi
blocco.
Gli elementi inline non possono contenere elementi blocco, ma solo altri elementi inline (oltre che,
ovviamente, il loro stesso tipo di contenuto, essenzialmente testo). Quando sono inseriti nel
documento non danno origine ad una nuova riga.
Una terza categoria quella degli elementi lista. Comprende in pratica solo l'elemento LI (list item).
districare nella struttura ad albero significa padroneggiare bene questo meccanismo e sfruttare al
meglio la potenza del linguaggio.
Presentiamo subito un frammento di codice HTML:
<html>
<head>
<title>Struttura del documento</title>
</head>
<body>
<h1>Titolo</h1>
<div>
<p>Primo <a href="pagina.htm">paragrafo</a></p>
</div>
<p>Secondo<b>paragrafo</b></p>
</body>
</html>
Il documento in buona sostanza una perfetta forma di gerarchia ordinata in cui tutti gli elementi
hanno tra di loro una relazione del tipo genitore-figlio (parent-child in inglese, imparate la dicitura
perch nei linguaggi come DOM o Javascript ci si riferisce agli ordini della gerarchia proprio con
questi termini.). Ogni elemento genitore e/o figlio di un altro.
Un elemento si dice genitore (parent) quando contiene altri elementi. Si dice figlio (child) quando
racchiuso in un altro elemento. In base a queste semplici indicazioni possiamo analizzare il nostro
documento.
BODY, ad esempio figlio di HTML, ma anche genitore di H1, DIV e P. Quest'ultimo a sua
volta genitore di un elemento B.
Ovviamente, se osservate bene, potreste concludere che anche BODY in qualche modo genitore di
B. Non esattamente cos. Introduciamo ora un'altra distinzione, mutuata anch'essa dal linguaggio
degli alberi genealogici, quella tra antenato (ingl: ancestor) e discendente (ingl: descandant).
Semplice da capire. La relazione parent-child valida solo se tra un elemento e l'altro si scende di
un livello. Esattamente come in un albero familiare si indica la relazione tra padre e figlio. Pertanto
possiamo dire che HEAD figlio di HTML, che A figlio di P, etc. tra DIV e A, invece si scende
di due livelli: diciamo allora che DIV un antenato di A e che questo rispetto al primo un
discendente.
C' un solo elemento che racchiude tutti e non racchiuso: HTML. Continuando con la metafora
familiare potremmo dire che il capostipite, ma in termini tecnici si dice che esso l'elemento
radice (ingl: root). E qui spazziamo il campo da un possibile fraintendimento: l'elemento radice di
un documento (X)HTML non BODY.
Come si vede abbiamo iniziato una guida dedicata a un linguaggio prettamente visuale tornando alle
origini di HTML, ovvero al concetto di struttura. Non un capriccio, semplicemente dare il
giusto inquadramento ai CSS: che sono nati per modificare lo stile di elementi strutturali e non
vanno intesi come un linguaggio grafico. Per queste cose esistono Flash o Photoshop.
Fogli collegati
Per caricare un foglio esterno in un documento esistono due possibilit. La prima e pi compatibile
quella che fa uso dell'elemento <LINK>. La dichiarazione va sempre collocata all'interno della
sezione <HEAD> del documento (X)HTML:
<html>
<head>
<title>Inserire i fogli di stile in un documento</title>
<link rel="stylesheet" type="text/css" href="stile.css">
</head>
<body>...
L'elemento <LINK> presenta una serie di attributi di cui importante spiegare significato e
funzione:
1. rel: descrive il tipo di relazione tra il documento e il file collegato. E' obbligatorio. Per i CSS
due sono i valori possibili: stylesheet e alternate stylesheet. Approfondimenti nella lezione 5,
"Fogli di stile alternativi".
2. href: serve a definire l'URL assoluto o relativo del foglio di stile. E' obbligatorio.
3. type: identifica il tipo di dati da collegare. Per i CSS l'unico valore possibile text/css.
L'attributo obbligatorio.
4. media: con questo attributo si identifica il supporto (schermo, stampa, etc) cui applicare un
particolare foglio di stile. Attributo opzionale. L'argomento sar approfondito nella prossima
lezione.
5
Usare @import
Un altro modo per caricare CSS esterni usare la direttiva @import all'interno dell'elemento
<STYLE>:
<style>
@import url(stile.css);
</style>
Questo sistema uno dei modi pi sicuri per risolvere problemi di compatibilit tra vecchi e nuovi
browser. Ci torneremo quindi pi avanti. Per il momento basti notare che il CSS va collegato
definendo un URL assoluto o relativo da racchiudere tra parentesi tonde (ma vedremo che altri
modi sono accettati) e che la dichiarazione deve chiudersi con un punto e virgola.
Fogli incorporati
I fogli incorporati sono quelli inseriti direttamente nel documento (X)HTML tramite l'elemento
<STYLE>. Anche in questo caso la dichiarazione va posta all'interno della sezione <HEAD>:
<html>
<head>
<title>Inserire i fogli di stile in un documento</title>
<style type="text/css">
body {
background: #FFFFCC;
}
</style>
</head>
<body>...
Come si vede il codice inizia con l'apertura del tag <STYLE>. Esso pu avere due attributi:
1. type (obbligatorio)
2. media (opzionale)
per i quali valgono le osservazioni viste in precedenza. Seguono le regole del CSS e la chiusura di
</STYLE>.
Fogli in linea
L'ultimo modo per formattare un elemento con un foglio di stile consiste nell'uso dell'attributo style.
Esso fa parte della collezione di attributi (X)HTML definita Common: si tratta di quegli attributi
applicabili a tutti gli elementi. La dichiarazione avviene a livello dei singoli tag contenuti nella
pagina e per questo si parla di fogli di stile in linea. La sintassi generica la seguente:
<elemento style="regole_di_stile">
Se, ad esempio, si vuole formattare un titolo H1 in modo che abbia il testo di colore rosso e lo
sfondo nero, scriveremo:
<h1 style="color: red; background: black;">...</h1>
Le cose da osservare nel codice sono due. Come valore di style si possono dichiarare pi regole di
stile. Esse vanno separate dal punto e virgola. I due punti si usano invece per introdurre il valore
della propriet da impostare.
Consigli
A questo punto giusto chiedersi: quando usare l'una o l'altra soluzione? Il punto di partenza nella
risposta deve essere questo: i risultati nella formattazione del documento non cambiano. La giusta
soluzione sar quindi quella richiesta dalla nostra applicazione. Il consiglio sentito semplice:
pianificate, pensate in anticipo a quella che dovr essere la struttura delle pagine del sito. Mettetevi
davanti a un monitor o su un pezzo di carta e ragionate: qui metter un tag <H1>, qui user una
tabella a due colonne, questo box deve avere lo sfondo rosso, etc.
A questo punto potrete costruire per prima cosa un foglio di stile generico ed esterno, da applicare a
tutte le pagine del sito. Esso conterr le regole per formattare gli elementi o le sezioni presenti in
tutte queste pagine.
Passate poi ad analizzare sezioni ed elementi presenti solo in certe pagine o che vogliate modificare
solo in determinati casi. Supponete, ad esempio, di voler cambiare in rosso il colore di un titolo
iniziale solo in una pagina delle 150 del vostro sito. Che fare? Semplice: usare uno stile incorporato
solo in quella pagina:
<style type="text/css">
h1 {color: red; }
</style>
Per la legge che regola il meccanismo del cascading questo stile prevarr su quello del CSS esterno.
Se le pagine invece di una fossero 20 il discorso diventerebbe un p complicato. Bisognerebbe
armarsi di pazienza e modificarle una per volta. Anche qui per la soluzione dietro l'angolo. Basta
fare un nuovo CSS esterno e collegarlo al documento con @import insieme al foglio generico:
<link rel="stylesheet" type="text/css" href="stile.css">
<style type="text/css">
@import url(nuovo_stile.css);
</style>
Anche questa volta, le regole dello stile collegato con @import vanno a sovrascrivere quelle
ereditate dall'elemento <LINK>. Sono solo alcune delle strategie possibili e mi si perdoni la forse
eccessiva semplificazione. Basta rendere l'idea.
Un'ultima notazione. L'uso estensivo di fogli in linea rischia di compromettere uno dei principali
vantaggi dei CSS, ovvero avere pagine pi leggere e facili da gestire. Intervenire nei meandri di una
pagina per andare a modificare uno stile e ripetere l'operazione per quante sono le pagine del nostro
sito pu diventare davvero frustrante. Del resto, il loro uso ultimamente considerato deprecato
anche dal W3C.
Lattributo media
Nella lezione precedente abbiamo accennato all'attributo media. Grazie ad esso siamo in grado di
impostare un foglio di stile per ogni supporto su cui la nostra pagina verr distribuita. Una
possibilit davvero interessante e che andr sempre pi diffondendosi con l'ampliarsi dei mezzi di
diffusione delle pagine (X)HTML.
Dove prima c'era unicamente un browser, domani potranno sempre pi esserci palmari, cellulari e
altri dispositivi. Per non parlare dei software usati da disabili come i browser vocali. Ciascuno di
questi supporti presenta caratteristiche diverse in termini di memoria, ampiezza dello schermo e
7
funzionalit. Riuscire ad adattare uno stile unico a tutti praticamente impossibile, oltre che
controproducente. La soluzione ideale sta quindi nella creazione di fogli di stile ad hoc.
Sintassi
L'attributo media pu accompagnare sia l'elemento <LINK> che l'elemento <STYLE>. Ecco due
esempi di sintassi:
<link rel="stylesheet" type="text/css" media="print" href="print.css" />
<style type="text/css" media="screen">...</style>
Per sfruttare a fondo questa opzione fondamentale conoscere i diversi valori possibili per
l'attributo:
L'uso pi tipico di questa funzionalit consiste nel collegare al documento vari fogli di stile adatti a
ciascun supporto. Lo user agent che visualizzer la pagina sar in grado, se conforme agli standard,
di caricare quello giusto:
<link rel="stylesheet" type="text/css" media="screen" href="screen.css" />
<link rel="stylesheet" type="text/css" media="print, tv, aural" href="print.css"
/>
Uso e sintassi
Gli autori della specifica (X)HTML hanno esplicitamente previsto questo scenario introducendo
due valori possibili per l'attributo rel all'interno dell'elemento <LINK>:
8
stylesheet
alternate stylesheet
Il primo identifica il foglio di stile che servir a formattare normalmente il documento, diciamo il
CSS di default. Il secondo identifica un CSS come alternativo rispetto a quello standard. Ecco un
esempio di codice:
<link rel="stylesheet" type="text/css" href="stile.css" />
<link rel="alternate stylesheet" type="text/css" href="stile_alternativo.css" />
Sta all'autore implementare un sistema che consenta all'utente di scegliere dinamicamente lo stile
alternativo sostituendolo al primo. La via pi semplice di farlo con un semplice Javascript in
grado di intervenire su propriet e attributi dell'elemento <LINK>. Cliccando sul link viene caricato
il foglio alternativo.
Consigli
Questa funzionalit pu essere usata per vari scopi, tutti molto interessanti. Si potrebbero, ad
esempio, impostare due stili alternativi consentendo all'utente di scegliere tra diversi layout per la
pagina. O, ancora, creare meccanismi per modificare dinamicamente la dimensione dei caratteri,
con ottimi vantaggi in termini di accessibilit. Per il resto affidatevi alla vostra fantasia.
Compatibilit
Questa lezione soprattutto per chi si avvicina solo ora ai CSS. Non imparerete molto di concreto
ma avrete coscienza di un problema fondamentale: quello della compatibilit. Giusto per capire il
livello della questione, ho deciso di mettere all'inizio come una sorta di epigrafe questa frase di
Todd Fahrner:
una vergogna che i CSS, nati per essere semplici e avvicinabili dai non-programmatori, si siano
trasformati in una roba misteriosa come la Cabala!
I CSS sono uno strumento meraviglioso. Se ricordate le date di definizione delle due specifiche
potreste chiedervi spontaneamente: ma perch non sono stati usati da subito? .
Il problema che la piena coscienza da parte di produttori di browser e autori dell'importanza di
adottare linguaggi standard ha fatto molta fatica ad affermarsi. Netscape introduceva estensioni
proprietarie, Explorer rispondeva. E i poveri web-designer a cercare soluzioni in grado di conciliare
gli opposti. In tutto ci ci si dimenticava di rafforzare il supporto dei linguaggi del W3C. E i CSS
rimanevano una cosa di nicchia, per pochi adepti che non avevano nemmeno uno strumento per
testarne seriamente le potenzialit
Una prima svolta, sul versante dei browser di massa, si ebbe con Explorer 5, il primo ad offrire un
supporto adeguato del linguaggio. I predecessori di quarta generazione ne offrivano uno meno che
accettabile. Lentamente, e anche grazie all'opera di gruppi di pressione come il Web Standards
Project o di software-house come Opera, la consapevolezza aumentata. Oggi possiamo contare su
strumenti di navigazione che supportano la quasi totalit della specifica CSS2. Con un browser,
per, che surclassa tutti gli altri in questo ambito: Mozilla. Microsoft ha continuato la sua opera di
adeguamento, deludendo un p con Explorer 6, ma sfornando un eccellente navigatore per Mac.
Nonostante tutto la via dei CSS ancora lastricata di tanti problemi per gli sviluppatori. Due le
maggiori fonti di difficolt:
Retro-compatibilit
Per quanto riguarda la retro-compatibilit si hanno due strade. Si pu scegliere che non vale pi la
pena sprecare tempo per Netscape 4 e colleghi. Semplice, brutale, ma pienamente accettabile. La
valutazione delle statistiche sulle visite e sui software degli utenti la chiave per prendere una
decisione simile.
La seconda strada quella di compromesso, del metodo detto cross-browser. Si tratta di elaborare
strategie e di usare trucchetti in grado di preservare un minimo di compatibilit con il passato senza
rinunciare ai vantaggi dei CSS per i browser recenti. Essenzialmente, comunque, non si potr mai
fare a meno di costruire fogli di stile distinti, adatti rispettivamente ai nuovi e ai vecchi browser.
Esistono tre strategie di base per risolvere il problema:
Posto che un foglio di stile universale assai riduttivo, gli altri due approcci si differenziano per
l'origine della soluzione. Con lo sniffing tutto viene demandato ad una serie spesso complicata di
script. Con il metodo @import si rimane nell'ambito (X)HTML/CSS.
Diversit di rendering
Il secondo campo di battaglia ancora pi minato del primo. L possiamo almeno decidere la fuga:
Che Netscape 4 vada al suo destino. Qui i mal di testa sono assicurati.
Il problema sta nel modo in cui ciascun browser, pur supportando una propriet, la applica. Un
esempio gigantesco. Explorer 5 per Windows supporta l'uso di parole chiave per definire le
dimensioni dei font, ma lo fa a modo suo, interpretando il valore medium in maniera errata (rende il
testo pi grande del dovuto).
Qui la strategia non pu essere univoca. Va valutata caso per caso. Spesso le propriet coinvolte da
queste differenze sono poco importanti e altrettanto spesso i problemi nascono su questioni
avanzate come il posizionamento dinamico degli elementi. Fatto sta che l'unica soluzione possibile
che posso darvi : testate le vostre pagine. Sempre. Con il maggior numero di browser possibile.
Valutate i risultati e se vi pare che le differenze siano trascurabili procedete senza problemi. Che
una pagina possiate vederla allo stesso modo su tutti i browser semplicemente un'utopia.
Se le differenze sono tante o tali da pregiudicare il layout della pagina affidatevi a Google o a
qualche buona risorsa sui CSS per risolvere il problema. Un trucchetto prima o poi viene inventato,
statene tranquilli. Due sono le risorse che vi propongo, la prima preventiva, la seconda per i casi
disperati.
Suite di test di CSS2: di, manco a dirlo, Eric Meyer. una pagina da cui potrete testare tutte le
propriet e i metodi di CSS2. L'approccio semplice. Visitate la pagina con il browser che volete
testare, scegliete la propriet che vi interessa e verificate il supporto. Le pagine di test sono costruite
in modo tale da rendere subito evidente eventuali comportamenti non-standard. L'opera
monumentale un'estenzione del lavoro fatto dal W3C e rimasto fermo a CSS1.
10
La seconda risorsa una vera miniera. Si tratta dell'archivio pubblico della migliore mailing-list
sull'argomento: css-discuss. Se non trovate una soluzione a un problema qui, vuol dire che non
stata ancora trovata.
Fig.1
L'illustrazione mostra la tipica struttura di una regola CSS. Essa composta da due blocchi
principali:
il selettore
il blocco delle dichiarazioni
Il selettore serve a definire la parte del documento cui verr applicata la regola. In questo caso, ad
esempio, verranno formattati tutti gli elementi <H1>: lo sfondo sar rosso, il colore del testo bianco.
I selettori possono essere diversi e a queste varie tipologie dedicheremo una delle prossime lezioni.
Per il momento sia chiara la funzione che essi svolgono.
Il blocco delle dichiarazioni delimitato rispetto al selettore e alle altre regole da due parentesi
graffe. Al suo interno possono trovare posto pi dichiarazioni. Esse sono sempre composte da una
coppia:
propriet
valore
11
Commenti
Per inserire parti di commento in un CSS racchiudetelo tra questi segni:
margin-top
margin-right
margin-bottom
margin-left
Approfondiremo nel corso dell'analisi delle propriet usi e costrutti sintattici di ciascuna. Per il
momento ci limitiamo all'elenco:
background | border | border-top | border-right | border-bottom | border-left |
cue | font | list-style | margin | outline | padding | pause |
12
I selettori
La parte preponderante della specifica CSS2 dedicata all'analisi delle diverse propriet in grado di
definire l'aspetto visuale di elementi e sezioni di una pagina. Prima di tutto, per, fondamentale
capire come e a cosa queste propriet possono essere assegnate. L'argomento sar l'oggetto delle
prossime quattro lezioni.
Fondamentalmente una regola CSS viene applicata ad un selettore. La parola parla da s: si tratta di
una semplice dichiarazione che serve a selezionare la parte o le parti di un documento soggette ad
una specifica regola. Quella che segue una lista commentata dei vari tipi di selettore. Per
verificare i concetti abbiamo preparato per ciascun tipo un documento di esempio con codice e
ulteriori spiegazioni.
Raggruppare
possibile nei CSS raggruppare diversi elementi al fine di semplificare il codice. Gli elementi
raggruppati vanno separati da una virgola.
Il raggruppamento un'operazione molto conveniente. Pensate a questo scenario:
h1 {background: white;}
h2 {background: white;}
h3 {background: white;}
Tutti e tre gli elementi hanno uno sfondo bianco. Invece di scrivere tre regole separate si pu fare
cos:
h1, h2, h3 {background: white;}
Alcune considerazioni importanti di cui tenere conto. Il selettore va letto per chiarezza da destra a
sinistra. Nel primo esempio verranno selezionati tutti i paragrafi (<p>) discendenti di elementi
<div>. Nel secondo tutti gli elementi <strong> che si trovino all'interno di un paragrafo.
Fate attenzione alla struttura del documento ed evitate possibili incongruenze. Esistono regole ben
precise sull'annidamento degli elementi che vanno rispettate sia in (X)HTML che nei CSS. Un
paragrafo, per esempio, non pu contenere un div, cos come un elemento inline non pu contenere
elementi blocco. Utili chiarimenti sull'argomento nella lezione "Il corpo del documento" della
Guida a XHTML.
Dei tre paragrafi solo il primo e il terzo sono figli diretti di body. Il secondo invece figlio diretto
di un elemento div. Tutti e tre, per, sono discendenti di body. L'immagine chiarisce ulteriormente
il concetto. Tra body e il primo e il terzo paragrafo si scende di un livello. Rispetto al secondo di
due livelli:
Sintassi
<body> p {color: black;}
Come si vede, un'ulteriore differenza sta nella sintassi. Per il child selector l'elemento padre va
racchiuso fra parentesi angolari < >. Anche in questo caso la lettura logica va fatta da destra a
sinistra. Nell'esempio si selezionano tutti i paragrafi figli diretti dell'elemento body.
14
Questo selettore non supportato da Explorer su Windows, cosa che ne limita notevolmente
l'utilizzo.
Il primo paragrafo adiacente al titolo h1, il secondo no e pertanto ad esso non potr applicarsi
questa regola:
h1 + p {color: red;}
In base a questa dichiarazione solo il primo dei due paragrafi avr il testo rosso.
Il segno di assegnazione della relazione per questo selettore +. L'adjacent-sibling selector non
supportato da Explorer Windows.
applicher uno sfondo rosso a tutti gli elementi input per cui sia stato impostato un attributo id, a
prescindere dal valore ad esso assegnato.
Attributo con valore
elemento [ attributo = "valore" ]
15
Seleziona gli elementi che abbiano come valore dell'attributo la stringa definita nella regola.
Pertanto:
input [ id = "text" ] { backgorund: red; }
applicher un sfondo rosso a tutti gli elementi input che abbiano come valore dell'attributo id
"text". Come si vede una sintassi pi restrittiva rispetto alla prima.
Attributo il cui valore contiene una stringa
elemento [ attributo t= "valore" ]
In questo caso vengono selezionati tutti gli elementi in cui il valore dell'attributo dichiarato
contenga la stringa definita nella regola.
img [ alt t= "foto" ] {margin: 10px;}
La regola applicher un margine di 10px a tutte le immagini in cui l'attributo alt contiene "foto".
Quindi, saranno selezionate sia questa immagine:
<img src="figura1.gif" alt="Foto del Colosseo" />
sia questa:
<img src="figura2.jpg" alt="Una bella foto del Duomo di Milano" />
selezioner tutte le immagini in cui l'attributo alt inizia con la stringa "figura".
Come vedete non succede nulla. Il problema che il valore dell'attributo class deve trovare una
corrispondenza in un foglio di stile. Qui, abbiamo definito un CSS incorporato creando un selettore
di tipo classe e assegnando ad esso il nome testorosso:
16
<style type="text/css">
.testorosso {
font: 12px arial, Helvetica, sans-serif;
color: #FF0000;
}
</style>
Il testo del nostro paragrafo sar ora formattato secondo i nostri desideri: testo rosso, carattere arial.
dimensione di 12px.
Lo stesso meccanismo valido per i selettori di tipo ID. Ma con una sola fondamentale differenza:
ad essa che dovete fare riferimento per scegliere se usare una classe o un ID. In un documento
(X)HTML l'attributo id usato per identificare in modo univoco un elemento. In pratica, se
assegno ad un paragrafo l'id "testorosso", non potr pi usare questo valore nel resto della pagina.
Di conseguenza, l'ID #testorosso dichiarato nel CSS trasformer solo quel paragrafo specifico. Una
singola classe, al contrario, pu essere assegnata a pi elementi, anche dello stesso tipo.
In un documento potr avere senza problemi questa situazione:
<p class="testorosso">....</p>
<div class="testorosso">....</div>
<table class="testorosso">...</table>
<p class="testorosso">....</p>
La classe .testorosso presente nel CSS formatter allo stesso modo il testo dei paragrafo, del div e
della tabella.
Non potr invece scrivere:
<p id="testorosso">....</p>
<div id="testorosso">...</div>
tutti i paragrafi della mia pagina avranno il testo rosso. E se volessi diversificare? Avere, ad
esempio, anche paragrafi con il testo nero? Sarei prigioniero della regola iniziale. Scrivo due classi,
una per il rosso e una per il nero, le applico di volta in volta secondo le mie necessit e il gioco
fatto.
La strategia dovr dunque essere questa. Se uno stile va applicato ad un solo specifico elemento
usate un ID. Se invece prevedete di usarlo pi volte, ovvero su pi elementi, definite nel CSS una
classe.
Chiariti i concetti di base, passiamo ad analizzare usi e sintassi.
Classe
Per definire una classe si usa far precedere il nome da un semplice punto:
.nome_della_classe
17
Questa la sintassi di base. Un selettore classe cos definito pu essere applicato a tutti gli elementi
di un documento (X)HTML.
Esiste un secondo tipo di sintassi:
<elemento>.nome_della_classe
Esso pi restrittivo rispetto alla sintassi generica. Se infatti definiamo questa regola:
p.testorosso {color: red;}
lo stile verr applicato solo ai paragrafi che presentino l'attributo class="testorosso". Anche qui
importante stabilire un minimo di strategia. Il secondo tipo di sintassi va usato solo se pensate di
applicare una classe ad uno specifico tipo di elemento (solo paragrafi o solo div, e cos via). Se
invece ritenete di doverla applicare a tipi diversi usate la sintassi generica.
Una terza possibile modalit quella che prevede la dichiarazione di classi multiple:
p.testorosso.grassetto {color:red; font-weight:bold;}
Questa regola applicher gli stili impostati a tutti gli elementi in cui siano presenti (in qualunque
ordine) i nomi delle classi definiti nel selettore. Avranno dunque il testo rosso e in grassetto questi
paragrafi:
<p class="grassetto testorosso maiuscolo">..</p>
<p class="testorosso grassetto">...</p>
ma non questo, perch solo uno dei nomi presente come valore di class:
<p class="grassetto">...</p>
ID
La sintassi di un selettore ID semplicissima. Basta far precedere il nome dal simbolo di cancelletto
#:
#nome_id
Con questa regola:
#titolo {color: blue;}
In realt questa modalit assolutamente superflua. Se l'id univoco non abbiamo alcun bisogno di
distinguere l'elemento cui verr applicata. Inoltre, la sintassi generica si rivela pi razionale e utile.
18
Le pseudo classi
Il concetto di pseudo-classe ha qualcosa di "filosofico". Una pseudo-classe non definisce infatti un
elemento ma un particolare stato di quest'ultimo. In buona sostanza imposta uno stile per un
elemento al verificarsi di certe condizioni.
A livello sintattico le pseuso-classi non possono essere mai dichiarate da sole, ma per la loro stessa
natura devono sempre appoggiarsi ad un selettore. Il primo costrutto che esaminiamo quello con
un elemento semplice:
a:link {color: blue;}
La regola vuol dire: i collegamenti ipertestuali (<A>) che non siano stati visitati (:link) avranno il
colore blue. Da qui risulta pi chiaro il concetto espresso all'inizio: la pseudo-classe :link definisce
lo stile (colore blue) solo in una determinata situzione, ovvero quando il link non stato attivato.
Appena ci dovesse avvenire, il testo non sar pi blue, perch la condizione originaria venuta
meno.
Torniamo alla sintassi. La pseudo-classe (tutte iniziano con i due punti) segue senza spazi,
l'elemento. Subito dopo, si crea nel modo consueto, il blocco delle dichiarazioni.
Una pseudo-classe pu anche essere associata a selettori di tipo classe. I costrutti possibili sono due.
Il primo quello sancito nella specifica CSS1. La pseudo-classe doveva seguire la dichiarazione
della classe:
a.collegamento:link {color: green;}
Come va letta questa regola? Avranno il testo verde (green) solo i link non visitati che abbiano
come attributo class="collegamento". Sar verde questo collegamento:
<a href="pagina.htm" class="collegamento">
in cui la classe segue la pseudo-classe. Significato e risultati sono comunque identici al primo
esempio. Il primo tipo di sintassi garantisce una maggiore compatibilit con i browser pi datati. Gli
esempi e la sintassi presentati valgono per tutte le pseudo-classi.
:first-child
supportata solo dai browser Gecko-based (Mozilla e Netscape 6/7) e da Explorer 5 Mac.
Seleziona e formatta un elemento che si trovi ad essere il primo elemento figlio di un altro
elemento.
19
Sintassi
<elemento>:first-child {<dichiarazioni>;}
Esempi
p:first-child {color:red;}
si capisce che solo i paragrafi in grassetto saranno rossi, perch sono primi figli, rispettivamente, di
elemento DIV e di un altro elemento td.
:link
Si applica solo all'elemento (X)HTML <A> che abbia anche l'attributo href. Quindi, non alle
cosiddette ancore invisibili ma solo ai link ipertestuali. Definisce lo stile per questo elemento
quando il collegamento punta ad un sito o ad una pagina non ancora visitati.
Per sintassi ed esempi si veda sopra.
:first-letter
Con questo selettore possibile formattare la prima lettera di qualunque elemento contenente del
testo. Le propriet modificabili sono ovviamente tutte quelle relative al carattere e al testo, ma
anche quelle legate al colore, allo sfondo, ai margini e al padding.
Sintassi
20
La sintassi di tutti gli pseudo-elementi soggetta alla stesse regole. La pi importante che essi non
possono essere dichiarati da soli, ma vanno sempre collegati ad altri selettori. Non importa di che
tipo essi siano. La definizione pi semplice quella che prevede l'applicazione di uno pseudoelemento a un selettore semplice:
p:first-letter {color: red; font-weight: bold;}
Per tutte le regole usate negli esempi il testo degli elementi presenter la prima lettera rossa e in
grassetto.
:first-line
Imposta lo stile della prima riga di un elemento contenente del testo.
Sintassi
Valgono le stesse regole generali viste per :first-letter.
Esempi
p:first-line {color: blue;}
p.nome_classe:first-letter {color: blue;}
td#nome_id:first-letter {color: blue;}
:before
Grazie allo pseudo-elemento :before, possibile inserire nel documento un contenuto non presente
nello stesso. Pi esattamente, con :before si inserisce contenuto prima dell'elemento definito nel
selettore. Il contenuto da inserire si definisce tramite la propriet content e pu essere una semplice
stringa di testo, un URL che punti a un'immagine o ad un'altro documento, un contatore numerico,
semplici virgolette.
Sintassi
Facciamo un esempio per chiarire l'uso. Immaginiamo di voler inserire un'immagine particolare
prima di ogni titolo <H1>. Useremo in questo modo lo pseudo-elemento :before:
h1:before {content: url(immagine.gif);}
:after
Pseudo-elemento complementare a :before. L'unica differenza che il contenuto viene inserito dopo
l'elemento specificato nel selettore.
Sintassi
h1:after {content: url(immagine.gif);}
h1#nome_id {content: "Testo del titolo";}
Le @-rules
Le cosiddette @-rules sono tipi particolari di costrutti che hanno una caratteristica comune: sono
tutti introdotti dal simbolo della chiocciola. La pronuncia identica a quella usata per gli indirizzi email, ovvero at-import, at-media, etc.
Per quanto riguarda la funzione rappresentano vie alternative, ma spesso pi flessibili e potenti, per
realizzare cose attuabili in altri modi. Abbiamo gi visto, nella lezione dedicata a come "inserire i
css in un documento", come il costrutto @import sia una valida alternativa all'elemento <LINK>
per collegare fogli di stile esterni.
A livello sintattico le @-rules posono essere definite o nel corpo del documento, per l'esattezza
all'interno dell'elemento <STYLE>:
<style type="text/css">
@rule
</style>
@import
@import viene usata innanzitutto per collegare un foglio di stile esterno al documento. La sintassi
generica la seguente:
<style type="text/css">
@import url(foglio_di_stile.css);
</style>
Come si vede, la direttiva accompagnata dall'indicazione url che precede l'indirizzo del CSS.
Questo racchiuso tra parentesi tonde. La @-rule deve presentare alla fine il punto e virgola di
chiusura.
Altre possibili sintassi, accettate dai browser recenti, ma problematiche con quelli pi datati:
URL con virgolette:
@import url("stile.css");
22
L'url del foglio di stile pu essere relativo, come negli esempi precedenti, o assoluto, come in
questo:
<style type="text/css">
@import url(http://www.miosito.it/foglio_di_stile.css);
</style>
Un principio fondamentale che all'interno del tag <STYLE> @import deve essere la prima regola
definita. In pratica, se si scrive cos la direttiva non funzioner e il CSS non sar caricato in quanto
@import preceduta da una regola che applica uno stile all'elemento <H1>:
<style type="text/css">
h1 { color: black; }
@import url(foglio_di_stile.css);
</style>
Le regole di tutti i CSS collegati in questo modo saranno applicate al documento secondo l'ordine e
i criteri stabiliti dalle norme sull'importanza e la specificit che vedremo tra poco in una prossima
lezione.
Un uso interessante di @import che pu essere usata anche all'interno di un foglio di stile per
incorporare un altro CSS esterno:
@import url(foglio.css)
h1 { color: black; }
Supponendo che questo sia un CSS, avremo il risultato di incorporare al suo interno il contenuto del
secondo foglio di stile (foglio.css).
possibile definire all'interno della direttiva @import anche il supporto cui applicare il CSS, in
modo simile a quanto abbiamo visto a proposito dell'attributo media. Per fare ci, basta far seguire
all'url del CSS l'indicazione di uno dei media previsti nella specifica:
<style type="text/css">
@import url(foglio_stampa.css) print;
@import url(foglio_schermo.css) screen, handheld;
</style>
23
@media
Lo stesso risultato (un CSS per ogni dispositivo) si pu ottenere con la direttiva @media. La
sintassi generica questa:
@media <valore> {regole CSS}
@media va, quindi, seguito dal nome di uno dei supporti scelti come target specifico e dalle regole
di stile racchiuse tra parentesi graffe. Esempio:
<style type="text/css">
@media screen {
h1 {color: black;}
p {color: red;}
}
@media print {
h1 {color: red;}
p {color: black;}
}
</style>
Anche questo costrutto va inserito, come si vede, all'interno del tag <STYLE>. Un uso pi potente,
per, quello di inserire la direttiva nel codice di un foglio esterno. Immaginate di avere un foglio
di stile per formattare le vostre pagine e che vogliate impostare colori diversi per un elemento a
seconda che si visualizzi il testo sullo schermo o su carta stampata. Invece di costruire due fogli di
stile potete creare in un solo CSS esterno queste regole e diversificare l'aspetto dell'elemento:
@media print {
h1 {
color: black;
}
}
@media screen {
h1 {
color: red;
}
}
@charset
La direttiva @charset serve a specificare l'impostazione relativa alla codifica dei caratteri di un
documento. Svolge, in pratica, la stessa funzione che in (X)HTML possibile ottenere con l'uso dei
meta-tag:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
La sintassi semplicissima:
@charset "iso-8859-1"
La direttiva non pu essere usata in fogli incorporati. Quando si vuole usarla in un foglio esterno
essa deve essere la prima dichiarazione del CSS.
24
@font-face
La direttiva @font-face pu essere usata per descrivere un font usato nel documento. un
argomento molto complesso e conoscere i dettagli della questione non aggiunge nulla che possa
davvero accrescere la vostra conoscenza dei CSS. In genere potrebbe essere usata per specificare
l'url di un carattere particolare da scaricare su una macchina che non lo veda presente tra i suoi font.
La sintassi classica infatti questa:
@font-face {
font-family: Santiago;
src: url("http://www.mioserver.it/fonts/santiago.tt");
}
in (inches - pollici): classica misura del sistema metrico americano. Praticamente nullo il suo
valore su un supporto come un browser web viste le variabili relative a risoluzione e ampiezza
dei monitor.
cm (centimetri): stesso discorso visto per i pollici, la difficolt maggiore sta nella resa su
monitor, che altra cosa rispetto alla carta stampata.
mm (millimetri): vedi centimetri.
pt (points - punti): unit di misura tipografica destinata essenzialmente a definire la dimensione
dei font.
pc (picas): unit poco usata. 1 pica equivale a 12 punti.
em (em-height): unit di misura spesso usata dagli autori CSS. 1 em equivale all'altezza media
di un carattere per un dato font. E' un unit di misura relativa.
ex (ex-height): poco usata. 1 ex equivale all'altezza del carattere x minuscolo del font scelto.
px (pixels): unit di misura ideale su monitor. E' quella pi usata e facile da comprendere.
25
Percentuale
Un valore espresso in percentuale da considerare sempre relativo rispetto ad un altro valore, in
genere quello espresso per l'elemento parente. Si esprime con un valore numerico seguito (senza
spazi) dal segno di percentuale: 60% pertanto corretto, 60 % no.
Colori
Sui diversi modi per esprimere il valore di un colore si veda la lezione su "colore e CSS".
Stringhe
Alcune propriet dei CSS possono avere come valore una stringa di testo da inserire come
contenuto aggiunto nel documento. I valori espressi da stringhe vanno sempre racchiusi tra
virgolette. Le propriet in questione sono tre: content, quotes, text-align (ma solo per le tabelle
definite con i CSS).
Valori URL
Si tratta di URL che puntano a documenti esterni (in genere immagini, come negli sfondi). Possono
essere URL assoluti o relativi. In questo caso il path fa sempre riferimento alla posizione del foglio
di stile e non del documento HTML. La definizione dell'indirizzo sempre introdotta dalla parola
chiave url e va inserita tra parentesi tonde senza virgolette. Esempio: url(immagini/sfondo.gif).
Unit di tempo
Anche le unit di tempo trovano spazio solo negli stili audio. Sono usate in genere per impostare la
pausa tra le parole lette da un sintetizzatore vocale. Si applicano solo a queste tre propriet: pause,
pause-after, pause-before. Le unit di misura sono:
s (secondi)
ms (millisecondi)
Unit di frequenza
Usate solo negli stili audio, definiscono la frequenza del segnale:
hz (Hertz)
khz (Kilohertz)
26
Ereditariet
Il primo concetto quello di ereditariet. Secondo questo meccanismo le impostazioni stilistiche
applicate ad un elemento ricadono anche sui suoi discendenti. Almeno fino a quando, per un
elemento discendente, non si imposti esplicitamente un valore diverso per quella propriet. Se
impostiamo, ad esempio, il colore rosso per il testo (color: red;) a livello dell'elemento BODY, tutti
gli altri elementi suoi discendenti erediteranno questa impostazione. Ma, se ad un certo punto
definiamo nel codice del CSS un selettore con la propriet color: black; l'ereditariet viene spezzata.
Non tutte le propriet sono ereditate e lo renderemo esplicito nell'analisi di ciascuna di esse. In
genere sono quelle attinenti la formattazione del box model: margini, bordi, padding, background le
pi importanti. Il motivo semplice. Ereditare un bordo semplicemente senza senso. Se ne
imposto uno, diciamo, per un paragrafo sarebbe assurdo che un elemento <A> o un testo in
grassetto vengano circondati dallo stesso bordo!
Fin qui tutto semplice. Ora scendiamo nei dettagli. L'ereditariet non basta a spiegare le molteplici
possibilit di relazione tra le regole di un CSS.
Peso e origine
Da qui in avanti affronteremo un'altra serie di concetti fondamentali, tutti riconducibili, comunque,
ad uno stesso ambito: i conflitti possibili tra gli stili e le regole. Tenteremo, in pratica, di rispondere
a quesiti come questo. Se definisco queste regole in un CSS:
p {color: black;}
.testo {color: red;}
perch il testo del paragrafo sar rosso e non nero? Perch il selettore classe prevale su quello
semplice con elemento? Il primo concetto da imparare quello di peso. Si riferisce alla maggiore o
minore importanza da assegnare a ciascuna regola. Un primo criterio di importanza dato
dall'origine del foglio di stile. Quando visualizziamo una pagina (X)HTML, possono entrare in
gioco nel modificare lo stile degli elementi tre diversi fogli di stile:
foglio dell'autore
foglio dell'utente
foglio predefinito del browser
In ordine di importanza avremo: foglio dell'autore, foglio dell'utente, foglio predefinito del browser.
27
Tutti i software di navigazione di ultima generazione consentono una gestione di questo aspetto. E'
possibile, ad esempio, far s che il browser ignori i CSS definiti dall'autore delle pagine e formattare
queste ultime con un CSS realizzato dall'utente. E ancora, come vedremo, possibile modificare
questa gerarchia con l'uso della parola chiave !important. Di base, per, l'ordine quello definito
qui sopra.
Specificit
La specificit, come il nome pu suggerire, descrive il peso relativo delle varie regole all'interno di
un foglio di stile. Esistono regole ben precise per calcolarla e sono quelle che applica lo user agent
di un browser quando si trova davanti ad un CSS.
I fattori del calcolo sono tre e ciascuno di essi rappresenta il valore di una tripletta. Per prima cosa si
conta il numero di selettori ID presenti nella regola. Si passa, quindi a verificare la presenza di
classi e pseudo-classi. Infine, si conta il numero di elementi definiti nella regola. Mai come in
questo caso urge l'esempio. Prima regola:
#titolo {color: black;}
Il concetto di cascade
Ed ora la summa di tutto quello cha abbiamo detto. Il concetto e il meccanismo di cascade spiegato
con parole semplici. E che sia un elemento chiave lo capite dal nome stesso di quello che state
studiando: Cascading Style Sheets. Tenteremo di ricostruire il procedimento di un browser quando
incontra un foglio di stile e lo rende sul monitor del nostro computer.
1. Per prima cosa controlla il target stabilito con l'attributo media o con dichiarazioni
equivalenti. Scarta, quindi, tutti gli stili riferiti alla stampa o ad altri supporti. Allo stesso
28
tempo, scarta tutte le regole che non trovino corrispondenza negli elementi strutturali del
documento.
2. Comincia ad ordinare per peso e origine secondo le regole viste sopra. C' un CSS definito
dall'autore? User quello. Altrimenti, verificher la presenza di un foglio di stile utente e, in
sua assenza, applicher le sue regole stilistiche predefinite.
3. Quindi, calcola la specificit dei selettori e, in caso di conflitto tra regole, usa questo criterio
di prevalenza.
4. Se non ci sono conflitti o se peso, origine e specificit coincidono, viene applicata la regola
pi vicina all'elemento nel codice del documento. L'ordine, se le dichiarazioni degli stili
sono fatte nell'ordine pi corretto e logico, quindi il seguente: gli stili in linea prevalgono
su quelli incorporati che a loro volta prevalgono su quelli collegati.
Importanza
Ed ora il concetto di importanza. Semplice e lineare la regola: se una dichiarazione viene
accompagnata dalla parola chiave !important essa balza al primo posto nell'ordine di applicazione a
prescindere da peso, origine, specificit e ordine.
Il box model
Se volete usare i CSS per scopi che vadano oltre la semplice gestione di sfondo e testo, dovete avere
ben chiaro il meccanismo che governa la presentazione dei vari elementi di una pagina. Torniamo,
per un attimo, alla prima lezione. Abbiamo l mostrato che una pagina (X)HTML non altro che un
insieme di box rettangolari, che si tratti di elementi blocco o di elementi inline non fa differenza.
Tutto l'insieme di regole che gestisce l'aspetto visuale degli elementi blocco viene, in genere riferito
al cosiddetto box model.
Ogni box comprende un certo numero di componenti di base, ciascuno modificabile con propriet
dei CSS. La figura qui sotto mostra visivamente tali componenti:
29
l'area del contenuto. E' la zona in cui trova spazio il contenuto vero e proprio, testo, immagini,
animazioni Flash. Le dimensioni orizzontali dell'area possono essere modificate con la propriet
width. Quelle verticali con height.
il padding. E' uno spazio vuoto che pu essere creato tra l'area del contenuto e il bordo
dell'elemento. Come si vede dalla figura, se si imposta un colore di sfondo per un elemento
questo si estende dall'area del contenuto alla zona di padding.
il bordo. E' una linea di dimensione, stile e colore variabile che circonda la zona del padding e
l'area del contenuto.
il margine. E' uno spazio di dimensioni variabili che separa un dato elemento da quelli
adiacenti.
Attenzione. Queste cose non sono state introdotte con i CSS, ma fanno parte del normale
meccanismo di rendering di un documento. Quando realizziamo una pagina (X)HTML senza fogli
di stile il browser ad applicare, per alcune di queste propriet, le sue impostazioni predefinite. Per
esempio, introdurr un certo margine tra un titolo e un paragrafo o tra due paragrafi. La novit che
con i CSS possiamo controllare con precisione al pixel tutti questi aspetti.
Il box model governato da una serie di regole di base concernenti la definizione di un box e il suo
rapporto con gli altri elementi.
1. Larghezza del box
Bisogna distinguere tra la larghezza dell'area del contenuto e la larghezza effettiva di un box . La
prima data dal valore della propriet width. La seconda data da questa somma:
margine sinistro + bordo sinistro + padding sinistro + area del contenuto + padding destro + bordo
destro + margine destro
Come si vede, infatti, nella figura, margini, padding e bordi devono considerarsi a tutti gli effetti
parte dell'area complessiva dell'elemento.
2. Larghezza ed elemento contenitore
Se non si imposta alcun valore per la propriet width o se il valore usato auto la larghezza di un
box uguale a quella dell'area del contenuto dell'elemento contenitore. Quest'ultimo l'elemento
che racchiude il box.
3. Uso del valore auto
Solo per tre propriet possibile impostare il valore auto: margini, altezza e larghezza (width).
L'effetto quello di lasciar calcolare al browser l'ammontare di ciascuna di esse in base alla
risoluzione dello schermo e alle dimensioni della finestra.
Solo i margini possono avere valori negativi. Ci non consentito per padding, bordi, altezza e
larghezza.
4. Margini verticali e orizzontali tra gli elementi
Per due box adiacenti in senso verticale, che abbiano impostato un margine inferiore e uno
superiore, la distanza non sar data dalla somma delle due distanze. A prevalere sar, invece, la
distanza maggiore tra le due. E' il meccansimo del cosiddetto margin collapsing. Tale meccanismo
non si applica ai box adiacenti in senso orizzontale.
30
black | navy | blue | maroon | purple | green | red | teal | fuchsia | olive |
gray | lime | aqua | silver | yellow | white
#RRGGBB
Le semplici 16 parole chiave non esauriscono, ovviamente, la gamma dei colori visualizzabili su un
monitor moderno. Gi in HTML era possibile impostare il colore di un elemento servendosi di
codici esadecimali. In essi, le prime due lettere (o numeri) corrispondono ai valori per il colore
rosso (RED), la seconda coppia fa riferimento al verde (GREEN), l'ultima al blue (BLUE).
Esempio
#CC0000
#RGB
Molti dei codici esadecimali sono rappresentati da valori duplicati. E' possibile usare per essi una
sintassi abbreviata in cui i valori per il rosso, il verde e il blue sono definiti solo dalla prima lettera o
numero. Il colore dell'esempio precedente pu essere definito anche cos:
#C00
31
Nell'uso di questa sintassi vanno valutati i risultati con colori che non presentino coppie di valori
duplicati. Il risultato pu essere leggermente diverso a livello di tonalit a seconda dei casi.
Per il bianco:
rgb(100%, 100%, 100%)
La propriet color
Visti i sistemi per rappresentare i colori, dobbiamo ora chiarire un aspetto importante. Per ogni
elemento si possono definire almeno tre colori:
1. il colore di primo piano (foreground color)
2. il colore di sfondo (background color)
3. il colore del bordo (border color)
La propriet color definisce esclusivamente:
Per gli altri due casi esistono propriet ad hoc che esamineremo nelle prossime lezioni. Una buona
norma dei CSS vuole, comunque, che, per un elemento di cui si sia definito il colore di primo piano,
si definisca anche e sempre un colore di sfondo.
Sintassi
La propriet color si applica a tutti gli elementi ed ereditata. Significa che se si imposta il colore
per un elemento esso sar ereditato da tutti gli elementi discendenti per cui non si definisca
esplicitamente un altro colore. La sintassi semplice:
32
Valori
I valori possibili sono:
Esempi
p {color: black; background-color: white; }
Links
http://www.w3schools.com/css/css_colornames.asp
ottima risorsa dal sito W3Schools. Tabella Websafe con valori esadecimali e nomi dei colori
(ricordiamo per che nei CSS gli unici nomi accettati sono i 16 visti nella lezione). L'utilit pi
grande la notate se cliccate sul codice esadecimale del colore. Si aprir una pagina in cui quel colore
viene usato come sfondo e tutti gli altri vengono usati per il testo. Eccellente quando si deve
valutare l'impatto visivo della coppia colore testo-sfondo.
background-color
background-image
background-repeat
background-attachment
background-position
33
Ciascuna di essa definisce un solo, particolare aspetto relativo allo sfondo di un elemento. La
propriet background, invece, una propriet a sintassi abbreviata con cui possiamo definire
sinteticamente e con una sola dichiarazione tutti i valori per lo sfondo. La analizzeremo alla fine.
Prima necessario chiarire significato e sintassi delle propriet singole.
background-color
Definisce il colore di sfondo di un elemento. Questa propriet non ereditata.
Sintassi
selettore {background-color: <valore>;}
Valori
un qualunque colore
la parola chiave transparent
Usando transparent come valore un elemento avr come colore quello dell'elemento parente.
Esempi
body { background-color: white; }
p { background-color: #FFFFFF; }
.classe1 { background-color: rgb(0, 0, 0)
background-image
Definisce l'URL di un'immagine da usare come sfondo di un elemento. Questa propriet non
ereditata.
Sintassi
selettore { background-image: url(<valore>); }
Valori
Usare none equivale a non impostare la propriet: nessuna immagine verr applicata come sfondo.
Esempi
body {background-image: url(sfondo.gif); }
div body {background-image: url(http://www.server.it/images/sfondo.gif); }
Usando questa propriet da sola si ottiene lo stesso risultato che in HTML si aveva con l'attributo
background.
34
Piccolo consiglio. Una buona norma e il buon senso vogliono che quando si definisce un'immagine
come sfondo si usi sempre anche un colore di sfondo e che questo colore consenta una lettura
agevole del testo. Se le immagini sono disabilitate, ad esempio, il browser mostrerebbe il suo colore
di sfondo predefinito: se questo bianco e il nostro testo pure sarebbe evidentemente un disastro.
background-repeat
Con questa propriet iniziano le novit. Essa consente di definire la direzione in cui l'immagine di
sfondo viene ripetuta. Propriet non ereditata.
Sintassi
selettore {background-repeat: <valore>;}
Valori
Esempi
body { background-image: url(sfondo.gif); background-repeat: repeat; }
div { background-image: url(sfondo.gif); background-repeat: repeat-x; }
background-attachment
Con questa propriet si imposta il comportamento dell'immagine di sfondo rispetto all'elemento cui
applicata e all'intera finestra del browser. Si decide, in pratica, se essa deve scorrere insieme al
contenuto o se deve invece rimanere fissa. Propriet non ereditata.
Sintassi
selettore {background-attachment: <valore>;}
Valori
scroll. L'immagine scorre con il resto del documento quando si fa lo scrolling della pagina
fixed. L'immagine rimane fissa mentre il documento scorre
Questa propriet consente risultati estetici di grande impatto ed consigliabile, per ottenerne il
meglio, usarla sia in combinazione con le altre propriet sia con immagini grandi.
Esempi
body { background-image: url(back_400.gif);
background-repeat: repeat-x;
background-attachment: fixed; }
35
background-position
Propriet un po complessa. Definisce il punto in cui verr piazzata un'immagine di sfondo non
ripetuta o da dove inizier la ripetizione di una ripetuta. Si applica solo agli elementi blocco o
rimpiazzati. Attenzione alla compatibilit e alla resa, non omogenea, tra i vari browser. Propriet
non ereditata.
Sintassi
selettore {background-position: <valore> o <valori>;}
Valori
I valori possibili sono diversi. Tutti per definiscono le coordinate di un punto sull'asse verticale e
su quello orizzontale. Ci pu avvenire nei seguenti modi:
Significa che l'immagine apparir a 50px dal bordo superiore e a 50px da quello sinistro della
finestra. Potevo usare invece dei pixel altre unit di misura o percentuali. Come al solito, la scelta
delle percentuali mi assicura una maggiore affidabilit a risoluzioni diverse. Allo stesso modo
potevo utilizzare le parole chiave. Ad esempio:
body {
background-image: url(back_400.gif);
background-repeat: no-repeat;
background-position: center center;
}
background
E veniamo alla propriet background. Con essa, ricordiamolo, possiamo definire in un colpo solo
tutti gli aspetti dello sfondo. Per essere valida, la dichiarazione non deve contenere necessariamente
riferimenti a tutte le propriet viste finora, ma deve contenere almeno la definizione del colore di
sfondo.
36
Sintassi
selettore {background: background-color background-image background-repeat
background-attachment background-position;}
I valori non vanno separati da virgole. L'ordine non importante, ma quello dato il pi logico e
andrebbe rispettato: si va in ordine di importanza.
Esempi
body {
background: white url(sfondo.gif) repeat-x fixed;
}
il font da usare
la sua dimensione
la sua consistenza
l'interlinea tra i paragrafi
l'allineamento del testo
la sua decorazione (sottolineature e simili)
font-family
La propriet font-family serve a impostare il tipo di carattere di una qualunque porzione di testo. Si
applica a tutti gli elementi ed ereditata.
Gli uomini del W3C hanno creato un meccanismo che consente all'autore di impostare nei CSS non
un font singolo e unico, ma un elenco di caratteri alternativi. Il meccanismo funziona cos:
p {font-family: arial, Verdana, sans-serif;}
Quando la pagina verr caricata, il browser tenter di usare il primo font della lista. Se questo non
disponibile user il secondo. In mancanza anche di questo, verr utilizzato il font principale della
famiglia sans-serif presente sul sistema. La spiegazione di tutto ci semplice: ovviare al problema
dei diversi font presenti sulle piattaforme software.
37
Dunque: quando si imposta la propriet font-family si possono usare tutti i font che si vuole, ma
non dimenticate mai di inserire alla fine l'indicazione di una famiglia generica. Esse sono cinque
(tra parentesi riportiamo i caratteri predefiniti su ciascuna sui sistemi Windows):
I nomi dei font della lista vanno separati dalla virgola. I caratteri con nomi composti da pi parole
vanno inseriti tra virgolette. Se usate famiglie strane e poco comuni, come fantasy o cursive usate
pi di una famiglia generica. Questa andrebbe sempre messa alla fine, altrimenti risulta
praticamente inutile la definizione di font specifici.
Sintassi
selettore {font-family: <font 1>, <font2>, ....,<famiglia generica>;}
Esempi
div {font-family: Georgia, "Times New Roman", serif;}
font-size
Insieme a font-family la propriet considerata essenziale nella definizione dell'aspetto del testo, di
cui definisce le dimensioni. Applicabile a tutti gli elementi ed ereditata.
Sintassi
selettore { font-size: <valore>; }
Valori
I valori delle dimensioni del testo possono essere espressi in vari modi.
I diversi sistemi si possono distinguere a seconda che definiscano le dimensioni in senso assoluto o
relativo. Dimensione assoluta significa che essa non dipende da nessun altro elemento ed quella
definita dall'unit di misura usata. Dimensione relativa significa che essa viene calcolata in base alla
dimensione del testo dell'elemento parente.
Sono valori assoluti:
le sette parole chiave xx-small, x-small, small, medium, large, x-large, xx-large
quelli espressi con le seguenti unit di misura: pixel (px), centimetri (cm), millimetri (mm),
punti (pt), picas (pc), pollici (in), x-height(ex). Di tutte queste unit le uniche proponibili per il
testo sono punti e pixel. Si consiglia di usare la prima solo per CSS destinati alla stampa.
38
Esempi
p {font-size: 12px;}
div.titolo {font-size: 50%;}
#div1 {font-size: large;}
h2 {font-size: 1.2em;}
font-weight
Serve a definire la consistenza o "peso" visivo del testo. Si applica a tutti gli elementi ed ereditata.
Sintassi
selettore {font-weight: <valore>;}
Valori
Il "peso" visivo di un carattere pu essere espresso con una scala numerica o con parole chiave:
valori numerici 100 - 200 - 300 - 400 - 500 - 600 - 700 - 800 - 900 ordinati in senso crescente
(dal leggero al pesante)
normal. Valore di default. E' l'aspetto normale del font ed equivale al valore 400
bold. Il carattere acquista l'aspetto che definiamo in genere grassetto. Equivale a 700
bolder. Misura relativa. Serve a specificare che una determinata porzione di testo dovr
apparire pi pesante rispetto al testo dell'elemento parente
lighter. Misura relativa. Il testo sar pi leggero di quello dell'elemento parente
Esempi
p {font-weight: 900;}
div {font-weight: bold;}
font-style
Imposta le caratteristiche del testo in base ad uno di questi tre valori:
39
Esempi
p {font-style: italic;}
Line-height
Grazie a line-height possibile finalmente usare nelle nostre pagine un sistema di interlinea degno
di questo nome. La propriet, in realt, serve a definire l'altezza di una riga di testo all'interno di un
elemento blocco. Ma l'effetto ottenuto appunto quello tanto agognato da tutti i web designer: un
modo per impostare uno spazio tra le righe. La propriet si applica a tutti gli elementi ed ereditata.
Sintassi
selettore {line-height: <valore>;}
Valori
normal. Il browser separer le righe con uno spazio ritenuto "ragionevole". Dovrebbe
corrispondere a un valore numerico compreso tra 1 e 1.2
valore numerico. Usando valori numerici tipo 1.2, 1.3, 1.5 si ottiene questo risultato: l'altezza
della riga sar uguale alla dimensione del font moltiplicata per questo valore.
un valore numerico con unit di misura. L'altezza della riga sar uguale alla dimensione
specificata.
percentuale. L'altezza della riga viene calcolata come una percentuale della dimensione del
font.
Il consiglio di non usare mai la percentuale, di valutare attentamente l'utilizzo di unit esplicite e
di affidarsi senza problemi al valore numerico.
Esempi
p {line-height: 1.5;}
body {line-height: 15px;}
Font
La propriet font pu essere paragonata a background. Si tratta di una propriet a sintassi
abbreviata che serve a impostare con una sola dichiarazione tutte le principali caratteristiche del
testo. Le propriet definibili in forma abbreviata con font sono:
font-family
font-size
line-height
font-weight
font.-style
font-variant
font di sistema
Sintassi
40
Alcune indicazioni sull'uso. I valori relativi alle singole propriet non vanno separati da virgole.
Virgola che deve invece separare i valori definiti per la font-family. Anche in questo caso i nomi dei
font costituiti da pi parole vanno racchiusi tra virgolette. Per quanto riguarda l'ordine, la
dichiarazione dovrebbe sempre finire con la coppia font-size > font-family.
Il valore della propriet line-height si imposta invece cos, facendo seguire il suo valore a quello di
font-size e separando i due con una slash:
font-size/line-height
Esempi
p {font: bold 12px/1.5 Georgia, "Times New Roman", serif;}
Se si intende usare uno dei font di sistema non necessario specificare altri valori oltre alla
keyword. Il nostro testo, in pratica, erediter le impostazioni definite nel sistema operativo relative a
carattere e dimensione.
Esempi
p {font: menu;}
div {font: status-bar;}
Text-align
La propriet serve a impostare l'allineamento del testo. E' ereditata e si applica a tutti gli elementi.
Sintassi
selettore { text-align: <valore>; }
Valori
41
Text-decoration
Imposta particolari decorazioni e stili per il testo. Ereditabile e applicabile a tutti gli elementi.
Sintassi
p {text-decoration: <valore> o <valori>;}
Valori
Esempi
p {text-decoration: none;}
a {text-decoration: underline;}
font-size-adjust
Questa propriet pu servire a migliorare la leggibilit di un carattere alternativo tra quelli indicati
con la propriet font-family. La propriet supportata solo dai browser Gecko-based (Mozilla,
Netscape 6/7) ed ereditata.
Sintassi
selettore {font-size-adjust: <valore>;}
Valori
Esempi
42
p {font-size-adjust: 0.50;}
font-stretch
Consente di rendere il testo pi o meno espanso del normale. Propriet non supportata da nessun
browser. Ereditata.
Sintassi
selettore {font-stretch: <valore>;}
Valori
semi-expanded,
normal,
semi-condensed,
Oltre a queste abbiamo due parole chiave con funzione relativa: wider e narrower.
Esempi
p {font-stretch: ultra-expanded;}
font-variant
Consente di trasformare il testo in maiuscoletto (lettere in maiuscolo rese con dimensioni uguali ai
caratteri minuscoli ). Propriet ben supportata ed ereditata.
Sintassi
selettore {font-variant: <valore>;}
Valori
Esempi
h2 {font-variant: small-caps;}
43
text-indent
Definisce l'indentazione della prima riga in ogni elemento contenente del testo. Propriet ben
supportata ed ereditata.
Sintassi
selettore {text-indent: <valore>;}
Valori
Come al solito, il valore con unit di misura assoluto, quello in percentuale relativo. In questo
caso il valore relativo alla larghezza dell'area del contenuto. In pratica, se in un paragrafo largo
200px setto un'indentazione uguale al 10%, essa sar uguale a 20px.
Esempi
p {text-indent: 10px;}
div.contenuto {text-indent: 10%;}
text-shadow
Crea un'ombreggiatura per il testo specificato. La propriet non supportata da nessun browser e
non ereditata.
Sintassi
selettore {text-shadow: <valore colore> <valore x> <valore y> <valore blur>;}
Esempi
h1 {text shadow: blue 2px 2px 3px;}
text-transform
La propriet serve a cambiare gli attributi del testo relativamente a tre aspetti: maiuscolo,
minuscolo, prima lettera maiuscola. Propriet ben supportata e comodissima se avete lunghe
porzioni di testo tutto in maiuscolo da trasformare (o viceversa). Ereditata.
Sintassi
selettore {text-transform: <valore>;}
Valori
Esempi
p {text-transform: capitalize;}
h1 {text-transform: uppercase;}
white-space
Questa propriet serve a gestire il trattamento degli spazi bianchi presenti in un elemento. E'
ereditata.
E' una cosa nota a chi ha un minimo di dimestichezza con il codice HTML. Se nel codice di una
pagina lasciate spazi bianchi tra le parole, essi saranno automaticamente convertiti in un solo spazio
quando la pagina viene visualizzata nel browser. A meno di non racchiudere il testo con tag come
<PRE> o <CODE>. In questo caso spazi bianchi e fine riga saranno rispettati e manterranno
l'aspetto che essi hanno nel codice. Uguale meccanismo implementabile con i CSS con whitespace.
Sintassi
selettore {white-space: <valore>;}
Valori
Esempi
p {white-space: pre;}
div {white-space: nowrap;}
letter-spacing
Aumenta lo spazio tra le lettere di una parola. Propriet ben supportata ed ereditata.
Sintassi
selettore { letter-spacing: <valore>; }
Valori
E' possibile anche impostare valori negativi. Ci far s che le lettere appaiano sempre pi
compresse, con il rischio ovvio dell'illegibilit.
Esempi
h1 { letter-spacing: 5px; }
word-spacing
Propriet complementare a letter-spacing. Serve ad aumentare lo spazio tra le parole comprese in un
elemento. Propriet ben supportata ed ereditata.
Sintassi
selettore { word-spacing: <valore>; }
Valori
Esempi
p { word-spacing: 1.2em; }
div.testo { word-spacing: 5px; }
height
Questa propriet definisce la distanza tra il bordo superiore e quello inferiore di un elemento. Non
ereditata e si applica a tutti gli elementi tranne:
colonne di tabelle
elementi inline non rimpiazzati
Sintassi
selettore {height: <valore>;}
46
Valori
L'uso di height va sempre valutato con attenzione e non pensando di farne una scorciatoia per avere
layout precisi al pixel. Il caso pi importante da valutare quando il contenuto dovesse superare i
limiti imposti tramite la propriet. Il comportamento dei vari browser al riguardo notevolmente
diverso: Explorer non fa altro che ignorare l'altezza impostata estendendola; Mozilla e Opera
rispettano la regola, ma il contenuto eccedente va a sovrapporsi agli elementi vicini o sottostanti.
Ricordatelo: molte volte si pu ottenere lo stesso risultato visivo desiderato usando propriet come
padding e margin. E considerate sempre che l'altezza indirettamente influenzata anche dalla
larghezza di un elemento.
Esempi
div {height: 250px;}
p.blocco {height: 50%;}
overflow
Esiste un modo per gestire il contenuto che superi i limiti imposti con height. Usare la propriet
overflow. Si applica a tutti gli elementi blocco e non ereditata.
Sintassi
selettore {overflow : <valore>;}
Valori
visible. Valore iniziale. Il contenuto eccedente rimane visibile (con i problemi visti sopra).
hidden. Il contenuto eccedente non viene mostrato.
scroll. Il browser crea barre di scorrimento che consentono di fruire del contenuto eccedente.
auto. Il browser tratta il contenuto eccedente secondo le sue impostazioni predefinite. Di norma
dovrebbe mostrare una barra di scorrimento laterale.
Esempi
div {overflow: auto;}
min-height
Imposta un'altezza minima per un elemento. Valgono, per questa propriet le stesse osservazioni
fatte per height relativamente al contenuto. Non ereditata e non supportata da Explorer per
Windows.
47
Sintassi
selettore {min-height: <valore>;}
Valori
Esempi
div {min-height: 200px;}
max-height
La propriet max-height serve a impostare l'altezza massima di un elemento. Anche per essa
valgono le osservazioni gi fatte per il contenuto eccedente. Non ereditata.
Sintassi
selettore {max-height: <valore>;}
Valori
Esempi
div {max-height: 400px;}
width
Le dimensioni orizzontali di un elemento sono date dalla combinazione di varie propriet. Un errore
macroscopico ritenere che esse siano definite semplicemente dalla propriet width. In pratica,
dovete sempre distinguere tra la larghezza effettiva di un elemento (i pixel di spazio che occupa
sulla pagina) e la larghezza dell'area del contenuto. La prima data dalla somma di questi valori:
48
margine sinistro + bordo sinistro + padding sinistro + area del contenuto + padding destro + bordo
destro + margine destro
La seconda impostata tramite la propriet width.
E' possibile ovviamente che i due valori coincidano. Accade quando di un particolare elemento non
si impostino margini, paddding e bordi; o quando il valore di tali propriet sia uguale a 0.
E qui introduciamo una questione di rilevanza assoluta per il semplice fatto che coinvolge il
browser attualmente pi usato. Explorer per Windows fino alla versione 5.5 interpreta male il
concetto di width. Nel senso che con questa propriet intende la larghezza globale dell'elemento,
compresi margini, padding e bordi. Proprio l'errore che prima abbiamo definito macroscopico!
Fatta questa fondamentale premessa, possiamo analizzare nei dettagli la propriet.
Sintassi
selettore {width: <valore>;}
Valori
auto. Valore di default. Se non si impostano margini, bordi e padding la larghezza dell'elemento
sar uguale all'area del contenuto dell'elemento contenitore.
un valore numerico con unit di misura.
un valore in percentuale. La larghezza sar calcolata rispetto a quella dell'elemento
contenitore.
min-width
Imposta la larghezza minima di un elemento. Si applica a tutti gli elementi tranne che a quelli in
linea non rimpiazzati e agli elementi di tabelle. Propriet non supportata da Internet Explorer e non
ereditata.
Sintassi
selettore { min-width: <valore>; }
Valori
Esempi
49
max-width
Imposta la larghezza massima di un elemento. Non ereditata.
Sintassi
selettore { max-width: <valore>; }
Valori
I margini
Una delle maggiori limitazioni di HTML la mancanza di un meccanismo interno per spaziare gli
elementi di un documento. Per ottenere questo risultato si ricorso negli anni ad una serie di
trucchetti, magari efficaci, ma fuori dalla logica originaria del linguaggio. L'unica eccezione
consisteva nella possibilit di definire una distanza tra le celle di una tabella con l'attributo
cellspacing. I CSS risolvono il problema con l'uso di una serie di propriet in grado di definire con
precisione la distanza tra gli elementi. Possiamo infatti definire il margine come la distanza tra il
bordo di un elemento e gli elementi adiacenti. Per ulteriori chiarimenti e per la relazione tra i
margini e gli altri elementi del box-model si veda la lezione "Il box model".
Sono cinque le propriet con cui possibile definire un margine. Quattro di esse sono singole e
impostano la distanza per ciascun lato del box. L'ultima, margin, una propriet a sintassi
abbreviata utile per definire con una sola dichiarazione tutte le impostazioni per i quattro lati.
margin-bottom
Definisce la distanza tra il lato inferiore di un elemento e gli elementi adiacenti. Si applica a tutti gli
elementi e non ereditata.
Valori
Ricordiamo che se per un elemento si imposta un margine inferiore ed esso si trova sopra ad un
altro elemento che abbia impostato un margine superiore, la distanza tra i due sar quella maggiore
e non data dalla somma delle due propriet (meccanismo del margin collapsing).
50
Esempi
p {margin-bottom: 10px;}
div.box {margin-bottom: 20%;}
margin-left
Definisce la distanza tra il lato sinistro di un elemento e gli elementi adiacenti. Si applica a tutti gli
elementi e non ereditata.
Valori
Esempi
h1 {margin-left: 10%;}
img {margin-left: 20px;}
margin-top
Definisce la distanza tra il lato superiore di un elemento e gli elementi adiacenti. Si applica a tutti
gli elementi e non ereditata.
Valori
Esempi
p.box {margin-top: 10%;}
img {margin-top: 20px;}
margin-right
Definisce la distanza tra il lato destro di un elemento e gli elementi adiacenti. Si applica a tutti gli
elementi e non ereditata.
Valori
Esempi
51
h1 {margin-right: 10%;}
img {margin-right: 20px;}
margin
E' una propriet a sintassi abbreviata. Con essa possibile specificare i valori per tutti e quattro i lati
di un elemento. Si applica a tutti gli elementi e non ereditata.
Valori
Per usare al meglio questa propriet fondamentale conoscere le regole che ne gestiscono il
funzionamento.
In prima istanza ovvio usare per essa quattro valori, uno per ciascun lato:
div {margin: 10px 15px 10px 20px;}
L'ordine di lettura va inteso in senso orario. Per cui: il primo valore si riferisce al lato superiore, il
secondo a quello destro, il terzo al lato inferiore, il quarto a quello sinistro. In pratica usare la
sintassi vista nell'esempio equivale a scrivere:
div {
margin-top: 10px;
margin-right: 15px;
margin-bottom: 10px;
margin-left: 20px; }
Nella definizione dei valori, inoltre, possibile mischiare percentuali con valori assoluti in unit di
misura.
Un ulteriore abbreviazione della sintassi si pu ottenere usando tre, due o un solo valore. Queste le
regole:
se si usano tre valori, il primo si riferisce al margine superiore, il secondo a quelli sinistro e
destro, il terzo a quello inferiore
se si usano due valori, il primo si riferisce ai lati superiore e inferiore, il secondo al sinistro e al
destro
se si usa un solo valore, un uguale distanza sar ai quattro lati
Un uso interessante del valore auto per i lati sinistro e destro quello che consente di centrare in tal
modo un elemento rispetto alla pagina o al box contenitore.
Esempi
p {margin: 20px 10px;}
div {margin: 20px;}
h1 {margin: 10px auto;}
52
Il padding
Un altro modo per creare spazio intorno ad un elemento quello di usare il padding. Come per i
margini, HTML incorpora un meccanismo simile solo per le celle di tabella, tramite il cosiddetto
cellpadding. Se avete presente il funzionamento di questo attributo, vi risulter immediatamente
chiara la differenza tra margini e padding. Quando si usa il padding, lo spazio di distanza viene
inserito al di qua dei bordi dell'elemento e non all'esterno. La cosa risulta evidente se usate un
colore di sfondo per l'elemento diverso da quello della pagina. Nel caso del padding, lo spazio
inserito avr proprio il colore di sfondo dell'elemento, a differenza dei margini. Pertanto, valutate in
base alle vostre esigenze se usare la prima o la seconda via.
Un'analogia rispetto ai margini sta nella sintassi. Anche qui quattro propriet singole per i lati e una
a sintassi abbreviata (padding).
padding-bottom
Imposta l'ampiezza del padding sul lato inferiore di un elemento. Si applica a tutti gli elementi e
non ereditata.
Valori
Esempi
p.box {padding-bottom: 10px;}
padding-left
Imposta l'ampiezza del padding sul lato sinistro di un elemento. Si applica a tutti gli elementi e non
ereditata.
Valori
Esempi
p {padding-left: 10%;}
53
padding-top
Imposta l'ampiezza del padding sul lato superiore di un elemento. Si applica a tutti gli elementi e
non ereditata.
Valori
Esempi
h1 {padding-top: 10px;}
padding-right
Imposta l'ampiezza del padding sul lato destro di un elemento. Si applica a tutti gli elementi e non
ereditata.
Valori
Esempi
p.box {padding-right: 10px;}
padding
Propriet a sintassi abbreviata. Serve a impostare i valori del padding per tutti e quattro i lati di un
elemento. Valgono per essa tutte le osservazioni e le regole sintattiche viste per margin.
Valori
Esempi
p {padding: 10px 20px;}
div {padding: 10%;}
54
La stessa cosa si pu ottenere con i CSS (tra l'altro quegli attributi sono da tempo considerati
svalutati dal W3C):
body {
margin: 0px;
padding: 0px; }
I bordi
Riuscire a definire l'aspetto dei bordi un'altra delle cose per cui vale la pena imparare ad usare i
CSS. L'impatto visivo, se guidati dal buon gusto, di sicuro effetto: la pagina acquista rigore e una
suddivisione pi logica, estetica e razionalit strutturale possono trovare un felice connubio.
Dal punto di vista del linguaggio la definizione dei bordi pu risultare un p intricata per il numero
di propriet coinvolte, che se consentono all'autore la massima flessibilit, rendono complicata la
gestione del codice.
In linea di massima possiamo suddividere le propriet in due categorie: singole e a sintassi
abbreviata. Le prime definiscono singoli aspetti di ciascuno dei quattro bordi. Le seconde
consentono di riunire in una sola regola le diverse impostazioni.
Sono propriet singole:
border-top-color, border-top-style, border-top-width, border-bottom-color,
border-bottom-style, border-bottom-width, border-right-color, border-rightstyle, border-right-width, border-left-color, border-left-style, border-leftwidth
Sintassi (abbreviata)
selettore { border-<lato>: <valore width> <valore style> <valore color>; }
In entrambi gli esempi di sintassi sostituite a <lato> uno degli indicatori dei quattro lati: top, right,
bottom o left.
55
Valori
Come si vede dall'elenco delle propriet di ciascun lato si possono definire per il bordo tre aspetti:
1. il colore (color)
2. lo stile (style)
3. lo spessore (width)
I valori possibili per il colore sono:
un qualsiasi colore
la parola chiave inherit
Il colore pu essere espresso in uno qualunque dei modi visti nella lezione " Il box model". Se non
si imposta un valore specifico, il colore sar quello di primo piano impostato con la propriet color.
Lo stile di un bordo pu invece essere espresso con una delle seguenti parole chiave
Nel caso delle parole chiave la dimensione esatta non specificata dal linguaggio.
Esempi
div {
border-left-color: black;
border-left-style: solid;
border-left-width: 1px;
}
56
Usando questa sintassi e queste propriet si imposta lo stile per tutti e quattro i bordi del box. I
valori possibili sono quelli visti prima a proposito del colore, dello stile e dello spessore.
Per ciascuna di queste propriet possibile definire da uno a quattro valori, uno per lato. Se ne
usiamo quattro l'ordine di lettura questo: top, right, bottom, left. Se invece ne impostiamo uno,
due o tre valgono le stesse regole viste per i margini nella lezione "Gestione delle dimensioni:
larghezza"
Esempi
div {
border-width: 1px 2px 1px 2px;
border-style: solid;
border-color: black red black red;
}
Esempi
div {border: 2px solid black;}
Le liste
Grazie ai CSS possiamo definire in vari modi l'aspetto delle liste (X)HTML. In realt tutte le
propriet che andremo ad esaminare si riferiscono non ai canonici tag usati per inserire una lista
ordinata (<OL>) o non ordinata (<UL>), ma ai singoli elementi che le compongono, ovvero
l'elemento <LI>. In effetti, solo questo che trova una rappresentazione effettiva sulla pagina,
mentre OL e UL sono semplici dichiarazioni del tipo di lista usato.
57
Le propriet dedicate alla formattazione delle liste sono quattro. tre definiscono singoli aspetti,
l'ultima, list-style, una propriet a sintassi abbreviata.
list-style-image
Definisce l'URL di un'immagine da usare come marcatore di un list-item. Propriet ereditata. Si
applica agli elementi LI e a quelli per i quali si imposti la propriet display sul valore list-item.
Sintassi
<selettore> {list-style-image: url(<url_immagine>);}
Nella definizione della sintassi per tutte queste propriet avete a disposizione diverse strade. La
prima e pi semplice quella di definire lo stile a livello degli elementi lista o list-item:
ul {list-style-image: url(immagine.gif);}
ol {list-style-image: url(immagine.gif);}
li {list-style-image: url(immagine.gif);}
Pi correttamente e per un fatto di rigore strutturale (lo stile si applica ai list-item), preferibile,
usando UL o OL, affidarsi ad un selettore del discendente (descendant selector):
ul li {list-style-image: url(immagine.gif);}
La soluzione ottimale se prevedete di usare sempre uno stesso stile per tutte le liste. Se invece
pensate di usare stili diversi, affidatevi alla potenza delle classi, che applicherete di volta in volta
secondo le necessit. La sintassi consigliata questa:
ul.nome_della_classe li {list-style-image: url(immagine.gif);}
Valori
Una considerazione "estetica" di cui tenere conto la dimensione delle immagini. Devono essere
sempre adeguate alla dimensione del testo.
list-style-position
Imposta la posizione del marcatore rispetto al testo del list-item. Propriet ereditata. Si applica agli
elementi LI e a quelli per i quali si imposti la propriet display sul valore list-item.
Sintassi
<selettore> {list-style-position: <valore>;}
Valori
58
outside. Valore di default. E' il comportamento standard: il marcatore piazzato all'esterno del
testo.
inside. Il marcatore diventa parte integrante del testo e ne rappresenta in un certo senso il primo
carattere. Se il testo va a capo il marcatore apparir all'interno del box.
Esempi
ul li {list-style-position: inside;}
#lista li {list-style-position: outside;}
list-style-type
Definisce l'aspetto del marcatore. Propriet ereditata. Si applica agli elementi LI e a quelli per i
quali si imposti la propriet display sul valore list-item.
Sintassi
<selettore> {list-style-type: <valore>;}
Valori
La scelta dei valori possibili lunghissima. Definiamo nei dettagli solo i pi importanti, limitandoci
a citare quelle che fanno riferimento a sistemi di scrittura non occidentali. Tali valori sono stati
inseriti per venire incontro alle esigenze di numerazione di lingue come l'ebraico o il giapponese,
che usano sistemi diversi dal nostro.
disc: un cerchietto pieno colorato. Il colore pu essere modificato per tutti i tipi con la propriet
color.
circle: un cerchietto vuoto.
square: un quadratino
decimal: sistema di conteggio decimale 1, 2, 3, ....
decimal-leading-zero: sistema di conteggio decimale ma con la prima cifra preceduta da 0. 01,
02, 03, ....
lower-roman: cifre romane in minuscolo. i, ii, iii, iv, .......
upper-roman: cifre romane in maiuscolo. I, II, III, IV, ....
lower-alpha: lettere ASCII minuscole. a, b, c, ......
upper-alpha: lettere ASCII maiuscole. A, B, C, .....
lower-latin: simile a lower-alpha
upper-latin: simile a upper-alpha
lower-greek: lettere minuscole dell'alfabeto greco antico.
I diversi tipi di marcatori si riferiscono ciascuno, logicamente, a liste ordinate o non ordinate.
Useremmo, ad esempio, square, per un UL e decimal per un OL. In realt, se si imposta l'aspetto
del marcatore con i CSS, l'impostazione definita in (X)HTML viene ignorata. Pertanto, posso avere
una lista non ordinata con list-item decimali. Il consiglio , comunque, di attenervi al buon senso e
di rispettare la logica degli elementi.
59
list-style
Propriet a sintassi abbreviata con cui si definiscono tutti gli aspetti e gli stili di un list-item.
Propriet ereditata.
Sintassi
<selettore> {list-style: <valore tipo> <valore posizione> <valore immagine>;}
Valori
I valori possibili sono quelli visti in precedenza per le propriet singole. A rigor di logica solo due
delle tre propriet singole dovrebbero trovare posto in questa dichiarazione abbreviata: per definire
l'aspetto del marcatore, infatti, o decido di usare un'immagine o propendo per un marcatore a
carattere. Se si inseriscono indicazioni per tipo e immagine, prevale l'immagine e il tipo ignorato.
Esempi
ul li {list-style: square inside;}
ul.lista1 li {list-style: outside url(imamgine.gif);}
Links
Le impostazioni di base delle liste sono queste e la lezione al riguardo esaustiva. Se volete capire
come esse interagiscono con altri aspetti dei CSS non potete non leggere questo articolo di Mark
Newhouse:
http://www.alistapart.com/stories/taminglists/
display
Torniamo per un attimo alla prima lezione. Avevamo chiarito in quella sede la fondamentale
distinzione tra elementi blocco, inline e lista che alla base di (X)HTML. Bene, quello che
sembrava un assioma inconfutabile, pu essere sconvolto con l'uso della propriet display. Essa ha
una sola, semplice funzione: definire il trattamento e la presentazione di un elemento. Fin quando
non la si usa ognuno segue la sua natura e il suo comportamento standard, ma con display possiamo
intervenire su di esso e in certi casi ribaltarlo. La propriet ereditata.
Sintassi
60
Valori
La lista dei possibili valori lunghissima. Solo alcuni di essi sono per di normale utilizzo e
supportati:
Una serie di valori fa riferimento alla possibilit di impostare il display degli elementi come
elementi di una tabella. tali valori trovano un supporto adeguato solo in Mozilla:
table | inline-table | table-cell | table-row | table-row-group | table-column |
table-column-group | table-header-group | table-footer-group | table-caption
Nel suo primo manuale sui CSS Eric Meyer si chiede:"Ma perch esiste la propriet display?".
Domanda legittima. A che serve cambiare l'ordine delle cose? Se ho a disposizione le liste, perch
devo impostare un paragrafo o un titolo come un list-item? Vero. Ma altri casi meno fantasiosi sono
da prendere in considerazione. Le immagini, per esempio, sono per loro natura elementi inline, si
inseriscono nel testo ed talvolta complicato gestirne il posizionamento. Se volessi mostrarle in una
riga tutta per loro mi basterebbe impostare il display su block, cos:
img {display: block;}
Per non parlare dell'utilit del valore none. Volete una pagina alternativa fatta solo di testo in 10
secondi? Facile. Costruite un CSS alternativo dove imposterete questa regola:
img {display: none;}
Nella pagina principale mettete un bel link: "Versione solo testo" e ci attaccate uno javascipt per
caricare il CSS alternativo. Fatto. Un'interessante applicazione di questa propriet la trovate anche
nell'articolo "Stampe perfette con i CSS".
La ver utilit della propriet display, emerge comunque in linguaggi non strutturali com XML.
Uno dei modi per rendere un file XML in un browser proprio quello di formattarlo con un CSS.
Ma gli elementi XML non ci dicono nulla su presentazione e struttura, a differenza di (X)HTML!
Se trovo H1 so cosa significa e come verr mostrato. Ma questo documento? Codice:
<guide>
<guide_linguaggi_web>
<guida>HTML</guida>
<guida>CSS</guida>
61
</guide_linguaggi_web>
<guide_scripting>
<guida>Javascript</guida>
<guida>VBScript</guida>
</guide_scripting>
</guide>
Nessuna informazione sulla presentazione. L'unico modo che ho per stabilire come rendere tali
elementi tramite la propriet display. Ma questo un discorso non proprio attinente a questa
guida. Basta l'accenno.
float
Con questa propriet possibile rimuovere un elemento dal normale flusso del docuemnto e
spostarlo su uno dei lati (destro o sinistro) del suo elemento contenitore. Il contenuto che circonda
l'elemento scorrer intorno ad esso sul lato opposto rispetto a quello indicato come valore di float.
La propriet non ereditata.
Il float un altro caso di funzionalit presenti in HTML solo per certi elementi che i CSS hanno
esteso a tutti gli altri (abbiamo gi incontrato il padding). Non spaventatevi della definizione di
prima. Il floating un'operazione che veniva fatta in HTML sulle immagini. Bastava usare nel tag
IMG l'attributo align e impostare come valore left, right, middle, etc.
Sintassi
<selettore> {float: <valore>;}
Valori
left. L'elemento viene spostato sul lato sinistro del box contenitore, il contenuto scorre a destra.
right. L'elemento viene spostato sul lato destro, il contenuto scorre a sinistra.
none. Valore iniziale e di default in mancanza di una dichiarazione esplicita. L'elemento
mantiene la sua posizione normale.
Una nota importantissima. Se usate il float con le immagini non avete problemi perch esse hanno
una dimensione intrinseca che il browser riconosce. Ma se lo applicate ad altri elementi dovete
esplicitamente impostare una dimensione orizzontale con la propriet width.
Esempi
div {width: 200px; float:right;}
img.foto {float: left;}
clear
La propriet clear serve a impedire che al fianco di un elemento compaiano altri elementi con il
float. Si applica solo agli elementi blocco e non ereditata.
62
L'origine di tale propriet questa: visto che il float sposta un elemento dal flusso normale del
docuemento, possibile che esso venga a trovarsi in posizioni non desiderate, magari al fianco di
altri elementi che vogliamo invece tenere separati. clear risolve questo problema.
Sintassi
<selettore> {clear: <valore>;}
Valori
none. Gli elementi con float possono stare a destra e sinistra dell'elemento.
left. Si impedisce il posizionamento a sinistra.
right. Si impedisce il posizionamento a destra.
both. Si impedisce il posizionamento su entrambi i lati.
Esempi
h1 {clear: both;}
Le regole che gestiscono float e clear sono davvero complesse, soprattutto quando si usano per
effettuare il posizionamento dinamico. Le regole di base sono comunque queste e sono pi che
sufficienti per iniziare a usare le due propriet. Vi propongo una lettura interessante sull'argomento:
http://www.webreference.com/html/tutorial20/
position
position la propriet fondamentale per la gestione della posizione degli elementi, di cui determina
la modalit di presentazione sulla pagina. Si applica a tutti gli elementi e non ereditata.
Sintassi
<selettore> {position: <valore>;}
Valori
static.
63
absolute
fixed
relative
Ciascuno di questi valori merita un spiegazione approfondita da cui emergeranno i concetti di base
che governano le regole sul posizionamento.
static
E' il valore di default, quello predefinito per tutti gli elementi non posizionati secondo un altro
metodo. Rappresenta la posizione normale che ciascuno di essi occupa nel flusso del documento.
absolute
L'elemento, o meglio, il box dell'elemento viene rimosso dal flusso del documento ed posizionato
in base alle coordinate fornite con le propriet top, left, right o bottom. Il posizionamento avviene
sempre rispetto al box contenitore dell'elemento. Questo rappresentato dal primo elemento
antenato (ancestor) che abbia un posizionamento diverso da static. Se tale elemento non esiste il
posizionamento avviene in base all'elemento radice HTML, che in condizioni standard coincide
con l'area del browser che contiene il documento e che ha inizio dall'angolo superiore sinistro di tale
area.Un elemento posizionato in modo assoluto scrorre insieme al resto del documento.
fixed
Usando questo valore il box dell'elemento viene, come per absolute, sottratto al normale flusso del
documento. La differenza sta nel fatto che per fixed il box contenitore sempre il cosiddetto
viewport. Con questo termine si intende la finestra principale del borwser, ovvero l'area del
contenuto. Altra differenza fondamentale: un box posizionato con fixed non scorre con il resto del
documento. Rimane, appunto, fisso al suo post. L'effetto lo stesso che si pu ottenere con l'uso dei
frame, in cui una parte della pagina rimane fissa e il resto scorre. Solo che qui il documento solo
uno. Purtroppo, il valore non supportato da Explorer su Windows.
relative
L'elemento viene posizionato relativamente al suo box contenitore. In questo caso il box contenitore
il posto che l'elemento avrebbe occupato nel normale flusso del documento. La posizione viene
anche qui impostata con le propriet top, left, bottom, right. Ma qui esse non indicano un punto
preciso, ma l'ammontare dello spostamento in senso orizzontale e verticale rispetto al box
contenitore.
64
Links
http://www.webreference.com/html/tutorial18/
top
Il significato di top cambia secondo la modalit di posizionamento.
Per gli elementi posizionati con absolute o fixed definisce la distanza verticale rispetto al bordo
superiore dell'elemento contenitore. Per gli elementi posizionati con relative stabilisce invece
l'ammontare dello spostamento rispetto al lato superiore della posizione originaria. In questo caso,
usando valori positivi il box viene spostato sotto, mentre con valori negativi lo spostamento avviene
verso l'alto.
Sintassi
<selettore> {top: <valore>;}
Valori
Esempi
div {top: 10px;}
p {top: 10%;}
left
Per gli elementi con posizione assoluta o fissa definisce la distanza dal bordo sinistro del box
contenitore. Per quelli con posizione relativa stabilisce lo spostamento rispetto al lato sinistro della
posizione originaria. Valori positivi spostano l'elemento verso destra, valori negativi verso sinistra.
Sintassi
<selettore> {left: <valore>;}
Valori
65
Esempi
div {left: 30px;}
bottom
Per i box con posizione assoluta o fissa definisce la distanza dal bordo inferiore dell'elemento
contenitore. Per quelli posizionati relativamente lo spostamento rispetto al lato inferiore della
posizione originaria.
Sintassi
<selettore> {bottom: valore>}
Valori
Esempi
div {bottom: 50px;}
right
Per i box con posizione assoluta o fissa definisce la distanza dal bordo destro dell'elemento
contenitore. Per quelli posizionati relativamente lo spostamento rispetto al lato destro della
posizione originaria.
Sintassi
<selettore> {right: valore;}
Valori
Esempi
div {right: 50px;}
Per quantpo riguarda la definizione della posizione, va detto che essa in ogni caso definita da due
coordinate. In genere si usano le propriet top e left.
66
visibility
Questa propriet determina se un elemento debba essere visibile o nascosto. Si applica a tutti gli
elementi e non ereditata.
Sintassi
<selettore> {visibility: <valore>;}
Valori
Esempi
div.box {visibility: hidden;}
p {visibility: visible;}
clip
Definisce la parte di un elemento posizionato che deve essere visibile. Nella definizione che ne
stata data con CSS2 non supportata da nessun browser.
z-index
Con questa propriet si imposta l'ordine di posizionamento dei vari elementi sulla base di una scala
di livelli. E' un meccanismo simile a quello dei layer sovrapposti di Photoshop ed utile nel
contesto del posizionamento dinamico. In seguito ad un posizionamento, infatti, possibile che un
elemento si sovrapponga ad un altro rendendolo illeggibile. Impostando lo z-index possibile
modificare l'ordine di tutti gli elementi.
Sintassi
<selettore> {z-index: <valore>;}
Valori
Esempi
div#box1 {z-index: 34;}
67
table-layout
Questa propriet imposta il metodo di layout di una tabella. Non ereditata. Si applica solo alle
tabelle.
Sintassi
<selettore> {table-layout: <valore>;}
Valori
Nel caso del valore auto tutto affidato al meccanismo di rendering dello user agent. Usando
invece fixed possiamo innanzitutto definire la larghezza della tabella tramite la propriet width.
Volendo creare una tabella di 400px, quindi, scriveremo questa regola:
table {
table-layout: fixed;
width: 400px;
}
Capite bene che la stessa cosa si pu ottenere in (X)HTML usando sempre l'attributo width:
<table width="400px">
Esempi
table.tabella1 {table-layout: fixed;}
table {table-layout: auto;}
border-collapse
Attraverso questa propriet possiamo stabilire in che modo trattare i bordi e gli spazi tra le celle di
una tabella. Si applica solo alle tabelle ed ereditata.
Sintassi
68
Valori
Esempi
table {
border: 2px solid black;
border-collapse: separate;
border-spacing: 5px;
}
border-spacing
Imposta lo spazio tra le celle di una tabella. Va usata solo in presenza di un modello di bordercollapse settato su separate. Propriet ereditata e applicabile solo alle tabelle.
Sintassi
<selettore> {border-spacing: <valore>;}
Valori
empty-cells
Gestisce il trattamento delle celle di tabella senza contenuto. Agisce solo su quelle che non
presentino al loro interno alcun tipo di markup, nemmeno il classico inserito in genere
proprio per simulare la presenza di contenuto. Propriet ereditata.
Sintassi
<selettore> {empty-cells: <valore>;}
Valori
caption-side
Le buone norme dell'accessibilit vogliono che una tabella sia sempre preceduta da una sorta di
titolo/riassunto. In (X)HTML questa funzione demandata al tag <CAPTION> di cui riportiamo
sotto un esempio di sintassi:
69
<table>
<caption>Titolo della tabella</caption>
<tr>
<td>...
</table>
La propriet caption-side definisce il lato su cui vogliamo far comparire tale titolo. E' ereditata. La
supporta solo Mozilla.
Sintassi
<selettore> {caption-side: <valore>;}
Valori
Esempi
table.tabella9 {
table-layout : fixed;
width : 300px;
background : Silver;
caption-side : bottom;
}
Altre propriet
Elenchiamo qui altre propriet di uso meno frequente e soprattutto (a parte cursor) quasi per nulla
supportate.
cursor
Definisce l'aspetto del cursore quando passa su un elemento. Ereditata. Si applica a tutti gli
elementi.
Sintassi
<selettore> {cursor: <valore>;}
Valori
I valori possibili sono molti ed possibile praticamente usare tutti i tipi di cursore abituali
dell'interfaccia utente che usate. Ecco la lista:
auto | crosshair | default | pointer | move | e-resize | ne-resize | nw-resize |
n-resize | se-resize | sw-resize | s-resize | w-resize | text | wait | help
70
E' anche possibile definire un cursore esterno, ovvero presente sul server e da scaricare. In questo
caso va indicato l'URL della risorsa:
a {cursor: url(url_del_cursore);}
L'uso pi tipico di questa propriet quello di modificare l'aspetto del cursore in corrispondenza dei
link. Se volete cambiare il classico ditino con un altro cursore basta questa regola:
a:hover {cursor: <valore>;}
content
La propriet content usata per definire il contenuto da inserire nel documento con gli pseudoelementi :before e :after.
La propriet non supportata da Explorer per Windows.
direction
Specifica la direzione del testo da usare nella presentazione del documento. Utile se volete scrivere
pagine in Ebraico.
outline
Il cosiddetto outline un bordo che possibile inserire attorno ad oggetti di un documento per
evidenziarli. Non supportato da nessun browser. Potenzialmente possibile definire l'aspetto del
bordo secondo le seguenti propriet:
outline-color: il colore
outline-style: lo stile
otline-width: lo spessore
quotes
Serve a definire stile e aspetto dei segni di virgolettatura.
71
unicode-bidi
Influenza il layout del testo nelle pagine in cui siano presenti testi con diverse direzioni.
Il layout della pagina in fase di stampa sar quello di un normale foglio A4 con margini di 3cm su
tutti i lati.
La parte preponderante della sezione dedicata alla gestione delle interruzioni di pagina in fase di
stampa. E' una questione seria. Quante volte provando a stampare una pagina web vi siete ritrovati
una tabella divisa tra due pagine? Bene. Per risolvere il problema sono state implementate propriet
ad hoc. Tutte dovrebbero tendere ad evitare comportamenti ritenuti dal W3C non corretti:
page-break-after
page-break-before
page-break-inside
Grazie ad esse possibile con esattezza e per ciascun elemento quando e dove inserire
un'interruzione di pagina. Ad esempio, se voglio evitare che l'interruzione nel corpo della tabella
scriver:
table {page-break-inside: avoid;}
Se invece ho una serie di sezioni di sommario alla fine delle quali voglio sempre un'interruzione
user questa regola:
div.sommario {page-break-after: always;}
Risorse
http://www.w3.org/tr/CSS-access
http://www.w3.org/tr/REC-CSS2/aural.html
Tabelle di compatibilit
Si tratta di utilissime tabelle che visualizzano il supporto delle propriet dei CSS2 nei vari browser.
Da qui, fatta l'analisi del vostro target tecnologico (quali browser supportare e quali no) potete
partire per valutare quali propriet o costrutti presentano problemi di implementazione.
http://www.xs4all.nl/%7Eppk/css2tests/
Westciv software la casa produttrice di due ottimi editor dedicati ai CSS. Sul suo sito ospita
centinaia di eccellenti risorse su (X)HTML e CSS, molte delle quali gratuite. La tavola di
compatibilit fra le pi complete, poich comprende CSS1 e CSS2. Non considerato tra i
73
Test
Le pagine di test hanno una filosofia diversa. In questo caso si parte in genere da una lista di
propriet, selettori e costrutti e se ne verifica il funzionamento con pagine costruite ad hoc. L'ideale
visitarle con diversi browser per verificare eventuali incongruenze nel rendering.
http://www.w3.org/Style/CSS/Test/CSS1/current/
Prototypical Pages. Gi citata. E' l'opera di Eric Meyer che completa il lavoro del Consorzio.
Monumentale.
Validazione
Come avviene gi da tempo per (X)HTML, il W3C ha predisposto sul suo sito un validatore di fogli
di stile CSS. Dalla pagina http://jigsaw.w3.org/css-validator/ potete accedere all'elenco
delle opzioni possibili:
Per i CSS, a differenza di (X)HTML, non ci sono molte regole sintattiche da rispettare. Basta fare
attenzione all'espressione dei propriet, ai commenti, all'uso delle parole chiave giuste. E'
preferibile anche scrivere il codice in minuscolo. Un consiglio che vi do questo: al momento di
validare il file vi viene chiesto il livello di approfondimento del responso. Selezionate, nel menu
con etichetta "Warnings" l'opzione ALL. Cos avrete modo di visualizzare anche gli avvertimenti.
Non sono errori e non inficiano la validazione, ma contengono utili consigli su errori da evitare.
A volte pu invece capitare di ricevere risposte criptiche, a prova di Eric meyer, mi viene da dire.
Niente problemi. Esiste questa pagina, http://www.websitedev.de/css/validator-faq, pronta
a liberarvi dal panico e a chiarirvi ogni dubbio.
74
facilitazione nella scrittura del codice. Pu avvenire con la colorazione differenziata delle
varie parti o con funzionalit di autocompletamento avanzate.
anteprima visuale. Avere, cio, la possibilit, di visualizzare in una finestra di preview gli
effetti di una regola.
wizard e templates
I software di cui parleremo in questa breve rassegna presentano quasi tutti queste tre caratteristiche,
seppur implementate in maniera diversa. Rappresentano comunque il meglio offerto attualmente dal
mercato.
TopStyle CSS & XHTML Editor (http://www.bradsoft.com/topstyle/). Rappresenta lo stato
dell'arte in questa nicchia di prodotti. Oltre alle features citate (superbamente implementate)
presenta altri strumenti eccezionali: lo StyleChecker analizza il foglio di stile alla ricerca di errori e
incongruenze ed possibile settarlo in base a diversi profili basati sulle specifiche del W3C o dei
singoli browser. Lo StyleSweeper ci aiuta a mantenere ordinato il codice, mentre con un click si ha
la possibilit, se collegati, di effettuare la validazione sul sito del W3C. La versione 3 incorpora un
potente editor XHTML. Starordinaria l'integrazione con Dreamweaver MX.
Simile a TopStyle, ma complessivamente meno performante StyleMaster PRO
(http://www.westciv.com/style_master/index.html) di Westciv software. A suo vantaggio la
presenza di una versione per Mac e la possibilit di abbinarlo nell'uso al suo gemello LayoutMaster
(http://www.westciv.com/layout_master/index.html). Si tratta, come si intuisce dal nome, di
un editor di layout basati sui CSS. Per gestire il posizionamento dinamico senza mal di testa.
75