# Regole e sintassi

CSS
Copertina Tutti i moduli · Sviluppo
    Copertina
* Regole e sintassiCSS/Regole_e_sintassi
** SelettoriCSS/Selettori
** CascadeCSS/Cascade
** Unità di misura, ereditarietà e box modelCSS/Unità_di_misura,_ereditarietà_e_box_model
* Supporti di visualizzazione
** Media
** Media con pagine
** Fogli di stile parlati
* Proprietà di baseCSS/Proprietà_di_base
** SfondoCSS/Proprietà_di_base/Sfondo
** Testo baseCSS/Proprietà_di_base/Testo_base
** Testo avanzatoCSS/Proprietà_di_base/Testo_avanzato
** ListeCSS/Liste
** Tabelle
** Animazioni, trasformazioni, transizioni
* Disegnare la struttura della paginaCSS/Disegnare_la_struttura_della_pagina
** PosizionamentoCSS/Posizionamento
* Contenuto generatoCSS/Contenuto generato
* Altre proprietàCSS/Altre_proprietà
* CompatibilitàCSS/Compatibilità
* ReferenceCSS/Reference
Modifica il sommario

## CSS esterni e interni

Gli stili di una pagina possono essere definiti sia all'interno del file nel quale devono operare, sia in un file a parte.
* Gli stili esterni solitamente vengono usati se si hanno molte pagine a cui applicare il medesimo stile. Questo permette di non fare confusione nel lavoro di modifica e revisione.
* Gli stili interni vengono usati se le pagine sui cui operare sono veramente poche o se il sito è semplice (questo sistema è sconsigliato perché nasconde una delle potenzialità dei CSS, ovvero la possibilità di applicarli a più pagine contemporaneamente).
Si noti che i CSS vengono validati dal validatore W3C solamente se sono esterni.

### Stili esterni

Per inserire un collegamento ad uno stile esterno alla pagina, usiamo il tag <link /> nell'intestazione della nostra pagina:
Il seguente sistema di importazione è invece più adatto a risolvere problemi di compatibilità tra vecchi e nuovi browser:

### Stili interni

Questo sistema permette di inserire dei CSS direttamente all'interno della pagina:
Si ricordi che questo sistema non permette la validazione da parte del W3C Validator

## Stili inline

L'ultimo modo per formattare un elemento con un foglio di stile consiste nell'uso dell'attributo style applicabile ad ogni elemento HTML. Questo sistema, chiamato talvolta stile inline, è utilizzato all'interno degli elementi del codice HTML della pagina e può risultare utile se c'è bisogno di aggiungere uno stile unico per l'elemento.
Se ad esempio si vuole formattare un elemento Fieldset in una pagina HTML, bisogna operare come segue:
In questo caso questo elemento, solo questo nella pagina, avrà il testo al suo interno rosso e grande 14px. Si ricorda che questa modalità è fortemente deprecata dalle più recenti versioni dell'HTML.

## Sintassi fondamentale

Un foglio CSS è semplicemente un insieme di definizioni dello stile da applicare a determinati elementi della pagina. La loro sintassi è:
Le dichiarazioni tra parentesi graffe racchiudono coppie di proprietà : valore separate da un punto e virgola. Ad esempio:
è un foglio di stile con una sintassi valida. In particolare, il valore per la proprietà font-size sarà 12px. Per separare i valori di una stessa proprietà, vengono utilizzate le virgole:

### Commenti

All'interno di un foglio di stile è possibile inserire dei commenti, ossia porzioni di testo che verranno ignorate dal browser, delimitati da /* e */, che si possono estendere su una o più righe.
Questo può risultare utile soprattutto nei casi di collaborazione a coloro che non hanno scritto di prima mano il codice; può però risultare utile anche all'autore stesso, ad esempio per poter riprendere il proprio codice tra le mani dopo un lungo periodo di tempo; inoltre può risultare comodo per eliminare temporaneamente porzioni di codice durante la fase di test delle proprie pagine web.

# Selettori

CSS
Copertina Tutti i moduli · Sviluppo
    Copertina
* Regole e sintassiCSS/Regole_e_sintassi
** SelettoriCSS/Selettori
** CascadeCSS/Cascade
** Unità di misura, ereditarietà e box modelCSS/Unità_di_misura,_ereditarietà_e_box_model
* Supporti di visualizzazione
** Media
** Media con pagine
** Fogli di stile parlati
* Proprietà di baseCSS/Proprietà_di_base
** SfondoCSS/Proprietà_di_base/Sfondo
** Testo baseCSS/Proprietà_di_base/Testo_base
** Testo avanzatoCSS/Proprietà_di_base/Testo_avanzato
** ListeCSS/Liste
** Tabelle
** Animazioni, trasformazioni, transizioni
* Disegnare la struttura della paginaCSS/Disegnare_la_struttura_della_pagina
** PosizionamentoCSS/Posizionamento
* Contenuto generatoCSS/Contenuto generato
* Altre proprietàCSS/Altre_proprietà
* CompatibilitàCSS/Compatibilità
* ReferenceCSS/Reference
Modifica il sommario
I CSS possono contenere diverse indicazioni sullo stile dei vari elementi della pagina, i quali devono essere identificati dai selettori. I selettori possono riferirsi a:
* elementi
* ID
* classi
Esistono oltre a questi anche particolari elementi o classi, chiamate pseudo-classi e pseudo-elementi.

## Tag

Il caso più semplice di selettore, che definisce gli attributi CSS per tutti gli elementi con un determinato nome, è quello di un semplice tag. In questo caso gli attributi verranno applicati ogni volta che quel tag è presente nel documento. Ad esempio:
Questo codice di esempio farà in modo che ogni elemento p (i paragrafi) della pagina abbia un bordo blu tratteggiato di un pixel di spessore.

## ID e classi

Un id è un selettore CSS che può essere assegnato ad un solo elemento nella pagina, identificato univocamente dall'attributo id. Una classe è un insieme di proprietà che può essere invece assegnato a uno o più elementi tramite l'attributo class. La sintassi è:
e, nel documento, sono richiamate in questo modo:
Per quanto riguarda le classi, è possibile stabilire dichiarazioni diverse a seconda essa sia attribuita ad un elemento piuttosto che ad un'altra:
imposta uno stile diverso a seconda che la classe evidenziato sia attribuita a elementi H1 e elementi P. È possibile inoltre stabilire sottoclassi, la cui sintassi è
Nell'esempio precedente avremmo potuto quindi aggiungere:
e, nel documento:

## Selettore universale

Esiste anche un selettore * che abbina qualsiasi elemento, classe o id sulla pagina.

## Raggruppare i selettori

È possibile definire più selettori per una stessa dichiarazione:
Per esempio:
Con questo codice, sia i tag h1, che gli elementi con classe rosso o ID mioID avranno il testo di colore rosso.

### Le pseudo-classi

Esistono particolari classi che identificano le proprietà di un selettore in base al proprio stato, chiamate pseudo-classi. La sintassi è
Il loro uso è legato soprattutto ai tag <a>; gli stati definibili per i link sono:
* link indica lo stato di un collegamento non ancora visitato
* visited indica lo stato di un collegamento già visitato
* hover indica lo stato di un collegamento quanto vi passa sopra il mouse. Una volta che il mouse esce dal link, viene ripreso lo stile definito da link o da visited
* active indica lo stato di un collegamento quando l'utente fa clic su di esso
Un altro stato definibile è focus, utilizzato soprattutto per i campi dei form, che identifica lo stato di un elemento che ha ottenuto il focus da parte dell'utente. Una ulteriore pseudo-classe è associata alla lingua dell'utente. Ad esempio:
È interessante la possibilità di definire uno stile dipendente da una pseudoclasse di un altro elemento. Ad esempio:
Questo codice imposta uno stile per gli elementi div con id menudiv e per i collegamenti con id menu quando il mouse vi si trova sopra.

## Gli pseudo-elementi

Gli pseudo-elementi identificano elementi specifici ma che non sono identificati da tag o attributi. La sintassi è:
I principali pseudo-elementi sono:
* first-child identifica il primo elemento figlio contenuto nell'elemento
* first-letter identifica la prima lettera del testo contenuto nell'elemento
* first-line identifica la prima riga del testo contenuto nell'elemento
* before e after usati in relazione con la proprietà content

