Indice

Logo Ufficio Italiano W3C

Logo CNR

Logo ISTI

 

 

 

 

 

  Valid XHTML 1.1! Valid CSS!

CSS

Massimo Martinelli
massimo AT w3c [DOT it

Ufficio Italiano W3C, CNR-ISTI

Area della Ricerca CNR

via Moruzzi, 1

56124 Pisa


logo Rete Telematica Regione Toscana logo Regione Toscana Corso AQUARIUS sulle Tecnologie Web

Firenze 19 Ottobre 2010 - Pisa, 26 Ottobre 2010

CSS

Cascading Style Sheets
Fogli di Stile in Cascata

Contenuto e stile

Versioni di CSS

Le regole

 elemento1, elemento2 { proprietà:valore; proprietà:valore; }

Le regole: alcuni esempi

Esempio 1
  • p {color: red;}
  • il selettore p indica che la regola va applicata a tutti gli elementi p del documento
  • la proprietà modificata è color
  • il valore che assume la proprietà è red
Esempio 2
  • h1, h2 {color: #00ff00; font-size: 24px; }
  • tutti gli elementi h1 e h2 saranno in verde
  • tutti gli elementi h1 e h2 saranno con caratteri di dimensione 24px
  • esempio di pagina con stile CSS embedded

Dove definire gli stili

inline
All'interno del tag di riferimento
embedded
All'interno del tag style
external
Importandolo con il tag style o indicandolo nel tag link

stile inline

stile embedded

stile external

Tipi di Selettori

Semplici
I selettori possono specificare un elemento
Raggruppamenti
più elementi
Classi
elementi con uno specifico attributo class o id
Pseudo classi
elementi in uno specifico stato o posizione
Pseudo elementi
parte del contenuto di un elemento
Contestuali
elementi che appaiono in contesto relativo ad altri elementi

Selettore Semplice

Raggruppamento di Selettori

Classi

Pseudo Classi

Pseudo Elementi

Selettori Contestuali

Altri selettori

Modello di formattazione

Box

Le scatole hanno delle proprietà che permettono di definire

  • altezza, larghezza, dimensione e posizione
  • aree relative a margini, cuscinetti (margini interni - padding), bordi (trasparenti per default)

La larghezza della scatola è data dalla somma della larghezza del contenuto (ovvero dell'elemento testo o immagine) + quella delle aree dei padding, bordi e margini.

Box

  • Margini: la regione che separa una scatola dall'altra, necessariamente trasparente
    • margin-top, margin-bottom, margin-left, margin-right: dimensioni del margine della scatola
  • Border: la regione ove visualizzare un bordo per la scatola (trasparente per default)
    • border-top, border-bottom, border-left, border-right, border-width, border-color: dimensioni ed aspetto del bordo
    • border-style: può assumere come valori none, dotted, dashed, solid, double, groove (incavo), ridge (rilievo), inset, outset
  • Padding: la regione di respiro tra il bordo della scatola ed il contenuto - Ha il colore dello sfondo
    • padding-top, padding-bottom, padding-left, padding-right: dimensioni del padding della scatola
  • Content: la regione dove sta il contenuto dell'elemento
    • background-color, background-image, background-repeat, background-attachment, background-position: colore, immagine e meccanismo di ripetizione dell'immagine di sfondo della scatola

Tipi di elementi

  • Elementi "Block"; (blocco) sono elementi che sono mostrati in un blocco per conto proprio
    • p (paragrafo), div (blocco generico), pre (blocco preformattato), address (autore della pagina), blockquote (citazione lunga)
    possono essere inclusi solo da altri elementi blocco.
  • Elementi "Inline" sono elementi che non provocano un a capo e possono essere inclusi da qualsiasi altro elemento
    • a (ancora, collegamento), em (enfasi), strong (maggiore enfasi) span (generico elemento inline), dfn (definizione), code (frammento di programma), samp (output d'esempio), kdb (testo inserito dall'utente), var (variabile di programma), cite (breve citazione), q (citazione lunga), abbr, acronim (abbreviazioni ed acronimi), sup, sub (testo in apice e in pedice), bdo (bidirectional override)
  • Elementi "List-item" sono elementi con un marcatore (punto elenco, numero)

Posizionamento

Come si inseriscono le scatole nello spazio di visualizzazione:

  • Flusso normale di tipo blocco: una sopra l'altra in successione verticale (come paragrafi)
  • Flusso normale di tipo inline: una accanto all'altra in successione orizzontale (come parole della stessa riga)
  • Flusso di tipo float: all'interno del contenitore e poi spostate all'estrema sinistra o destra della scatola, lasciando che le altre scatole vi girino intorno
  • Posizionamento assoluto: nella posizione indicata indipendentemente dal flusso e da quel che la zona già visualizza (eventualmente nascondendo ciò che sta sotto)

Modello visuale di CSS

proprietà che controllano il tipo di posizionamento e quello di scatola:

  • display (inline | block | list-item | ... | none): il tipo di scatola da utilizzare per l'elemento: blocco, inline, lista, cella di tabella, ...
  • position (static | relative | absolute | fixed): il posizionamento rispetto al flusso del documento
  • float (left | right | none): un float è una scatola scivolata all'estrema destra o sinistra del contenitore muovendo le altre per farle posto
  • z-index: la posizione nello stack di scatole potenzialmente sovrapposte. Il valore più alto è più vicino al lettore, e quindi nasconde gli altri - default background delle scatole = trasparente
  • top, bottom, left, right: coordinate della scatola
  • width, height: dimensioni usabili invece di right e bottom

Un esempio di posizionamento

un blocco
allineato
a destra
un blocco
allineato a sinistra

un paragrafo che si estende su alcune righeper mostrare come sono posizionati vari elementi all'interno della pagina XHTML

ancora un paragrafo con elementi inline grassetto e italic

div in posizione assoluta

Un esempio di posizionamento

<div>
  <div style="display:block; float:right;background:#ffeeee;border-style: solid; border-width: 1px;">un blocco <br/> allineato<br/> a destra</div>
  <div style="display:block; float:left;background:#ffeeee;border-style: solid; border-width: 1px;">un blocco <br/> allineato a sinistra </div>
  <p style="display:block; border-style: solid; border-width: 1px;">un paragrafo che si estende su alcune <span style="display:inline; border-style: solid; border-width: 1px; font-size: 200%;">righe</span>per mostrare come sono posizionati vari elementi all'interno della pagina XHTML</p>
  <p style="display:block; border-style: solid; border-width: 1px;">ancora un paragrafo con elementi inline <span style="display:inline; font-weight:bold; border-style: solid; border-width: 1px;">grassetto</span> e <span style="display:inline; font-style:italic; border-style: solid; border-width: 1px;">italic</span>
  <div style="display:block; position:absolute; top:180px; left: 280px; width: 150px; background:#eeeeff;border-style: solid; border-width: 1px;">div in posizione assoluta</div>
  </p>
</div>

<div> e <span>

  • <div> (division) è un elemento block-level
  • <span> (span of words) è un elemento inline
  • molto utili se usati con l'attributo class
  • permettono, in pratica, di creare nuovi HTML element
<div class="nomeclasse">
<p>
In una div possono comparire elementi inline, e anche
<span class="specificaSpan"> parole che assumono le caratteristiche</span>
assegnate alla classe "specificaSpan".<br />
La div può avere caratteristiche di visualizzazione particolari.
</p>
</div>

html5 introduce delle specializzazioni di div: nav, footer, ... sono elementi strutturali che potranno essere usati per specificare parti strutturali della pagina

elementi strutturali in html5

Il testo

Del testo è possibile controllare sia gli aspetti relativi al font che quelli relativi all'organizzazione del testo nella scatola di riferimento:

  • font-family: il/i nomi del/dei font
  • font-style (normal | italic | oblique), font-variant (normal | small-caps), font-weight (normal | bold | bolder | lighter | 100<-> 900), font-stretch (normal | wider | narrower | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded): caratteristiche del font
  • text-indent, text-align (left | right | center | justify), line-height: indentazione, allineamento e interlinea delle righe della scatola
  • text-decoration (none | underline | overline | line-through | blink), text-shadow: ulteriori stili applicabili al testo
  • letter-spacing e word-spacing: spaziatura tra lettere e tra parole
  • text-transform (capitalize | uppercase | lowercase | none): trasformazione della forma delle lettere
  • white-space (normal | pre | nowrap): specifica la gestione dei ritorni a capo e del collassamento dei whitespace all'interno di un elemento

Valori di proprietà in CSS

Le proprietà CSS possono essere nomi o valori - I nomi sono tutte parole chiave CSS

  • Per quanto riguarda i valori esistono diverse possibilità:
    • Alcuni di questi sono parole chiave come "display: none" in display o come solid in "border-style: solid"
    • Misure espresse come
      • Numeri interi: valori numerici assoluti
      • Valori numerici espressi in unità di misura
      • 0,5in (margin-top: 0.5in), 12pt (font-size: 12pt)
      • Percentuali espressi in relazione al contenitore padre
    • Altri valori possono essere URL come http://www.isti.cnr.it/immagini/carta.gif
    • (background-image: url(http://www.isti.cnr.it/immagini/carta.gif)
    • oppure colori RGB come #CC0033 (color: #CC0033)
  • Esistono quattro tipi di valori di proprietà:
    1. length
    2. URL
    3. color
    4. keyword

Esempi: nomi di proprietà e valori

NomeValore
displaynone
font-styleitalic
margin-top0.5in
font-size12pt
border-stylesolid
color#CC0033
background-colorwhite
background-imageurl(http://www.isti.cnr.it/immagini/sfondoblu.gif)
list-style-imageurl(/immagini/pallinorosso.png)
line-height120%

Unità di misura

  • Usate per definire la larghezza, altezza, dimensione di parole e lettere, spazi, indentazione di testo, altezza di lineem margini, padding, larghezze di bordi, ...
  • Le misure possono essere specificate in tre modi:
    1. Unità assolute   in (inches), cm, mm, pt (points), pc (pica)
    2. Unità relative bigger, +1
    3. Percentuali 50%

Unità di misura relative

  • CSS mette a disposizione tre metodi per specificare le unità relative di misure
    1. em: la larghezza della lettera m del font corrente
    2. ex: l'altezza della lettera x del font corrente
    3. px: la grandezza di un pixel
  • In questo esempio lo spessore dei bordi destro e sinistro dell'elemento p corrisponderanno alla larghezza della lettera m del font corrente, i bordi superiore e inferiore alla metà dell'altezza della lettera x del font corrente:
    p  { border-right-width: 1em; border-left-width: 1em;
         border-top-width: 0.5ex; border-bottom-width: 0.5ex; }

Unità di misura in percentuale

  • E' sconsigliato usare la misura di lunghezza in pixel per vari motivi:
    • La grandezza dei pixel varia con la risoluzione
    • Con il passare del tempo i monitor incrementano la densità di punti
    • Con l'aumentare della risoluzione la specifica del pixel può rendere illeggibile il testo
  • Le misure possono essere specificate in percentuale rispetto al valore della grandezza dell'elemento padre
    p:first-letter	{ font-size: 300%; }
    em              { font-size: 120%; }

Esercizio

Realizzare una pagina XHTML 1.1 con tre blocchi di testo
senza tabelle (a meno che non contengano dati e siano all'interno di un blocco)
senza posizionamenti assoluti

3 blocchi di testo senza tabelle

Una soluzione

Ereditarietà

  • Con CSS non è necessario specificare le proprietà di ogni elemento
  • Ove non presenti regole specifiche, ogni elemento erediterà lo stile dell'elemento padre
  • Con questa regola
    h1 { color: red; }
    e questa parte di codice xhtml
    <h1>Un <em>titolo</em><h1>
    "titolo" sarà rosso e corsivo (corsivo perchè em per definizione viene cosi rappresentato ma potrebbe non essere così)
  • Ma se specificata anche la seguente regola
    em { color: green; font-style: normal; }
  • Allora questa sostituirà lo stile ereditato da <h1> e "titolo" sarà di colore verde, non rosso, e non corsivo ma normale

Valori ereditati

  • Se non specificata una proprietà, CSS assume un valore di default
  • A parte pochi casi, questo è sempre ereditato, ovvero la proprietà assume lo stesso valore che ha nella scatola contenitore dell'elemento in questione
  • Tra i valori non ereditati:
    • display (per HTML è sempre il valore naturale dell'elemento, block per p o h1, inline per strong, em o a, mentre per XML è inline)
    • background (sempre transparent)

La dichiarazione !important

  • CSS permette sia agli autori che agli utenti di esprimere preferenze sulle regole di presentazione
  • Le regole degli autori sostituiscono le regole dei lettori a meno che il lettore non usi una dichiarazione !important. Per esempio la seguente regola diche che l'elemento p deve essere colorato di blu anche se l'autore del documento ha richiesto che sia in un colore differente
  • Daltra parte font-family deve essere serif solo se l'autore non ha detto diversamente
    		p { color: blue !important; font-family: serif;}
  • Se però la regola dell'autore è stata dichiarata !important con CSS1 vinceva la regola dell'autore. Con CSS2 è cambiato e vince la regola del lettore
  • E' possibile definire regole multiple per gli stessi elementi, e adottare un meccanismo a cascata per la loro applicazione:
    • User Agent: il browser definisce (o esplicitamente o implicitamente codificandole nel software) le regole di default per gli elementi dei documenti
    • User: l'utente può fornire un ulteriore foglio di stile per indicare regole di proprio piacimento. Tipicamente è una funzione del browser
    • Author: l'autore delle pagine fornisce, nei modi visti in precedenza, i fogli di stile del documento specifico
    • Regole !important : Quando una regola utente (tipicamente) è seguita dalla keyword !important, essa sopravanza una analoga regola di senso diverso dell'autore

Ordine della cascata

  • In generale le regole più specifiche vincono. Esempio:
    <p> bla bla
    <cite id="id1" class="particolare">
        bla bla bla
    </cite>
    </p>
  • Le regole più specifiche sono preferite. Pertanto quella che seleziona l'elemento cite per il suo id sarà preferita a quella che seleziona cite per il suo class
  • Una regola che seleziona cite per il suo class sarà preferita a quella che seleziona cite contenuto negli elementi p
  • Infine, se nessuna di queste regole è applicata, sarà selezionata una regola generica cite
  • Se non c'è un selettore che si appaia, viene ereditata la proprietà dall'elemento padre
  • Se non c'è nessun valore ereditato dal padre viene usato il valore di default
  • A parità di specificità si applica l'ultima in ordine di apparizione
  • Il foglio di stile esterno arriva dopo in ordine e quindi vince

Liste e sottoliste numerate (CSS2)

   ul, ol { counter-reset: item }
   li { display: block; }
   li:before { content: counters(item, "."); counter-increment: item }
   

numera liste e sottoliste nel formato
1
1.1
1.1.1
...

Esercizio

Collegarsi al sito http://jigsaw.w3.org/css-validator/ e validare lo stile di una pagina del proprio ente

Eliminare tutti gli elementi e gli attributi di presentazione della pagina e realizzare un foglio di stile

validare il foglio di stile (http://validator.w3.org)

Trasformare la pagina (con un editor testi) in XHTML1 1.1

Avvalersi di Tidy per correggere il codice

Esercizio

Realizzare una pagina XHTML 1.1 con un form impaginato senza tabelle

Una soluzione utilizzate con varie tecniche WCAG 2.0

Alcune buone prassi

(rif. cap. 3 Wium Lee & Boss)

  • Usare le unità em per creare style sheet scalabili
  • Usare sempre le unità em per impostare il font-size
  • Usare unità relative per le lunghezze
  • Usare unità assolute di lunghezza solo quando sono note le caratteristiche fisiche del dispositivo di output
  • Usare elementi floating invece delle tabelle
  • Disporre il contenuto in ordine logico
  • Assicurarsi che il documento sia leggibile anche senza style sheets
  • Provare il documento con diversi browser
  • Specificare sempre un font generico come alternativa
  • Fermarsi in tempo (evitare troppi effetti sulla stessa pagina)

I selettori (quadro sinottico)

Tipo Significato (la regola si applica a ...) Esempio
selettore universale tutti gli elementi nel documento *
element type tutti gli HTML elements del tipo del selettore h1
p
class selector tutti gli elementi HTML che precedono il punto (o tutti, se non è specificato nulla) la cui definizione li rende elementi della classe il cui nome segue il punto .articletitle h1.important
ID selector l' unico elemento nel documento il cui attributo coincide con la stringa che segue il simbolo # #special3
p#special52
pseudo-element selector (CSS2) le istanze dello pseudo-element p:first-letter
p:first-line
h1:first-child
pseudo-class selector (CSS2) istanze della pseudo-classs, la cui presentazione può variare a seguito dell' interazione dell' utente con la pagina a:hover
a:active
a:focus
a:link
a:visited
body:lang(d)
descendant selector tutti gli elementi del tipo più a destra di una lista (separata da spazi), solo quando l' element type discende dal tipo alla sua sinistra p em
p.wide em
parent-child selector (CSS2) tutti gli elementi del tipo specificato a destra del simbolo ">", che sono figli degli elementi a sinistra del simbolo ">" (è una forma più specifica del descendant selector) body > p
adjacent selectors (CSS2) tutti gli elementi del tipo specificato a destra del segno "+", adiacenti (nel codice HTML) agli elementi a sinistra del segno "+" h1+h2
p+h3
attribute selectors (CSS2) attributi che corrispondono al profilo specificato nelle parentesi quadre p[align]
input[type="text"]
img[alt~="none"]
body[lang|="en"]

Cambio dinamico dello stile CSS

Tecniche di accessibilità WCAG 2.0

Esempio modifica dinamica di parti del documento

Esempio cambio del file CSS

Gli standard non limitano la creatività

  • Un esempio tra tanti, il subacqueo, e una sua spiegazione
  • e un sito come riferimento: CSS Zen Garden
  • vi sono poi altri standard grafici come SVG, Webgl e il nuovo elemento canvas di HTML5
  • Per rendersi conto degli effetti grafici possibili (notizia del 6/4/2010): porting di DOOM2 in HTML5

Inoltre: alcuni cenni di CSS3

molte sono le nuove funzionalità che aggiunge CSS3, alcuni esempi di effetti che in genere troviamo in programmi di grafica professionali (provati solo con firefox 3.5):

  • testo ombreggiato
  •   angoli arrotondati, box ruotato stirato e ombreggiato, effetto 3d sfumato
  • riflessi
logo ufficio italiano w3c

 

 

  • ...

Esercizio

Rivediamo l'esempio iniziale

Esercizio per "casa" (mandatemelo via email)

Preparare un mini sito Web costituito da tre documenti XHTML1.1 collegati tra loro:

  • una prima pagina in cui si descrivono le finalità del sito, una sezione contenente i collegamenti alle altre pagine, dei link che consentono di saltare blocchi di testo e di collegamenti, un help, ...
  • una seconda pagina che raccoglie le notizie ed eventi del mese
  • una terza pagina con un form per richiesta informazioni

Grazie per l' attenzione

Domande?


Se non è sul Web non esiste ...

... troverete le slide all'indirizzo (http://www1.isti.cnr.it/~Martinelli/XML/doc/CorsiRegione2010/)

 

XML