Fogli di stile: introduzione
Transcript
Fogli di stile: introduzione
Fogli di stile:
introduzione
Fabio Fioravanti
Introduzione dei fogli di stile
1996: definizione dei fogli di stile da parte del
W3C (CSS Level 1 o CSS-1)
Dal 1996 al 2000: scarso supporto da parte dei
browser
Adesso CSS-1 ben supportato dalla maggior
parte dei browser
Il supporto CSS2 non è ancora uniforme
CSS3 all’orizzonte
2
http://en.wikipedia.org/wiki/Comparison_of_lay
Trident (IE), Gecko (Mozilla)
3
Problemi da superare
Abuso di HTML come linguaggio di annotazione stilistica
mancanza di pulizia delle pagine
tag proprietari e non standard
Spreco di banda di comunicazione
I tag stilistici occupano spazio nella pagina (font ripetuto per tutti i
paragrafi o tutte le celle di una tabella)
Le tabelle ritardano il caricamento
Le immagini al posto dei testi sono pesanti
Scarsa aggiornabilità e consistenza
Ostacolo al progresso
Difficile visualizzazione su browser non grafici
Hot topic: PDA, telefonini …
4
Vantaggi dei CSS
Separazione stile-contenuto
Aderenza agli standard
Contenuto con il minimo di struttura necessario
Stili specificati a parte
Possibilità di applicare lo stesso stile a più contenuti
Possibilità di riutilizzo di uno stesso contenuto con stili diversi
Maggiore compatibilità
Maggiore durata nel tempo del progetto
Facilità di manutenzione
Maggiore controllo stilistico
5
Facilità di manutenzione
I fogli di stile possono essere globali per il sito
Le
regole stilistiche stanno in un posto solo e sono
utlizzate da tutte le pagine del sito
Facilità di sviluppo e gestione
Più
facile sviluppare siti consistenti dal punto di vista
visuale
Facilità nella manutenzione del sito: se si vuole
cambiare uno stile si cambia in un posto solo
6
Maggiore controllo stilistico
Con i fogli di stile si riescono a controllare aspetti stilistici
che non si possono controllare in altro modo
Le famiglie di tipi (font, dimensioni, interlinea)
La sottolineatura dei link
La possibilità di HOVER sui link
Divisione della pagina in sezioni (div, span) con stili diversi
Controllo di margini e bordi
I colori, gli sfondi, lo scorrimento
altro ...
7
Regole CSS: sintassi
8
Regole CSS
selettore {
attributo1: valore1;
attributo2: valore2;
regola
…
attributok: valorek;}
dichiarazioni
Esempio:
body {
margin: 0;
background: white;
o meglio #ffffff
font-family: helvetica, arial, sans-serif }
possibili valori
alternativa generica
9
Regole CSS: altri esempi
h1 {
font-weight: bold;
font-size: 24px;
}
p, li {
font-size: 12px;
line-height: 150%;
interlinea 1,5 (18px)
}
Nota: Il punto e virgola separa le dichiarazioni, dopo l'ultima
non serve anche se non da' errore
10
Selettori classe
Possiamo definire una sottoclasse di un tag esistente
con un stile particolare.
Esempio di specializzazione di h2
h2.red {color: #ff0000}
<h2 class="red">Getting started</h2>
O una sottoclasse generica che si può utilizzare per
specializzare un qualunque elemento
Esempio di sotto-classe generica
.smaller {font-size: 9px}
<p class="smaller">Testo piccolo</h2>
<div class="smaller">Tutto qui dentro è
piccolo</div>
11
Selettori di elementi singoli
È possibile anche definire stili che si applicano solo ad
elementi HTML identificati da un ID
Esempio
#footer {
font-size: 11px;
margin-top: 25px
}
<div id="footer"> Saluti e baci ... </div>
Nota: due elementi nella stessa pagina non possono
avere stesso id
12
Selettori discendenti
È possibile definire stili che si applicano solo in certi contesti
(nell’ambito di altri tag)
h1 { color: red }
em { color: red }
<h1>Questo titolo è<em>molto</em>
importante</h1>
h1 { color: red }
em { color: red }
h1 em { color: blue }
L’enfasi è blu nel contesto di un titolo rosso altrimenti è rossa.
13
Tre modi di usare gli stili
Foglio
di stile in un file esterno e riferito nel
documento
Stili definiti nella testa del documento
(embedded)
Stili definiti nei tag del documento (inline)
mediante l'attributo style
14
Fogli di stile esterni
Passi da seguire:
Si crea il foglio di stile
2. Si salva con estensione .css (es stile.css)
3. Nella sezione head della pagina HTML a cui vogliamo applicare
lo stile:
<head>
…
<link rel="stylesheet" type="text/css"
href="stile.css">
…
</head>
1.
15
Fogli di stile embedded
Se vogliamo definire uno stile che vale solo per il documento:
<head>
…
<style type="text/css">
<!-body {margin: 0;
font-family: helvetica, arial, sans-serif
}
-->
</style>
</head>
I commenti servono per i browser che non supportano i CSS e per evitare
l’indicizzazione da parte dei motori di ricerca
16
Fogli di stile inline
Per cambiare gli stili localmente in una porzione di un
documento
Supponiamo che lo stile del documento preveda il tipo
Arial, dimensione 12px, di colore nero …
<p style="color: red; font-style: italic">
Questo è importante e lo voglio mettere
in rosso e in corsivo!!
</p>
17
Fogli di stile “in cascata”
Ma perché in cascata?
Tutti gli aspetti stilistici sono definiti dai browser e
valgono a meno di ridefinizione
Ogni elemento stilistico può essere ridefinito (anche più
volte) e vince sempre la definizione “pìù specifica”
... a parità di specificità la definizione più recente
Ma più specifica in che senso?
Secondo la struttura gerarchica del documento
I l documento è un oggetto che contiene altri oggetti che
contengono altr oggetti ...
18
L’albero del documento
<HTML>
BODY
<HEAD>
<TITLE>My home page</TITLE>
</HEAD>
H1
P
DIV
<BODY>
<H1>My home page</H1>
<P>Welcome to <em>my home page!</em> Let me
tell you about my favorite composers:</P>
EM
UL
<DIV>
<UL>
<LI> Elvis Costello </LI>
<LI> Johannes Brahms </LI>
<LI> Georges Brassens </LI>
LI
LI
LI
</UL>
</DIV>
</BODY>
Gli stili vengono ereditati a
</HTML>
meno di ridefinizione
19
I selettori e l'albero
Ogni selettore seleziona un sottoinsieme
degli elementi nell'albero
BODY
Esempi
H1
P
DIV
H1
LI
EM
UL
DIV
P EM
LI
LI
LI
20
Precedenza temporale
A parità di specificità, gli stili definiti su un elemento cancellano
quelli definiti precedentemente
In particolare esiste la seguente precedenza (decrescente):
Stili definiti inline nel corpo del documento (BODY o tramite l'attributo
STYLE di altri tag come Hx, DIV, P, ...)
Stili definiti nella testa del documento
Stili definiti in file esterni riferiti tramite LINK
Stili definiti nel tag STYLE nella testa del documento
Stili definiti dai browser (quelli di default)
Se nello stesso foglio di stile definisco due volte lo stesso elemento
vale l'ultimo
Casi particolari: margin: 0; margin-left: 20px
21
Esempio
<html>
<head>
<style type="text/css">
h1 {color: green}
</style>
<link rel="stylesheet" type="text/css"
href="stile.css">
</head>
<body style="color: red">
...
<h1 style="color: blue">Come sono?</h1>
Testo che segue il titolo.
</body>
</html>
Nel file stile.css
h1 { color: brown; }
22
Matching dei selettori
Pattern
Meaning
*
Matches any element.
E
Matches any E element (i.e., an element of type E).
EF
Matches any F element that is a descendant of an E element.
E>F
Matches any F element that is a child of an element E.
E:first-child
Matches element E when E is the first child of its parent.
E:link
E:visited
Matches element E if E is the source anchor of a hyperlink of which the target is
not yet visited (:link) or already visited (:visited).
E:active
E:hover
E:focus
Matches E during certain user actions.
E+F
Matches any F element immediately preceded by an element E.
E[foo]
Matches any E element with the "foo" attribute set (whatever the value).
E[foo="warning"]
Matches any E element whose "foo" attribute value is exactly equal to "warning".
DIV.warning
HTML only. The same as DIV[class~="warning"].
E#myid
Matches any E element ID equal to "myid".
23
Attenzione alla virgola!
Ad esempio, il selettore P, LI è molto
diverso dal selettore P LI
24
Esempio complesso
DIV OL>LI P
elemento P discendente di un LI che a sua
volta è figlio di un OL che a sua volta è un
discendente di DIV.
Lo spazio vuoto opzionale intorno a “>” è
stato omesso.
25
Fase di transizione
Problemi di compatibilità
Uso limitato e consapevole dei CSS per il
controllo della tipografia
Le tabelle sono ancora usate per la
disposizione degli oggetti (layout)
26
CSS per la tipografia
Tipi dei caratteri (font)
Testo
Colori e sfondi
Margini
Tabelle
27
Forme abbreviate
Abbreviazioni
h1 {font-weight: bold}
h2 {font-weight: bold}
h3 {font-weight: bold}
h1 {color: green}
h1 {text-align: center}
h1 {color: green}
h1 {color: red}
h1,h2,h3 {font-weight: bold}
h1 {color: green;
text-align: center}
h1 {color: red}
h1 {36pt serif}
h1 {font-size: 36pt;
font-family: serif;
font-style: normal;
font-weight: normal;
font-variant: normal;
line-height: normal}
*.smaller and .smaller
*[LANG=fr] and [LANG=fr]
*#myid and #myid
28
Font
I caratteri possono essere visualizzati in stili tipografici
diversi, associando ad essi delle immagini (gliph)
Un tipo (font) è un insieme coordinato di gliph, che
possono essere o non essere disponibili sulla macchina
locale
Per questo motivo bisogna dare delle alternative
Per questo motivo a volte i caratteri speciali previsti dallo
standard (anche se compresi dal browser) non sono visualizzati
Famiglia di font: un insieme coordinato di font
29
Attributi di font
font-family
serif, sans-serif, cursive,
fantasy, monospace
font-style
font-variant
normal, small-caps
ultra-condensed, wider,
condensed, semicondensed, normal ...
font-size
normal, Italic, oblique
bold, bolder, lighter,100 ...
900
font-stretch
Famiglie generiche:
con o senza serif (grazie)
proporzionali o fisse
fantasy, handwriting
font-weight
Misura assoluta in pt, px,
large, small
Misura relativa: larger,
smaller, %, em
line-height: interlinea
30
Misure assolute e relative
Misure assolute
punti (pt) 1pt = 1/72 in
pixel (punti sullo schermo)
xxsmall, x-small, small, medium, large, x-large, xx-large
Misure relative
valore %, larger, smaller ...
1 em è pari alla dimensione del font in punti (la dimensione della
M): specificare 0.8em significa un carattere che è l’80% di quello
del padre
1 ex è pari all’altezza di una lettera minuscola
31
Pixel, punti, em?
I punti (pt) sono per la stampa.
In teoria le misure relative sono migliori
buona
portabilità
Le misure in pixel sono a volte più
affidabili
A volte
il ridimensionamento mediante le
preferenze dei browser non funziona
scarsa portabilità
32
Testo
text-indent: il rientro della prima riga di un blocco
valori
assoluti in em, px, cm ...
valori relativi in %
text-align
valori:
center, right, left, justify
text-decoration
underline,
overline, line-through
text-shadows
h1
{text-shadow: 0.2em 0.2em}
33
Ancora testo
letter-spacing
word-spacing
H1 {word-spacing: 1em}
text-transform
blockquote{letter-spacing: 0.1em}
capitalize, uppercase, lowercase
white-space
normal (le sequenze di spazi e gli “a capo” sono ignorati)
pre (le sequenze di spazi e gli “a capo” sono rispettati)
nowrap (spazi ignorati, a capo soppressi)
34
Ereditarietà
i discendenti ereditano alcune proprietà dai predecessori
(es: color); altre non vengono ereditate (es: background)
per sapere se una proprietà è ereditata fare riferimento
allo standard;
In CSS2 “inherit” è uno pseudo-valore che forza l’utilizzo
del valore ereditato
esempio:
body {
color: red;
background: black;
}
35
Colori e sfondi
Due stili che vanno specificati insieme
color: il colore del testo
sfondo
background-color: un colore o ‘transparent’
background-image: un’immagine specificata da un URL
gli sfondi non si ereditano ma sono normalmente trasparenti
Sfondi degli elementi
background-repeat
background-attachment
Valori: repeat, repeat-x, repeat-y, no-repeat
Valori: fixed, scroll
background-position
Valori: posizione in % o assoluta
36
Tabelle
<table>
<caption>Tabella 3x3</caption>
<tr id="row1">
<th>Header 1</th>
<td>Cell 1</td>
<td>Cell 2</td>
</tr>
<tr id="row2">
<th>Header 2</th>
<td>Cell 3</td>
<td>Cell 4</td>
</tr>
<tr id="row3">
<th>Header 3</th>
<td>Cell 5</td>
<td>Cell 6</td>
</tr>
</table>
37
Tabelle e CSS
TH { vertical-align: center;
text-align: center;
font-weight: bold; font-size: x-large }
TD { vertical-align: middle }
TABLE {border: 1px solid black }
TR#row1 { text-align: left }
TR#row2 { text-align: center }
TR#row3 { text-align: right }
CAPTION { caption-side: top }
38
Margini
Blockquote e le liste (ol,
ul) normalmente rientrano
il testo contenuto
Lo spazio intorno può
essere controllato con le
proprietà:
margin
margin-left
margin-right
margin-top
margin-bottom
blockquote {
margin-top: 1em;
margin-right: 0em;
margin-bottom: 1em;
margin-left: 0em;
font-style: italic;}
o anche:
blockquote {
margin: 1em 0em 1em 0em;
font-style: italic;}
In senso orario a partire da top
39
Link
Link sottolineato o non
a:link {text-decoration: underline;}
a:link, a:visited {text-decoration: none}
a:hover {background: cyan}
a:hover {color: red}
Link, visited, hover sono chiaramente specializzazioni di
a. Ma perché i due punti?
non sono proprio classi come le altre ...
sono pseudo-classi perché si basano su proprietà che sono
esterne al documento (es. un link è stato visitato)
40
Conclusioni
Perché è una buona idea usare gli stili
Regole, selettori, attributi, valori
Stili esterni, embedded e inline
L'albero del documento
Regole di precedenza degli stili
Gli stili per la tipografia
41
42
I modelli
Per capire meglio la filosofia dei CSS, al di là
delle liste di attributi e loro valori ...
Box model: gli oggetti che si possono
influenzare con i CSS sono scatole rettangolari
che si possono comporre.
L’annidamento
delle scatole corrisponde grosso modo
all’annidamento degli elementi HTML
Visual model: ci dice come queste scatole
vengono sistemate nella finestra del browser.
43
Box model
Ogni elemento di HTML occupa una porzione
rettangolare dello schermo, una scatola (box)
Ogni scatola ha un’area per il contenuto (un
testo, un’immagine), un padding (imbottitura?) ,
un bordo, un margine
È come se fossero 4 rettangoli uno dentro l'altro
Tutte queste sezioni rettangolari hanno proprietà
che possono essere influenzate tramite i CSS
44
Box model: gli attributi
45
I quattro lati dei rettangoli
TOP 1
LEFT 4
margin-top: 1
margin-right: 2
margin-bottom: 3
margin-left: 4
RIGHT 2
margin: 1 2 3 4
margin: x
margin: x x x x
BOTTOM 3
Stessa cosa per border e padding
margin: x y
margin: x y x y
margin: x y z
margin: x y z y
46
Proprietà dei bordi
Border-width
thin, medium, thick (thin medium thick)
una misura (in px, em ...)
Border-color
transparent
un colore
Border-style
none, hidden, dotted, dashed, solid, double, groove (incavato), ridge
(sporgente), inset (box incavata), outset (box a rilievo)
Esistono anche, influenzabili separatamente
border-top-width, border-right-width, border-bottom-width, border-leftwidth, border-top-color, ..., border-top-style ...
47
Visual model
La sistemazione delle scatole nella finestra del
browser (viewport) è influenzata da:
le
dimensioni e il tipo della scatola
lo schema di posizionamento
le relazioni tra gli oggetti
Blocco contenitore: la scatola che contiene
un’altra scatola. Le posizioni sono tipicamente
relative ai margini del blocco contenitore
48
Blocco contenitore iniziale
La radice dell’albero del documento, BODY,
corrisponde al blocco contenitore iniziale,
rispetto al quale gli altri sono posizionati
49
Tipi di blocchi
Esistono diversi tipi di elementi dal punto
di vista del posizionamento. Quelli più
importanti sono:
gli
elementi blocco
gli elementi inline
Esempi:
P,
UL, OL, DIV sono elementi di tipo blocco
IMG, EM, STRONG, SPAN sono elementi
inline
50
Blocchi e inline
Blocchi: normalmente
(nel flusso normale)
provocano una
interruzione di linea
Inline: non provocano
una interruzione di
linea, ma tendono a
riempire tutta la riga.
Questo è un paragrafo di testo
messo qui per mostrare l’interruzione
di linea.
Testo prima.
Testo enfatizzato.
Testo dopo.
51
Posizionamento
Ci sono tre schemi di posizionamento delle scatole:
flusso normale: quello che uno si aspetta se non specificato
diversamente
float (scatole fluttuanti)
Questo è un
paragrafo di
testo che si
inserisce a
destra per il fatto che il quadrato
è stato dichiarato di tipo float
left.
Questo è un
paragrafo di
testo che si
inserisce a
sinistra per il fatto che il
quadrato è stato dichiarato di
tipo float right.
posizionamento esplicito: la scatola viene posizionata rispetto
all’oggetto contenitore
Le proprietà rilevanti sono position e float
52
La proprietà position
La proprietà position specifica la modalità di
posizionamento. I valori possibili sono:
static: la cosa normale, l’oggetto viene posizionato dove ci si
aspetta
relative: la posizione è data specificando uno spostamento
rispetto alla sua posizione “normale”
absolute: la posizione è specificata rispetto al blocco
contenitore
fixed: la posizione è fissa rispetto alla finestra del browser
Gli oggetti “posizionati” rspetto al contenitore (position
≠ static) usano le proprietà top, right, bottom, left per
dire dove
53
Dove posizionarsi
(top, right, bottom, left)
top: 10px;
bottom: 40%;
right: 40%;
left: 30px;
54
Ristrutturare pagine esistenti
Una pagina vecchio stile da ristrutturare
Fase 1: Markup
Ripristinare
individuati
markup, dando un nome agli elementi
Fase 2: Layout
Posizionare
le scatole (solo CSS)
Fase 3: Stile
aggiustare
lo stile del contenuto (solo CSS)
55
Fase 1: markup
In questa fase ripuliamo la pagina dalle
tabelle e da tutti gli elementi stilistici.
Ogni sezione individuata ha un nome e
corrisponde a a un elemento html o a un
div.
56
Fase 2: layout
Estendiamo il foglio di stile con regole di
posizionamento per i div, non tocchiamo
più la pagina HTML.
È la fase più critica per problemi di
compatibilità tra i browser.
57
Fase 3: stile
Adesso possiamo aggiustare gli stili degli
elementi
Anche qui si cambia solo il foglio di stile
Questa fase è meno problematica.
58
Fogli di stili alternativi
Possiamo per una stessa pagina richiamare fogli di stili
diversi
Possiamo avere un foglio di stile diverso per la stampa
Cose tipiche da cambiare
#header { display: none}
diverso da visibility: hidden, in cui la scatola occupa spazio
font-size: 12pt
Ma anche contenuti diversi!!!
Numero di telefono nella versione per il cellulare
Informazioni per registrarsi solo nella versione online
59
Fogli di stile alternativi
<link rel="stylesheet"
type="text/css" media="screen"
href=“stile_schermo.css"/>
<link rel="stylesheet"
type="text/css" media=“print"
href=“stile_stampa.css"/>
Il primo è utlizzato per lo schermo, il secondo
per la stampa (visibile con anteprima di
stampa).
60
Riferimenti
http://www.w3.org/Style/CSS/
http://css.html.it/guide/leggi/2/guida-css-di-base/
Altre risorse
http://meyerweb.com/
http://www.richinstyle.com/
http://www.alistapart.com/
http://www.csszengarden.com/tr/italiano/
Validator
http://jigsaw.w3.org/css-validator/
61
Editor
TopStyle,
DreamWeaver, HTML-Kit
Online editors
http://www.fonttester.com/
http://www.pixy.cz/apps/webedit/
http://cssmate.com/csseditor.htm
http://www.cssfly.net/
http://www.qrone.org/cssdesigner.html
http://www.realeditor.com/editor/
62
Crediti
Maria Simi, a.a. 2003/04
Contenuti tratti da: [D. Siegel, J. Zeldman,
Manuale di riferimento del W3C]
63