## Altri tipi di selettori

Basandosi sulla gerarchia degli elementi nel documento è possibile definire alcuni stili particolari.
* elementi figli: è possibile definire uno stile per tutti gli elementi contenuti in un altro. La sintassi è:
    Ad esempio:
    identifica tutti gli elementi b contenuto anche non direttamente in un elemento h1
* elementi fratelli: il primo elemento allo stesso livello di un altro che abbia quindi lo stesso legame di parentela. La sintassi è
    e identifica il primo elemento1 fratello di un elemento2

# Cascade

CSS
Copertina Tutti i moduli · Sviluppo
    Copertina
* Regole e sintassiCSS/Regole_e_sintassi
** SelettoriCSS/Selettori
** CascadeCSS/Cascade
** Unità di misura, ereditarietà e box modelCSS/Unità_di_misura,_ereditarietà_e_box_model
* Supporti di visualizzazione
** Media
** Media con pagine
** Fogli di stile parlati
* Proprietà di baseCSS/Proprietà_di_base
** SfondoCSS/Proprietà_di_base/Sfondo
** Testo baseCSS/Proprietà_di_base/Testo_base
** Testo avanzatoCSS/Proprietà_di_base/Testo_avanzato
** ListeCSS/Liste
** Tabelle
** Animazioni, trasformazioni, transizioni
* Disegnare la struttura della paginaCSS/Disegnare_la_struttura_della_pagina
** PosizionamentoCSS/Posizionamento
* Contenuto generatoCSS/Contenuto generato
* Altre proprietàCSS/Altre_proprietà
* CompatibilitàCSS/Compatibilità
* ReferenceCSS/Reference
Modifica il sommario
Per cascade si intendono le regole con le quali il browser assegna ad un elemento una dichiarazione di stile. Questo è importante nel caso di selettori diversi che indichino lo stesso elemento fornendo dichiarazioni contrastanti.
Nel caso di fogli di stile importati, vengono considerate gli stili del foglio che li importa.

## L'origine di un foglio di stile

Prima di analizzare il cascade, è bene vedere le possibili origini di un foglio di stile:
* autore: è lo stile definito nel sorgente HTML della pagina dal webmaster o dal grafico del sito
* browser: i browser conformi agli standard del World Wide Web Consortium devono avere un foglio di stile predefinito da assegnare alle pagine
* utente: taluni browser mettono a disposizione all'utente la possibilità di creare un foglio di stile personalizzato, magari tramite un'interfaccia grafica e traducendo poi le impostazioni dell'utente in dichiarazioni CSS
È possibile quindi che questi fogli di stile si sovrappongano e in questo caso vengono applicati in base al cascade.

## La specificità di un selettore

Altro elemento importante è la specificità di un selettore. Vediamo come calcolarla:
* calcolare il numero di attributi ID nel selettore (= a)
* calcolare il numero degli altri attributi (es. classi) e pseudoclassi del selettore (= b)
* calcolare il numero dei nomi degli elementi HTML (= c)
Concatenare ora i tre numeri nell'ordine a + b + c. Si faccia attenzione a scegliere una base di numerazione opportuna: se, ad esempio, b vale 12, si può scegliere una base esadecimale in modo tale che il numero risulti, ad esempio, 0-c-7 invece che 0-12-7.
Si noti che l'attributo style degli elementi HTML possono essere considerati selettori ID, in quanti hanno un riferimento univoco con il tag a cui si riferiscono.

## !important

Ultima regola da vedere prima di analizzare le regole del cascade è la dichiarazione !important la quale indica al browser che una regola è particolarmente importante, dando ad essa priorità rispetto ad eventuali proprietà contrastanti in altre dichiarazioni. Vediamo la sintassi:

## Attribuire uno stile ad un elemento

Il CSS assegna un peso a ciascun blocco di dichiarazioni di stile; nel caso di sovrapposizione di dichiarazioni, vince quella con maggior peso.
Analizziamo finalmente le regole seguite dal browser per attribuire uno stile ad un elemento HTML nella pagina:
* dapprima cerca tutte le dichiarazioni identificate dal selettore che corrisponde all'elemento in questione
* la prima analisi riguarda l'origine degli stili. Per quanto riguarda le normali dichiarazioni, hanno la precedenza, in ordine, gli stili dell'autore, dell'utente e del browser. Nel caso di dichiarazioni seguite da !important, invece, hanno la precedenza, in ordine, gli stili dell'utente, dell'autore e del browser; questo per permettere la piena accessibilità dei contenuti da parte di utenti con handicap visivi, ad esempio. Le dichiarazioni !important superano sempre le dichiarazioni normali.
* la seconda distinzione riguarda la specificità del selettore: ha la precedenza il selettore con specificità maggiore
* nel caso due dichiarazioni abbiano stessi peso, specificità e origine vince quella fornita per ultima. Le dichiarazioni dei fogli di stile importati sono considerate come precedenti quasiasi dichiarazione del foglio che importa.

# Unità di misura, ereditarietà e box model

CSS
Copertina Tutti i moduli · Sviluppo
    Copertina
* Regole e sintassiCSS/Regole_e_sintassi
** SelettoriCSS/Selettori
** CascadeCSS/Cascade
** Unità di misura, ereditarietà e box modelCSS/Unità_di_misura,_ereditarietà_e_box_model
* Supporti di visualizzazione
** Media
** Media con pagine
** Fogli di stile parlati
* Proprietà di baseCSS/Proprietà_di_base
** SfondoCSS/Proprietà_di_base/Sfondo
** Testo baseCSS/Proprietà_di_base/Testo_base
** Testo avanzatoCSS/Proprietà_di_base/Testo_avanzato
** ListeCSS/Liste
** Tabelle
** Animazioni, trasformazioni, transizioni
* Disegnare la struttura della paginaCSS/Disegnare_la_struttura_della_pagina
** PosizionamentoCSS/Posizionamento
* Contenuto generatoCSS/Contenuto generato
* Altre proprietàCSS/Altre_proprietà
* CompatibilitàCSS/Compatibilità
* ReferenceCSS/Reference
Modifica il sommario
Parleremo in questa pagina di alcune delle proprietà più importanti delle pagine di stile, ovvero le unità di misura, la definizione dei valori, il concetto di ereditarietà e i box.

## Definire i valori

In alcuni casi, una proprietà accetta solo valori definiti tra una serie di parole chiave; negli altri casi il CSS accetta diversi di valori.

### Numeri interi e reali

I numeri devono essere indicati senza separatori per le migliaia, usando un punto (.) come separatore decimale. È possibile inoltre specificare il segno del numero (+ o -) anche se la maggior parte delle volte non serve in quanto molte proprietà accettano solo valori positivi.

### Grandezze

Le grandezze sono usate per definire lunghezze orizzontali e verticali. e sono espresse da un numero (intero o reale) seguito da una unità di misura.
Le principali unità di misura si dividono in:
* relative: specificano una grandezza che dipende da un'altra grandezza. Sono:
** em: è relativa all'altezza font in uso. Se, ad esempio, il font è alto 12pt, 1em varrà 12pt, 2em varranno 24pt.
** ex: funziona come em, ma è relativa all'altezza della lettera x nel set di caratteri in uso.
** px: pixel, sono relativi al dispositivo di output (solitamente lo schermo) e alle impostazioni del computer dell'utente
* assolute: le unità di misura assolute sono equivalenti a quelle usate nella realtà. Sono:
** in: pollici; un pollice equivale a 2,54 centimetri
** cm: centimetri
** mm: millimetri
** pt: punti — un pt per CSS vale 1/72 di pollice
** pc: pica — 1 pica vale 12 punti

### Percentuale

I valori in percentuale servono per esprimere percentuali del valore che assume la proprietà stessa dell'elemento padre e vanno espresse con un numero seguito dal simbolo di percentuale (%)

### URI

I valori uri specificano un percorso assoluto (es. http://esempio/dir/file) oppure uno relativo (nell'esempio di prima, dir/file). I valori URI vanno usati tramite la notazione url(percorso). percorso deve essere delimitato da apici (') se contiene caratteri di spaziatura non codificati (es: http://esempio/dir con spazi/file).

### Stringhe

Le stringhe sono delle sequenze alfanumeriche di caratteri, ovvero del testo. In CSS vanno delimitate da una coppia di virgolette singole o doppie, finendo con lo stesso apice con cui si è iniziato. Ad esempio:
Nel caso si voglia inserire in una stringa delimitata, ad esempio, da apici un apice è necessario usare il carattere di commutazione \ (barra retroversa). Ad esempio:

### Colori

Un colore può essere identificato con tre metodi differenti:
* tramite un numero esadecimale che indica le componenti RGB, ad esempio #RRGGBB. Per una lista completa dei colori esadecimali, vedi la tavolozza dei colori
* tramite la funzione
    dove rosso, verde e blu sono le componenti RGB del colore espresse con un valore intero da 0 a 255.
* tramite una delle parole chiave predefinite, che sono:
   * black - nero
   * silver - argento
   * gray - grigio
   * white - bianco
   * maroon - marrone
   * red - rosso
   * purple - viola
   * fuchsia - fucsia
* green - verde
* lime - verde chiaro
* olive - oliva
* yellow - giallo
* navy - blu scuro
* blue - blu
* teal - verde acqua scuro
* aqua - verde acqua
* tramite un colore associato alle proprietà di sistema. Ad esempio:
   * background - il colore di sfondo del desktop
   * buttonFace - il colore di sfondo dei pulsanti
   * buttonText - testo dei pulsanti
   * captionText - testo delle etichette
   * grayText - testo disabilitato

## Ereditarietà

Nei fogli di stile l'ereditarietà, come suggerisce la parola, si verifica quando, definito uno stile per un elemento HTML, a tutti i suoi elementi figli (cioè contenuti anche indirettamente in esso) verrà applicato lo stesso stile (si dice che la proprietà viene ereditata).
Per esempio, se all'elemento <body> applichiamo un colore rosso tramite la dichiarazione color: red, tutti i suoi elementi discendenti (quindi tutti gli elementi della pagina) erediteranno questa proprietà, a meno che non venga stabilito diversamente nelle dichiarazioni di altri elementi discendenti del tag body. Infatti l'ereditarietà è l'ultima possibilità per attribuire uno stile ad un elemento.
Non tutte le proprietà sono ereditabili: non avrebbe senso, ad esempio, forzare l'ereditarietà delle dimensioni di un elemento o i suoi margini, in quanto sono normalmente diversi per ogni singolo elemento; saranno invece ereditate proprietà che rendano la pagina omogenea, come appunto il colore o le dimensioni del testo.
Per forzare l'ereditarietà di una proprietà per una particolare dichiarazione, è possibile usare il valore speciale inherit (eredita), che è un valore valido per qualsiasi proprietà e imposta il valore dell'elemento appena genitore.

## Il box model

Per box model si intende l'insieme delle regole per la definizione degli stile degli elementi blocco. Ogni box comprende alcuni elementi di base:
* un'area del contenuto vero e proprio (il testo, un'immagine, ecc...), di cui è possibile definire l'altezza e la larghezza (width e height)
* un padding, ossia uno spazio vuoto tra il contenuto e il bordo dell'elemento
* un bordo (border), del quale è possibile impostare colore, stile e spessore
* un margine (margin) che identifica uno spazio intercorrente tra l'elemento e gli altri elementi presenti nella pagina. Nel caso di due box con margini allineati in orizzontale, la loro distanza sarà data dalla somma dei due margini. Se sono allineati verticalmente, intervengono le regole del margin collapsing e la distanza effettiva tra i due elementi sarà pari al valore del margine maggiore.
L'altezza e la larghezza effettive di un elemento saranno quindi date dalla somma delle dimensioni del contenuto orizzonti/veritcali (width e height), dal valore del padding orizzontale/verticale e dallo spessore dei bordi orizzontali/verticali.

# Proprietà di base

CSS
Copertina Tutti i moduli · Sviluppo
    Copertina
* Regole e sintassiCSS/Regole_e_sintassi
** SelettoriCSS/Selettori
** CascadeCSS/Cascade
** Unità di misura, ereditarietà e box modelCSS/Unità_di_misura,_ereditarietà_e_box_model
* Supporti di visualizzazione
** Media
** Media con pagine
** Fogli di stile parlati
* Proprietà di baseCSS/Proprietà_di_base
** SfondoCSS/Proprietà_di_base/Sfondo
** Testo baseCSS/Proprietà_di_base/Testo_base
** Testo avanzatoCSS/Proprietà_di_base/Testo_avanzato
** ListeCSS/Liste
** Tabelle
** Animazioni, trasformazioni, transizioni
* Disegnare la struttura della paginaCSS/Disegnare_la_struttura_della_pagina
** PosizionamentoCSS/Posizionamento
* Contenuto generatoCSS/Contenuto generato
* Altre proprietàCSS/Altre_proprietà
* CompatibilitàCSS/Compatibilità
* ReferenceCSS/Reference
Modifica il sommario
Nei moduli seguenti verranno descritte le proprietà di base di questo linguaggio. Si parlerà delle proprietà del testo e dello sfondo.

# Proprietà di base/Sfondo

CSS
Copertina Tutti i moduli · Sviluppo
    Copertina
* Regole e sintassiCSS/Regole_e_sintassi
** SelettoriCSS/Selettori
** CascadeCSS/Cascade
** Unità di misura, ereditarietà e box modelCSS/Unità_di_misura,_ereditarietà_e_box_model
* Supporti di visualizzazione
** Media
** Media con pagine
** Fogli di stile parlati
* Proprietà di baseCSS/Proprietà_di_base
** SfondoCSS/Proprietà_di_base/Sfondo
** Testo baseCSS/Proprietà_di_base/Testo_base
** Testo avanzatoCSS/Proprietà_di_base/Testo_avanzato
** ListeCSS/Liste
** Tabelle
** Animazioni, trasformazioni, transizioni
* Disegnare la struttura della paginaCSS/Disegnare_la_struttura_della_pagina
** PosizionamentoCSS/Posizionamento
* Contenuto generatoCSS/Contenuto generato
* Altre proprietàCSS/Altre_proprietà
* CompatibilitàCSS/Compatibilità
* ReferenceCSS/Reference
Modifica il sommario
Grazie ai CSS possiamo facilmente assegnare un colore o un'immagine di sfondo, ripetuta o meno, ad un elemento nel web: dal body al paragrafo, dalla tabella all'input form.

## Colore

La proprietà background-color permette di definire il colore di sfondo di un elemento.
Sintassi:
Il valore deve essere un colore. Il colore verrà inoltre usato per riempire gli spazi non coperti da un'eventuale immagine di sfondo.
Esempio:

### background-image

La proprietà background-image definisce un'eventuale immagine da usare per lo sfondo dell'elemento.
Sintassi:
dove <valore> può essere:
* un URL assoluto o relativo che punti ad un'immagine (in questo caso bisognerà usare la notazione url(percorso)
* none (valore di default): non verrà applicata nessuna immagine allo sfondo
Esempio:

## background-repeat

Imposta il modo in cui l'immagine viene ripetuta sullo sfondo.
Sintassi:
I valori possibili sono i seguenti:
* repeat: l'immagine di sfondo viene ripetuta sia in senso orizzontale sia in senso verticale
* repeat-x: l'immagine di sfondo viene ripetuta in senso orizzontale
* repeat-y: l'immagine di sfondo viene ripetuta in senso verticale
* no-repeat: l'immagine di sfondo viene visualizzata solo una volta, senza ripetizioni

## background-attachment

Questa funzione consente di scegliere se l'immagine dovrà essere fissa sullo sfondo, o muoversi con la pagina.
Sintassi:
dove <valore> può assumere i seguenti valori:
* fixed: l'immagine è fissa sullo sfondo
* scroll: l'immagine si muove con la pagina

## Posizione

Questa funzione decide come deve essere posizionata l'immagine all'interno della pagina.
Sintassi:
dove <valore> può assumere questi valori:
* top left in alto a sinistra
* top center in altro centrata
* top right in alto a destra
* center left al centro a sinistra
* center center al centro centrata
* center right al centro a destra
* bottom left in basso a sinistra
* bottom center in basso centrata
* bottom right in basso a destra
* <valori in percentuale>
Per quanto riguarda in valori in percentuale, essi decidono il valore x e y in percentuale rispetto alla pagina.
Esempio:
L'immagine è così mostrata al centro.

## Riepilogo

Per una maggiore compattezza e semplificazione del codice, possiamo riassumere tutte le proprieta relative allo sfondo scrivendo semplicemente background e tutti i 5 valori possibili a seguire.
Esempio:

## Alcuni esempi

Per creare sfondi accattivanti e leggeri in modo semplice, è sufficiente usare con un po' di abilità programmi di grafica e la proprietà background. Ad esempio è molto facile creare uno sfondo sfumato che riempie l'intera pagina.
Vogliamo ottenere uno sfondo azzurro nella parte superiore della pagina e blu nella parte inferiore; per ridurre il peso della pagina finale, usiamo un'immagine stretta e alta che poi ripeteremo in orizzontale. Per prima cosa, usando un programma di grafica come Gimp, creiamo un'immagine con altezza a piacere e larghezza 2px e la riempiamo in verticale con il riempimento sfumato che preferiamo. Una volta salvata l'immagine nella cartella della pagine, ad esempio come "back.png", usiamo qualche proprietà CSS per applicare lo sfondo alla pagina:

# Proprietà di base/Testo base

CSS
Copertina Tutti i moduli · Sviluppo
    Copertina
* Regole e sintassiCSS/Regole_e_sintassi
** SelettoriCSS/Selettori
** CascadeCSS/Cascade
** Unità di misura, ereditarietà e box modelCSS/Unità_di_misura,_ereditarietà_e_box_model
* Supporti di visualizzazione
** Media
** Media con pagine
** Fogli di stile parlati
* Proprietà di baseCSS/Proprietà_di_base
** SfondoCSS/Proprietà_di_base/Sfondo
** Testo baseCSS/Proprietà_di_base/Testo_base
** Testo avanzatoCSS/Proprietà_di_base/Testo_avanzato
** ListeCSS/Liste
** Tabelle
** Animazioni, trasformazioni, transizioni
* Disegnare la struttura della paginaCSS/Disegnare_la_struttura_della_pagina
** PosizionamentoCSS/Posizionamento
* Contenuto generatoCSS/Contenuto generato
* Altre proprietàCSS/Altre_proprietà
* CompatibilitàCSS/Compatibilità
* ReferenceCSS/Reference
Modifica il sommario
Verranno adesso descritte le proprietà di base del CSS inerenti al testo:

## color

La proprietà color specifica il colore del testo contenuto in un qualsiasi elemento HTML, ad esempio una pagina intera, o una tabella, o il contenuto di un fieldset, etc.
Sintassi:
Dove <colore> è un valore esadecimale (ad esempio #FF0000, che indica il rosso) oppure una parola chiave, come negli esempi seguenti:
Con l'esempio di cui sopra, assegneremo il colore rosso al testo di tutta la pagina, tranne quello contenuto nelle tabelle.

## Allineare il testo

Per definire l'allineamento del testo rispetto all'interno dell'elemento che lo contiene si usa la proprietà text-align.
Sintassi:
Dove <pos> può assumere i valori :
* left
* center
* right
che allineano il testo rispettivamente a sinistra, al centro e a destra, e
* justify
che giustifica il testo ai margini dell'elemento.

## text-decoration

La proprietà text-decoration serve per definire eventuali decorazioni in aggiunta al testo.
Sintassi:
Dove <valore> può assumere uno dei seguenti valori:
* none: al testo non viene applicata nessuna decorazione
* underline: il testo viene sottolineato da una riga continua
* overline: ogni riga del testo ha una linea continua sopra
* line-through: il testo risulta barrato da una linea continua
* blink: il testo lampeggia (da colore a trasparente). Non tutti i browser supportano questo valore

## Indentare i paragrafi

Per impostare il rientro per la prima riga del testo si usa la proprietà text-indent.
Sintassi:
Dove <valore> è un valore percentuale o affiancato da un'unita di misura (in questo caso è preferibile usare em) che definisce lo spazio tra il margine dell'elemento e la prima lettera del testo. È possibile assegnare a questa proprietà anche valori negativi.

## text-transform

Permette di forzare la capitalizzazione del testo.
Sintassi:
Dove <cap> può assumere uno dei seguenti valori:
* none: la capitalizzazione del testo rimane quella definita nel codice HTML
* capitalize: forza la prima lettera di ogni parola alla capitalizzazione maiuscola
* uppercase: forza il testo ad essere maiuscolo
* lowercase: forza il testo alla capitalizzazione minuscola

## letter-spacing e word-spacing

Definiscono lo spazio rispettivamente tra i caratteri e le parole del testo
Sintassi:
Dove <valore> può essere normal, che definisce la spaziatura normale tra le lettere o le parole, un valore espresso in percentuale o una grandezza seguita da un'unità di misura valida.

## Spazi tra le linee di testo

La proprietà line-height serve invece per definire l'altezza della linea testo, che influisce quindi sulle righe successive quando si va a capo. Il suo valore è una grandezza, normalmente espressa in em.

## Gestire gli spazi

Come ultima del testo analizziamo la proprietà white-space, che vi capiterà di usare abbastanza poco. Questa proprietà serve a definire il comportamento del browser con gli spazi bianchi nel codice HTML, e può assumere i seguenti valori:
* normal: il browser si comporta come normalmente (va a capo agli spazi, unisce le sequenze di spazi);
* pre funziona come il tag HTML <pre>: gli spazi bianchi non vengono "condensati" e gli accapo sono mantenuti rispetto al sorgente HTML;
* nowrap: come normal, solo che il browser non spezza il testo se c'è uno spazio;
* pre-line: come pre, ma gli spazi vengono condensati.

# Proprietà di base/Testo avanzato

CSS
Copertina Tutti i moduli · Sviluppo
    Copertina
* Regole e sintassiCSS/Regole_e_sintassi
** SelettoriCSS/Selettori
** CascadeCSS/Cascade
** Unità di misura, ereditarietà e box modelCSS/Unità_di_misura,_ereditarietà_e_box_model
* Supporti di visualizzazione
** Media
** Media con pagine
** Fogli di stile parlati
* Proprietà di baseCSS/Proprietà_di_base
** SfondoCSS/Proprietà_di_base/Sfondo
** Testo baseCSS/Proprietà_di_base/Testo_base
** Testo avanzatoCSS/Proprietà_di_base/Testo_avanzato
** ListeCSS/Liste
** Tabelle
** Animazioni, trasformazioni, transizioni
* Disegnare la struttura della paginaCSS/Disegnare_la_struttura_della_pagina
** PosizionamentoCSS/Posizionamento
* Contenuto generatoCSS/Contenuto generato
* Altre proprietàCSS/Altre_proprietà
* CompatibilitàCSS/Compatibilità
* ReferenceCSS/Reference
Modifica il sommario
In questo modulo verranno trattate le proprietà per definire il font di un testo in una pagina, che sono principalmente:

## Tipo di carattere

Permette di definire il tipo di carattere usato per la visualizzazione del testo.
Sintassi:
dove <valore> è una sequenza di uno o più tipi di carattere indicati tra apici nell'ordine in cui verranno usati nel caso non siano installati sul sistema operativo dell'utente. È possibile inoltre definire una famiglia generale di caratteri tramite i seguenti valori:
* serif: le serif sono le grazie, ovvero gli abbellimenti delle lettere, che presentano caratteri come il Times New Roman o il FreeSerif. È usato soprattutto per la stampa, in quanto la lettura delle grazie su schermo risulta più faticosa. Esempio: Testo con serif.
* sans-serif: sono sans-serif (senza grazie) font come il Verdana, l'Arial, il FreeSans, l'Helvetica, ecc... Sono usati prevalentemente per lo schermo. Esempio: Testo senza serif.
* cursive: i font cursive presentano caratteri più simili alla grafia umana piuttosto che a quelli di stampa. Esempio: Cursive.
* fantasy: caratteri che uniscono la visualizzazione del testo ad elementi decorativi. Esempio: Testo fantasioso.
* monospace: caratteri tipo telescrivente o macchina da scrivere e quindi monospaziati, come il Courier. Esempio: Testo monospaziato.
Ad esempio possiamo definire così il font di una pagina web:

## Dimensione del testo

Definisce l'altezza del testo che dipenderà anche dal tipo di carattere usato. Normalmente questa proprietà è definita in em oppure in pt.
Sintassi:

## Testo grassetto

La proprietà font-weight permette di definire il "peso" del testo, ad esempio se vada visualizzato in grassetto o meno.
Sintassi:
Dove valore è un valore in centinaia compreso tra 100 e 900 inclusi (900 corrisponderà ad un testo più grassetto di 100) oppure uno tra i seguenti valori:
* normal
* bold
* bolder
* lighter
che definiscono un testo normale, grassetto, grassetto pesante e più "leggero". Normalmente il valore normal corrisponde al peso numerico 500.

## Testo corsivo

La proprietà font-style permette di definire un font in corsivo italico o obliquo.
Sintassi:
dove valore può essere normal, italic o oblique.

## Maiuscoletto

Per impostare un testo maiuscoletto si usa la proprietà font-variant.
Sintassi:
dove valore può assumere il valore normal o small-caps (maiuscoletto). Normalmente il testo maiuscoletto presenta i caratteri minuscoli come delle riduzioni dei corrispettivi caratteri maiuscoli.

## La proprietà riassuntiva font

La proprietà font permette di riassumere le proprietà viste in questo modulo.
Sintassi:
Notare come line-height vada impostato subito dopo font-size, separato da quest'ultimo dalla barra "/".
È possibile inoltre indicare al posto dei diversi valori font, una delle seguenti famiglie usate dal sistema in uso:
* caption: il font usato per le etichette ad esempio dei pulsanti
* icon: il font usato per le etichette delle icone
* menu: il font usato nei menu
* message-box: il font usato per le finestre di dialogo
* small-caption: il font usato per le etichette dei piccoli controlli
* status-bar: il font usato per la barra di stato delle finestre

## font-stretch e font-size-adjust

Nelle specifiche CSS 2 sono definite anche le proprietà font-stretch e font-size-adjust, sfortunatamente poco usate a causa della loro scarsa compatibilità con i vari browser; pertanto non ci soffermeremo su di esse in questa sede.

# Liste

CSS
Copertina Tutti i moduli · Sviluppo
    Copertina
* Regole e sintassiCSS/Regole_e_sintassi
** SelettoriCSS/Selettori
** CascadeCSS/Cascade
** Unità di misura, ereditarietà e box modelCSS/Unità_di_misura,_ereditarietà_e_box_model
* Supporti di visualizzazione
** Media
** Media con pagine
** Fogli di stile parlati
* Proprietà di baseCSS/Proprietà_di_base
** SfondoCSS/Proprietà_di_base/Sfondo
** Testo baseCSS/Proprietà_di_base/Testo_base
** Testo avanzatoCSS/Proprietà_di_base/Testo_avanzato
** ListeCSS/Liste
** Tabelle
** Animazioni, trasformazioni, transizioni
* Disegnare la struttura della paginaCSS/Disegnare_la_struttura_della_pagina
** PosizionamentoCSS/Posizionamento
* Contenuto generatoCSS/Contenuto generato
* Altre proprietàCSS/Altre_proprietà
* CompatibilitàCSS/Compatibilità
* ReferenceCSS/Reference
Modifica il sommario
In questo modulo verrà trattata la formattazione delle liste che rispetto a quella fornita dall'HTML è sicuramente più gestibile.

## list-style-type

Questa proprietà permette di stabilire, analogamente all'attributo type delle liste HTML, il simbolo usato come punto elenco, sia di una lista ordinata sia di una non ordinata. Può assumere i seguenti valori:
* liste ordinate:
** decimal: numeri decimali, partendo da 1
** decimal-leading-zero: numeri decimali con zeri aggiuntivi (01...99)
** lower-roman e upper-roman: numeri romani minuscoli (i, ii, iii, iv, v, ...) e maiuscoli (I, II, III, IV, V, ...)
** lower-latin/lower-alpha e upper-latin/upper-alpha: lettere dell'alfabeto latino minuscole (a, b, c, ... z) e maiuscole (A, B, C, ... Z)
** lower-greek: lettere dell'alfabeto greco minuscole (α, β, γ, ...)
** georgian: numerazione Georgiana (an, ban, gan, ...)
** armenian: numerazione Armena
* liste non ordinate: sono disponibili i normali valori disc, square e circle, che funzionano come l'attributo type delle liste HTML
Impostando la proprietà al valore none la lista apparrà, se non viene specificata un'immagine, senza punto elenco.

## list-style-image

CSS permette di definire come punto elenco un'immagine; nel caso sia stato impostato un valore sia per list-style-type sia per questa proprietà, viene mostrata solo l'immagine (se è valida).
Sintassi:
<percorso> è quindi un percorso che identifica un'immagine.

## list-style-position

Questa proprietà permette di impostare la posizione del punto elenco di ogni elemento li. Può assumere i seguenti valori:
* outside: il punto elenco risulterà esterno al blocco del testo dell'elemento
* inside: il punto elenco risulterà interno al blocco del testo dell'elemento
Il concetto risulta forse più chiaro con un esempio:
* La proprietà è settata qui su inside
* Anche qui
* La proprietà è invece settata qui su outside
* Anche qui

## list-style

Esiste inoltre la proprietà riassuntiva list-style che riassume la formattazione delle liste. La sintassi è:

# Disegnare la struttura della pagina

CSS
Copertina Tutti i moduli · Sviluppo
    Copertina
* Regole e sintassiCSS/Regole_e_sintassi
** SelettoriCSS/Selettori
** CascadeCSS/Cascade
** Unità di misura, ereditarietà e box modelCSS/Unità_di_misura,_ereditarietà_e_box_model
* Supporti di visualizzazione
** Media
** Media con pagine
** Fogli di stile parlati
* Proprietà di baseCSS/Proprietà_di_base
** SfondoCSS/Proprietà_di_base/Sfondo
** Testo baseCSS/Proprietà_di_base/Testo_base
** Testo avanzatoCSS/Proprietà_di_base/Testo_avanzato
** ListeCSS/Liste
** Tabelle
** Animazioni, trasformazioni, transizioni
* Disegnare la struttura della paginaCSS/Disegnare_la_struttura_della_pagina
** PosizionamentoCSS/Posizionamento
* Contenuto generatoCSS/Contenuto generato
* Altre proprietàCSS/Altre_proprietà
* CompatibilitàCSS/Compatibilità
* ReferenceCSS/Reference
Modifica il sommario
In questo modulo verranno trattate le diverse proprietà legate al box model, già analizzato precedentemente nel corso del libro.

## Gestione delle dimensioni e dell'overflow

Le proprietà width e height permettono di impostare rispettivamente la larghezza e l'altezza del contenuto del box in questione. Il valore di queste proprietà può essere una grandezza oppure un valore in percentuale riferito all'elemento genitore; è possibile inoltre usare un valore auto, che funziona in modo diverso per le due proprietà:
* per quanto riguarda l'altezza, con un valore auto verrà determinata dal contenuto dell'elemento stesso
* per quanto riguarda la larghezza, con un valore auto assume le dimensioni dell'elemento genitore
La gestione delle dimensioni del contenuto di un elemento era tuttavia già possibile in HTML attraverso gli attributi width e height, anche se non era applicabile a tutti i tag.
Possono risultare utili inoltre le proprietà min-height, max-height, min-width e max-width che servono per impostare le dimensioni minime o massime che può assumere l'elemento in questione.
La proprietà overflow permette di impostare il comportamento che deve avere un elemento nel caso il suo contenuto superi le dimensioni previste dalle proprietà width e height (questo fenomeno è appunto chiamato con il termine tecnico overflow). Può assumere uno tra i seguenti valori:
* hidden: il contenuto in eccedenza viene ignorato e non viene quindi visualizzato
* visible: le dimensioni del box vengono riadattate in modo tale da mostrare il contenuto per intero
* scroll: vengono aggiunte al box delle barre di scorrimento orizzontali e/o verticali che permettono all'utente di vedere per intero il contenuto semplicemente scorrendolo
* auto: il browser si comporta secondo le sue impostazioni

## I margini

La gestione dei margini prevede l'uso di quattro proprietà margin-top, margin-bottom, margin-left, margin-right che specificano rispettivamente il margine superiore, inferiore, sinistro e destro dell'elemento. Possono assumere una grandezza, un valore in percentuale o auto (che normalmente imposta margini nulli). Si noti che i valori per i margini possono essere anche negativi; ad esempio:
mostra l'elemento spostato di 10px a sinistra rispetto alla posizione che dovrebbe assumere normalmente.
Esiste inoltre una proprietà riassuntiva margin che permette di impostare insieme le quattro proprietà relative ai marigni. In base a quanti valori vengano forniti, si comporta in maniere differenti:
* se ne viene indicato solo uno, questo si riferirà a tutti e quattro i margini
* se ne vengono indicati due, il primo si riferisce ai margini orizzontali e il secondo a quelli verticali
* se ne vengono indicati tre, il primo e il terzo sono riferiti rispettivamente ai margini superiore e inferiore, il secondo a quelli verticali
* se ne vengono indicati quattro, il primo si riferirà al margine superiore, il secondo a quello destro, il terzo a quello inferiore e il quarto a quello sinistro

## Il padding

Il padding, ovvero lo spazio tra il bordo di un contenitore ed il suo contenuto, è gestito tramite quattro proprietà padding-top, padding-bottom, padding-left, padding-right che specificano rispettivamente il padding superiore, inferiore, sinistro e destro dell'elemento. Possono assumere una grandezza o un valore in percentuale.
Esiste inoltre una proprietà riassuntiva padding che permette di impostare insieme le quattro proprietà relative al padding; si comporta allo stesso modo di margin.

## I bordi

I bordi in CSS sono gestibili tramite le proprietà:
che specificano rispettivamente lo stile, lo spessore e il colore del lato (top, bottom, left, right) indicato.
Per quanto riguarda lo stile dei bordi, è possibile specificare uno dei seguenti valori:
* none: il bordo non viene visualizzato (es: )
* dotted: una successione di punti (es:   )
* dashed: il bordo è visualizzato con dei trattini (es:       )
* solid: il bordo è una linea continua (es: )
* double: il bordo è costituito da due linee separate da uno spazio bianco (es: )
* groove e ridge: il bordo risulta incassato o in rilievo tramite un gioco di colori (es: e )
* inset e outset: l'intero box risulta incassato o in rilievo tramite un gioco di colori (es: e )
Per quanto riguarda il colore, è possibile specificare un valore di colore valido oppure il valore transparent (bordo trasparente che influisce però sulla visualizzazione della struttura).
Per quanto riguarda lo spessore dei bordi, la proprietà border-<lato>-width può assumere i valori:
* thin (un bordo sottile)
* medium (un bordo normale)
* thick (un bordo spesso)
* un valore di grandezza, normalmente espressa in px, che deve essere positiva

### Proprietà riassuntive dei bordi

Anche per la definizione dei bordi esistono delle proprietà riassuntive. Sono:
Queste tre proprietà specificano lo stile, lo spessore e il colore dei quattro bordi assieme. Possono avere da uno a quattro valori e il loro funzionamento è simile a quello di margin.
Esistono inoltre le proprietà:
che definiscono i diversi aspetti dei bordi per un singolo lato.
Infine possiamo utilizzare anche una proprietà la cui sintassi è:
che specifica insieme i valori delle tre proprietà dei bordi per tutti e quattro i lati.

# Posizionamento

CSS
Copertina Tutti i moduli · Sviluppo
    Copertina
* Regole e sintassiCSS/Regole_e_sintassi
** SelettoriCSS/Selettori
** CascadeCSS/Cascade
** Unità di misura, ereditarietà e box modelCSS/Unità_di_misura,_ereditarietà_e_box_model
* Supporti di visualizzazione
** Media
** Media con pagine
** Fogli di stile parlati
* Proprietà di baseCSS/Proprietà_di_base
** SfondoCSS/Proprietà_di_base/Sfondo
** Testo baseCSS/Proprietà_di_base/Testo_base
** Testo avanzatoCSS/Proprietà_di_base/Testo_avanzato
** ListeCSS/Liste
** Tabelle
** Animazioni, trasformazioni, transizioni
* Disegnare la struttura della paginaCSS/Disegnare_la_struttura_della_pagina
** PosizionamentoCSS/Posizionamento
* Contenuto generatoCSS/Contenuto generato
* Altre proprietàCSS/Altre_proprietà
* CompatibilitàCSS/Compatibilità
* ReferenceCSS/Reference
Modifica il sommario
I CSS permettono di posizionare all'interno di una pagina oggetti che varino o restino fissi indipendentemente dalla dimensione in cui viene visualizzata la pagina e/o allo scorrere di questa.
Nella pagina, un elemento può essere posizionato secondo tre modi differenti:
* seguendo il normale andamento della pagina previsto dall'HTML
* senza alcun legame con il resto del flusso degli elementi
* allineandosi in modo tale che gli elementi si dispongano al lato (questa tecnica, chiamata in gergo tecnico floating, è simile al funzionamento dell'attributo align delle immagini)

## Posizionarsi relativamente agli altri elementi della pagina

Per posizionare un elemento rispetto agli elementi della pagina secondo quanto previsto dal puro HTML, usiamo la proprietà position con questi valori:
* static (valore di default per quasi tutti gli oggetti HTML)
* relative: l'elemento è posizionato seguendo il normale flusso degli elementi nella pagina, tramite l'uso di quattro proprietà (left, right, top e bottom) che assumono come valore una grandezza e specificano la distanza (positiva o negativa) dell'elemento rispetto alla posizione che questo dovrebbe occupare normalmente nella pagina. Ad esempio:
Con questo codice, tutti gli elementi bold appariranno spostati di 5 pixel verso l'alto rispetto alla linea del paragrafo. In particolare:
* top indica la distanza del bordo superiore dell'oggetto dal bordo superiore dell'elemento in cui è contenuto
* bottom indica la distanza del bordo inferiore dell'oggetto dal bordo inferiore dell'elemento in cui è contenuto
* left indica la distanza del bordo sinistro dell'oggetto dal bordo sinistro dell'elemento in cui è contenuto
* right indica la distanza tra il bordo destro dell'oggetto dal bordo destro dell'elemento in cui è contenuto

## Posizionamento assoluto e fisso

Per posizionamento assoluto (dal latino ab solutum, sciolto dal resto) o fisso si intende un posizionamento che non segue il flusso degli elementi. È fissato tramite la proprietà position con l'uso dei valori:
* absolute: l'elemento è posizionato rispetto al suo blocco contenitore (la pagina o un altro elemento block-level a sua volta posizionato con il valore della medesima proprietà diverso da static) tramite le proprietà left, right, top e bottom. L'elemento risulterà quindi legato allo scorrere della pagina
* fixed: l'elemento è posizionato rispetto alla finestra sempre tramite le quattro proprietà left, right, top e bottom e non è legato allo scorrimento della pagina. Ad esempio:
mostra l'elemento fisso nell'angolo in basso a destra dello schermo (può servire, ad esempio, per la creazione di banner o simili)

## Usare il floating

Il floating è una tecnica CSS che, tramite la proprietà float, permette agli elementi HTML di allinearsi a destra o a sinistra della pagina (o dell'elemento contenitore). La caratteristica più interessante è però la possibilità che gli elementi della pagina scorrano a destra o a sinistra dell'oggetto in questione. Il funzionamento è analogo a quello della proprietà align dell'elemento HTML img. Può assumere i valori left, right e none. Vediamo due esempi:
Quel ramo del lago di Como, che volge a mezzogiorno, tra due catene non interrotte di monti, tutto a seni e a golfi, a seconda dello sporgere e del rientrare di quelli, vien, quasi a un tratto, a ristringersi, e a prender corso e figura di fiume, tra un promontorio a destra, e un'ampia costiera dall'altra parte; e il ponte, che ivi congiunge le due rive, par che renda ancor più sensibile all'occhio questa trasformazione, e segni il punto in cui il lago cessa, e l'Adda rincomincia, per ripigliar poi nome di lago dove le rive, allontanandosi di nuovo, lascian l'acqua distendersi e rallentarsi in nuovi golfi e in nuovi seni... (da I promessi sposi, capitolo primo, A. Manzoni)
Quel ramo del lago di Como, che volge a mezzogiorno, tra due catene non interrotte di monti, tutto a seni e a golfi, a seconda dello sporgere e del rientrare di quelli, vien, quasi a un tratto, a ristringersi, e a prender corso e figura di fiume, tra un promontorio a destra, e un'ampia costiera dall'altra parte; e il ponte, che ivi congiunge le due rive, par che renda ancor più sensibile all'occhio questa trasformazione, e segni il punto in cui il lago cessa, e l'Adda rincomincia, per ripigliar poi nome di lago dove le rive, allontanandosi di nuovo, lascian l'acqua distendersi e rallentarsi in nuovi golfi e in nuovi seni... (da I promessi sposi, capitolo primo, A. Manzoni)
Vediamo alcuni dettagli su questa tecnica:
* il floating può essere usato solo su elementi con una larghezza fissa (impostata dalla proprietà width oppure, ad esempio per le immagini, dalle dimensioni in pixel del file di origine)
* la proprietà float non viene considerata se l'elemento ha un posizionamento assoluto o fisso
* gli elementi flottanti diventano necessariamente elementi block.
* gli elementi flottanti vengono automaticamente estratti dal flusso della pagina: questo significa che un elemento di tipo blocco che contenga elementi flottanti risulta in realtà vuoto.

### La proprietà clear

La proprietà clear sposta l'elemento a cui viene applicata sotto a tutti gli elementi flottanti dal lato specificato. Può assumere i valori:
* none: non viene effettuato alcuno spostamento
* left o right: l'elemento viene spostato sotto a tutti gli elementi floattanti a destra o a sinistra
* both: vengono considerati tutti gli elementi flottanti sia a destra sia a sinistra.
Vediamo un esempio:
Questo è un paragrafo che si dispone attorno al div flottante
Usando la proprietà clear questo paragrafo va invece a capo rispetto al div. Quel ramo del lago di Como, che volge a mezzogiorno, tra due catene non interrotte di monti, tutto a seni e a golfi, a seconda dello sporgere e del rientrare di quelli, vien, quasi a un tratto, a ristringersi, e a prender corso e figura di fiume, tra un promontorio a destra, e un'ampia costiera dall'altra parte; e il ponte, che ivi congiunge le due rive, par che renda ancor più sensibile all'occhio questa trasformazione, e segni il punto in cui il lago cessa, e l'Adda rincomincia, per ripigliar poi nome di lago dove le rive, allontanandosi di nuovo, lascian l'acqua distendersi e rallentarsi in nuovi golfi e in nuovi seni... (da I promessi sposi, capitolo primo, A. Manzoni)
In questo caso il paragrafo qui a fianco, invece di disporsi a destra del blocco, si dispone allineandosi con il suo lato inferiore: ciò è causato dall'uso della dichiarazione CSS clear: left. L'effetto è simile a quello del blocco senza floating ma è stato ottenuto con due modalità differenti. Ovviamente la proprietà clear risulta comodo con molti elementi flottanti nella pagina.
La proprietà clear è usata spesso in relazione all'elemento br in questo modo:
che interrompe il testo effettuando il clear in maniera semplice e pulita.

# Contenuto generato

CSS
Copertina Tutti i moduli · Sviluppo
    Copertina
* Regole e sintassiCSS/Regole_e_sintassi
** SelettoriCSS/Selettori
** CascadeCSS/Cascade
** Unità di misura, ereditarietà e box modelCSS/Unità_di_misura,_ereditarietà_e_box_model
* Supporti di visualizzazione
** Media
** Media con pagine
** Fogli di stile parlati
* Proprietà di baseCSS/Proprietà_di_base
** SfondoCSS/Proprietà_di_base/Sfondo
** Testo baseCSS/Proprietà_di_base/Testo_base
** Testo avanzatoCSS/Proprietà_di_base/Testo_avanzato
** ListeCSS/Liste
** Tabelle
** Animazioni, trasformazioni, transizioni
* Disegnare la struttura della paginaCSS/Disegnare_la_struttura_della_pagina
** PosizionamentoCSS/Posizionamento
* Contenuto generatoCSS/Contenuto generato
* Altre proprietàCSS/Altre_proprietà
* CompatibilitàCSS/Compatibilità
* ReferenceCSS/Reference
Modifica il sommario
Una delle grandi funzionalità del CSS consiste nella possibilità di generare automaticamente il contenuto degli elementi della pagina. Per fare ciò si usa la proprietà content, che purtroppo non è supportata sempre correttamente da tutti i browser.

## content

La proprietà content imposta il contenuto dell'elemento. Può assumere come valore:
* none: non viene generato alcun contenuto
* una combinazione di:
** una stringa
** un percorso che indica una risorsa da inserire (es. un'immagine)
** un contatore (vedi nel prossimo paragrafo)
** open-quote o close-quote: virgolette di apertura o di chiusua aumentando di uno il livello di indentazione
** no-open-quote o no-close-quote: non mostra virgolette ma aumenta il livello di indentazione
Questa proprietà è usata soprattutto con le pseudoclassi :before e :after, ad esempio in questo modo:
imposta il contenuto finale del corpo della pagina. Le pseudoclassi :before e :after non sono però supportate correttamente da IE.

## Uso delle virgolette

Per specificare i diversi tipi di virgolette da usare per i diversi livelli di indentazione usiamo la proprietà quotes la cui sintassi è:
Per spiegare l'uso facciamo un esempio:
che fornisce come output:
Luigi disse:
   Lorem ipsum dolor sit amet, ...
   Infine disse:
   E finì. >>
Questo è quello che disse Luigi.

## Lavorare con i contatori

CSS permette inoltre di generare automaticamente contenuti numerati. Per fare ciò è possibile usare due proprietà:
La prima proprietà resetta il contatore chiamato <nomen> al valore <valoren>. Se omesso il valore, il contatore viene impostato a 0. La seconda proprietà incrementa il valore del contatore chiamato <nomen> di <valoren> posizioni. Se omesso il valore, il contatore viene incrementato di 1.
Per accedere al valore corrente del contatore si usa la funzione
dove <nome> è il nome del contatore e <stile> è lo stile del contatore (funziona in maniera identica alla proprietà list-style-type.
Vediamo un esempio per chiarire il concetto:
produrrà come output

# Altre proprietà

CSS
Copertina Tutti i moduli · Sviluppo
    Copertina
* Regole e sintassiCSS/Regole_e_sintassi
** SelettoriCSS/Selettori
** CascadeCSS/Cascade
** Unità di misura, ereditarietà e box modelCSS/Unità_di_misura,_ereditarietà_e_box_model
* Supporti di visualizzazione
** Media
** Media con pagine
** Fogli di stile parlati
* Proprietà di baseCSS/Proprietà_di_base
** SfondoCSS/Proprietà_di_base/Sfondo
** Testo baseCSS/Proprietà_di_base/Testo_base
** Testo avanzatoCSS/Proprietà_di_base/Testo_avanzato
** ListeCSS/Liste
** Tabelle
** Animazioni, trasformazioni, transizioni
* Disegnare la struttura della paginaCSS/Disegnare_la_struttura_della_pagina
** PosizionamentoCSS/Posizionamento
* Contenuto generatoCSS/Contenuto generato
* Altre proprietàCSS/Altre_proprietà
* CompatibilitàCSS/Compatibilità
* ReferenceCSS/Reference
Modifica il sommario
In questo modulo analizzeremo alcune proprietà CSS che non sono state presentate nel corso del libro ma sono comunque rilevanti.

## cursor

Questa proprietà serve a modificare l'aspetto del cursore quando si posiziona sull'elemento in questione. Può assumere come valore una combinazione dei seguenti valori (posizionarsi sopra il testo per vederne l'effetto):
* auto: il cursore automatico per il tipo di elemento
* default: il cursore predefinito di sistema (normalmente una freccetta)
* pointer: il puntatore usato ad esempio per i link (normalmente la manina con l'indice puntato)
* text: il cursore usato per il testo selezionabile (solitamente il caret I)
* wait: indica di aspettare (solitamente è una clessidra)
* progress: l'applicazione sta lavorando, ma può comunque reagire ai comandi (solitamente una freccia con accanto una clessidra)
* crosshair: la croce usata per puntare con precisione (a forma di "+")
* help: usato per indicare la possibilità di visualizzare un aiuto relativo all'elemento in questione (spesso un punto interrogativo)
* move: il cursore visualizzato su elementi spostabili (normalmente la manina chiusa)
* e-resize, ne-resize, nw-resize, n-resize, se-resize, sw-resize, s-resize, w-resize: le frecce usate per i ridimensionamenti. Le lettere che precedono -resize indicano il verso — N = nord (north), S = sud (south), E = est (east), W = ovest (west).
* un percorso indicante un file di cursore
Il browser scorrerà la lista di valori fino a quando non incontrerà un cursore valido o rappresentabile. Altrimenti userà il cursore automatico.

## display

La proprietà display serve a definire la visualizzazione e il rendering dell'elemento da parte del browser. Può assumere, tra gli altri, i valori:
* inline: l'elemento viene visualizzato come in linea
* block: l'elemento è visualizzato come blocco
* list-item: l'elemento viene visualizzato come un oggetto di una lista (formattabile tramite le proprietà list-style)
* none: l'elemento non viene visualizzato e non influisce sulla visualizzazione della pagina
Questa proprietà può servire:
* nell'ambito di pagine XML, i quali elementi non hanno associato un rendering
* ad esempio per poter posizionare e gestire come un blocco (quindi impostare dimensioni, posizioni, ecc...) elementi in-line come i link
È invece molto interessante l'uso della dichiarazione display: none; che, soprattutto se utilizzata insieme a linguaggi dinamici come JavaScript, permette di nascondere o visualizzare elementi della pagina con un semplice clic dell'utente.

## visible

La proprietà visible determina se un elemento è visibile o meno all'interno della pagina. Può assumere come valori:
* visible: l'elemento risulta visibile
* hidden: l'elemento risulta nascosto ma occupa comunque spazio nella pagina

## Differenze tra display e visible

Abbiamo visto che esistono due modi per rendere invisibile un elemento HTML: il primo è quello di usare la proprietà display: none; e il secondo prevede l'uso di visible: hidden;. La differenza tra i due metodi è che, mentre con la prima dichiarazione l'elemento viene considerato come se non esistesse del tutto, con il secondo l'elemento influisce ancora sulla visualizzazione della pagina e nel flusso degli elementi che lo circondano.

# Compatibilità

CSS
Copertina Tutti i moduli · Sviluppo
    Copertina
* Regole e sintassiCSS/Regole_e_sintassi
** SelettoriCSS/Selettori
** CascadeCSS/Cascade
** Unità di misura, ereditarietà e box modelCSS/Unità_di_misura,_ereditarietà_e_box_model
* Supporti di visualizzazione
** Media
** Media con pagine
** Fogli di stile parlati
* Proprietà di baseCSS/Proprietà_di_base
** SfondoCSS/Proprietà_di_base/Sfondo
** Testo baseCSS/Proprietà_di_base/Testo_base
** Testo avanzatoCSS/Proprietà_di_base/Testo_avanzato
** ListeCSS/Liste
** Tabelle
** Animazioni, trasformazioni, transizioni
* Disegnare la struttura della paginaCSS/Disegnare_la_struttura_della_pagina
** PosizionamentoCSS/Posizionamento
* Contenuto generatoCSS/Contenuto generato
* Altre proprietàCSS/Altre_proprietà
* CompatibilitàCSS/Compatibilità
* ReferenceCSS/Reference
Modifica il sommario
Come pure molte altre tecnologie usate per la programmazione web, anche il linguaggio CSS soffre di problemi di compatibilità tra i diversi browser disponibili. Infatti, sebbene ormai sia possibile adottare soluzioni accettabili e compatibili, persistono ancora nei diversi browser differenze con le specifiche ufficiali del WWW Consortium.
I problemi sono legati soprattutto:
* alla compatibilità tra versioni precedenti dei browser (retro-compatibilità)
* alle differenze di rendering (visualizzazione) tra i diversi browser

## L'affidabilità dei diversi browser

Attualmente nessuno dei browser in commercio offre il supporto completo agli standard W3C, tuttavia molti vi si avvicinano:
* Internet Explorer, il browser attualmente più usato, è stato forse uno dei maggiori freni alla diffusione del CSS, a causa della scarsa attenenza agli standard. Presenta numerosi problemi di rendering (ad esempio il valore medium della proprietà font-size è interpretato in maniera scorretta) e, maggiore lacuna, non offre alcun supporto al contenuto generato (proprietà content, quotes, counter, ecc...).
* presentano un ottimo supporto agli standard, anche se non completo, Firefox, Opera, Safari, Google Chrome e Konqueror. In particolare gli ultimi tre presentano un parziale supporto ai CSS3.

## Soluzioni

Una delle tecniche più usate è il cosiddetto browser-sniffing (annusamento del browser) tramite JavaScript, che consiste nella determinazione del browser in uso dal client e poter usare di volta in volta un foglio di stile differente.
Internet Explorer mette inoltre a disposizione nell'ambito dell'HTML il commento condizionale, una tecnica che consiste nell'inserimento nella pagina di un commento HTML distinto dalla particolare sintassi:
In questo modo i browser normali non interpreteranno il commento mentre solo IE leggerà il codice al suo interno. In questo modo è possibile definire un foglio di stile unicamente per IE:
L'ultimo suggerimento è quello di testare sempre le proprie pagine su diversi motori di rendering; è infatti oramai possibile sviluppare, come già detto, soluzioni accettabili e compatibili con più broswer.

# Reference

CSS
Copertina Tutti i moduli · Sviluppo
    Copertina
* Regole e sintassiCSS/Regole_e_sintassi
** SelettoriCSS/Selettori
** CascadeCSS/Cascade
** Unità di misura, ereditarietà e box modelCSS/Unità_di_misura,_ereditarietà_e_box_model
* Supporti di visualizzazione
** Media
** Media con pagine
** Fogli di stile parlati
* Proprietà di baseCSS/Proprietà_di_base
** SfondoCSS/Proprietà_di_base/Sfondo
** Testo baseCSS/Proprietà_di_base/Testo_base
** Testo avanzatoCSS/Proprietà_di_base/Testo_avanzato
** ListeCSS/Liste
** Tabelle
** Animazioni, trasformazioni, transizioni
* Disegnare la struttura della paginaCSS/Disegnare_la_struttura_della_pagina
** PosizionamentoCSS/Posizionamento
* Contenuto generatoCSS/Contenuto generato
* Altre proprietàCSS/Altre_proprietà
* CompatibilitàCSS/Compatibilità
* ReferenceCSS/Reference
Modifica il sommario
Questa pagina contiene un elenco alfabetico di tutte le proprietà CSS trattate nel corso del libro e un link alla loro trattazione.
| background-attachment: »1 background-color: »1 background-image: »1 background-position: »1 background-repeat: »1 background: »1 border-bottom-color: »1 border-bottom-style: »1 border-bottom-width: »1 border-bottom: »1 border-color: »1 border-left-color: »1 border-left-style: »1 border-left-width: »1 border-left: »1 border-right-color: »1 border-right-style: »1 border-right-width: »1 border-right: »1 border-style: »1 border-top-color: »1 border-top-style: »1 border-top-width: »1 border-top: »1 border-width: »1 | border: »1 bottom: »1 clear: »1 color: »1 content: »1 counter: »1 counter-increment: »1 counter-reset: »1 cursor: »1 display: »1 float: »1 font-family: »1 font-size-adjust: »1 font-size: »1 font-stretch: »1 font-style: »1 font-variant: »1 font-weight: »1 font: »1 height: »1 left: »1 letter-spacing: »1 line-height: »1 margin-bottom: »1 margin-left: »1 | margin-margin: »1 margin-right: »1 margin-top: »1 max-height: »1 max-width: »1 min-height: »1 min-width: »1 overflow: »1 padding-bottom: »1 padding-left: »1 padding-right: »1 padding-top: »1 padding: »1 position: »1 quotes: »1 right: »1 text-align: »1 text-decoration: »1 text-indent: »1 text-transform: »1 top: »1 visible: »1 white-space: »1 width: »1 word-spacing: »1 |