Lezione 4 (stampa)
Transcript
Lezione 4 (stampa)
Lezione 4 HTML e stili All'inizio del web solo annotazioni strutturali La decisione sullo stile di presentazione demandata ai browser Progettazione di siti web a.a. 2015/16 Fogli di stile: introduzione Maria Simi Marzo, 2016 HTML esteso con tag stilistici fonte di problemi Tag proprietari e non standard Trucchi e cattive pratiche Mancanza di pulizia e ridondanza delle pagine Scarsa aggiornabilità e consistenza Difficile visualizzazione su dispositivi alternativi [Learning web design, design, J. Niederst Manuale di riferimento del W3C] La risposta: i 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 dei browser CSS-2 ben supportati da tutti i browser moderni salvo alcune eccezioni Il supporto non è ancora completo per i CSS3, ma vale la pena iniziare ad usarli. Uno stile per molti contenuti I fogli di stile possono essere globali per il sito Le regole stilistiche stanno in un posto solo e sono utilizzate da tutte le pagine del sito Facilità di sviluppo 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 1 di 7 Vantaggi dei CSS Possibilità di applicare lo stesso stile a più contenuti Possibilità di riutilizzo di uno stesso contenuto con stili diversi Facilità di sviluppo e manutenzione Maggiore controllo stilistico Stesso contenuto in più stili Diversi fogli di stile possono essere applicati alla stessa pagina fogli di stili diversi per diversi media: lo schermo, la stampa, il proiettore, il dispositivo mobile ... stili diversi a seconda delle dimensioni dello schermo Possibile il riutilizzo degli stessi contenuti Lezione 4 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) Regole CSS: sintassi Un foglio di stile contiene un insieme di regole stilistiche Sintassi di una regola: 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, il tiling, lo scorrimento altro ... Regole CSS selettore { proprietà à: valore valore; ; propriet proprietà à: valore valore; ; propriet … proprietà à: valore propriet } Regole CSS: altri esempi regola dichiarazioni Un esempio body { margin: : 0; margin background: : white white; ; background font-family family: : helvetica helvetica, , arial arial, , sans sans-serif font } Selettori Selettori per tipo di elemento (per tag) si selezionano tutti gli elementi con un certo tag h1 {color: blue} Selettori ID e CLASS per selezionare elementi che abbiamo caratterizzato (nel codice HTML) con l’attributo ID oppure con l’attributo CLASS Selettori contestuali Si selezionano certi elementi sulla base del loro contesto (es. solo quelli che compaiono dentro altri elementi) 2 di 7 h1 { font-weight weight: : bold bold; ; font font-size size: : 24px font } p, li { font-size size: : 12px 12px; ; font line-height height: : 150 150% % line } 18px) ) interlinea 1,5 (18px Nota: Il punto e virgola separa le dichiarazioni, dopo l'ultima non serve, anche se c'è non dà errore Selettori di elementi singoli (per ID) È possibile definire stili su singoli elementi HTML, identificati da un nome unico (valore attributo id id)) Esempio: id= ="saluti" "saluti"> >Saluti e baci ... </p> <p id #saluti { font-size: 11px; margin-top: 25px } oppure p#saluti Nota: ci può essere un solo elemento con un certo id in una pagina Lezione 4 Selettori classe (CLASS) Possiamo definire una classe da usare per specializzare un tag esistente Esempio di specializzazione di h2 h2:: HTML: : HTML CSS: : CSS class= ="red" "red"> >Getting started started</ </h2 h2> > <h2 class h2. .red {color color: : red red} } h2 o definire una classe generica da usare per specializzare un qualunque elemento: Selettori contestuali I selettori contestuali sono limitati nell’applicazione a un contesto: un tag, un elemento … si presentano come una sequenza di selettori Possono essere: Selettori discendenti Selettori figlio Selettori di adiacenza HTML: : <h2 class class= ="smaller" "smaller"> >Testo piccolo piccolo< </h2> HTML <p class="smaller">Tutto qui dentro è più piccolo</p piccolo</p> CSS: : *. *.smaller smaller {font font-size size: : 80 80%} %} CSS L'albero del documento <html> <head> <title>My My home page</title> <title> page</title> </head> <body> <h1>My My <em> <em>home home</em> </em> page page</h1> </h1> <h1> <p> Welcome to my home page! Let me tell you about my favorite <em>composers </em>: : <em>composers</em> </p> <div> <ul> <li> Elvis Costello </li> <li> Johannes Brahms </li> <li> George Brassens </li> </ul> </div> </body> </html> Selettori figlio Come un selettore discendente ma si applica solo ai figli di un determinato elemento background-color color: : gray gray} } p > em {background <p>Solo Solo l l’ ’elemento <em> <em>figlio figlio< </em> di p <p> <i>ma non quello che segue che invece è un <em>nipote</em ></i i></ ></p p> <em>nipote</em></ Il simbolo “>” è detto combinatore 3 di 7 Selettori discendenti Definiscono stili che si applicano solo ad elementi all’interno di altri tag: color: : red } h1 { color em { color: color: red } h1 em { color color: : blue } <h1>Questo Questo titolo è <em> <em>molto molto< </em> importante</h1 > <h1> importante</h1> L’enfasi è blu nel contesto di un titolo rosso altrimenti è rossa ol a em { font font-weight weight: : bold } Il testo enfatizzato dentro un’ancora dentro una lista ordinata viene reso in grassetto Selettori di adiacenza Si applica ad elementi che sono direttamente consecutivi e allo stesso livello (fratelli) padding-left left: : 20px 20px} } p {padding padding-left left: : 0px 0px} } h1 + p {padding I paragrafi sono normalmente rientrati con eccezione del primo paragrafo immediatamente seguente un titolo di primo livello. Lezione 4 DIV e SPAN: elementi generici Servono per creare un elemento HTML a cui applicare gli stili. Una sorta di contenitore generico di porzioni di documenti. Ne esistono di due tipi Elementi di tipo “blocco”: <div> ... </div> provocano una interruzione di riga prima e dopo Tre modi di usare gli stili Foglio di stile in un file esterno e riferito nell' intestazione del documento Stili definiti nella testa del documento (embedded (embedded)) Stili definiti sugli elementi del documento (inline (inline)) mediante l'attributo style Elementi "in linea": <span> ... </span> Gli attributi id:: per dare un nome unico id class:: per dire che appartiene a una certa classe (tipo) class Non abusarne: applicare stili a elementi standard, se possibile. Fogli di stile esterni Passi da seguire: Si crea il foglio di stile con un editore di testo Si salva con estensione .css (es stile.css) Nella sezione head della pagina HTML a cui vogliamo applicare lo stile: <head> … type= ="text/css" href href= ="stile.css" /> <link rel= rel="stylesheet" type … </head> Pagina normale normale Pagina con CSS Fogli di stile inline :-O Per cambiare gli stili localmente in una porzione di un documento Supponiamo che lo stile del documento preveda il font arial, dimensione 12px, di colore nero … color: : red red; ; font font-style style: : italic italic" "> <p style= style="color Questo è importante e lo voglio mettere in rosso e in corsivo!! </p> Pagina con CSS (inline) 4 di 7 Fogli di stile embedded Se vogliamo definire uno stile che vale solo per il documento: <head> … type= ="text/css" "text/css"> > <style type <!-body { margin: 0; font-family: helvetica, arial, sans-serif } --> </style> </head> Nota:: I commenti servono per i browser che non supportano i CSS e per Nota evitare l’indicizzazione da parte dei motori di ricerca Fogli di stile in cascata Ma perché in cascata (cascading )? (cascading)? Tutti gli aspetti stilistici sono definiti dai browser e continuano a valere, a meno di ridefinizione Ogni aspetto stilistico può essere definito più volte e ad uno stesso elemento si possono applicare regole in conflitto. Quale vince? Vince sempre la definizione più specifica Ma più specifica in che senso? Secondo la struttura gerarchica del documento Lezione 4 L'albero del documento I selettori e l'albero Ogni selettore seleziona un sottoinsieme degli elementi nell'albero <html> <head> <title>My My home page</title> <title> page</title> </head> <body> <h1>My My <em> <em>home home</em> </em> page page</h1> </h1> <h1> <p> Welcome to my home page! Let me tell you about my favorite <em>composers composers</em> </em>: : <em> </p> <div> <ul> <li> Elvis Costello </li> <li> Johannes Brahms </li> <li> George Brassens </li> </ul> </div> </body> </html> Esempi H1 LI DIV P EM LI più specifico di UL UL più specifico di DIV DIV allo stesso livello di H1 P fratello di H1 Gli stili vengono ereditati a meno di ridefinizione Precedenza tra sorgenti di stile Precedenza temporale Esiste inoltre la seguente precedenza tra stili definiti su uno stesso elemento a seconda della provenienza. In ordine di precedenza: A parità di sorgente vale la regola stilistica più recente Esempio 1: due fogli di stile collegati <head> "stile1.css"> > <link rel= rel="stylesheet" type= type="text/css" href= href="stile1.css" rel= ="stylesheet" type type= ="text/css" href href= ="stile2.css"> <link rel "stile2.css"> </head> 1. Stili definiti inline nel corpo del documento (tramite l'attributo STYLE) 2. Stili definiti nella testa del documento, dei due tipi: - Stili definiti in file esterni riferiti tramite LINK In caso di conflitti vincono le regole in stile2 - Stili definiti nel tag STYLE nella testa del documento Esempio 2: due regole nello stesso foglio di stile 3. Stili definiti dall’utente (con opzioni del browser) color: : red} h1 {color red} blue} } h1 {color: color: blue 4. Stili definiti dai browser (quelli di default) Vince il colore blu Esempio <html> <head> type= ="text/css" "text/css"> > <style type color: : green green} } h1 {color </style> rel= ="stylesheet" type type= ="text/css" href href= ="stile.css" "stile.css"> > <link rel </head> file stile. stile.css: css: h1 { style= ="color color: : red red" "> <body style color: : yellow yellow; ; color ... } <h1 style= style="color: color: blue" blue">Come sono?</h1> sono?</h1> <p> Testo che segue il titolo.</p> titolo.</p> </body> </html> Esempio html> > <html < <head head> > < <style style type type= ="text/css" "text/css"> > h1 h1 {color color: : green green} } </ </style style> > < <link link rel rel= ="stylesheet" "stylesheet" type type= ="text/css" "text/css" href= ="stile.css" "stile.css"> > href </ </head head> > < <body body style style= ="color: red" "color: red"> > <h1 h1> > < h1 style= style="color: blue"> "color: blue">Come sono?</ Come sono?</h1 < <p>Testo che segue il titolo. Testo che segue il titolo.</ </p p> </ </body body> > </html html> > </ stile.css Esempio 5 di 7 Lezione 4 Sfruttate la cascata! Regole in forma abbreviata Esempio 1 font-weight weight: : bold} h1 {font bold} weight: : bold bold} } h2 {fontfont-weight weight: : bold bold} } h3 {fontfont-weight h1, , h2 h2, , h3 {font font-weight weight: : bold bold} } h1 color: : green green} } h1 {color align: : center center} } h1 {texttext-align color: : green green; ; h1 {color text-align align: : center center} } text La ripetizione per h1 può non essere necessaria color: : green green} } h1 {color red} } h1 {color: color: red color: : red red} } h1 {color Esempio 2 *.smaller smaller {font font-size size: : 9px 9px} } *. font-size size: : 9px 9px} } .smaller {font body { font-family family: : verdana, arial, , sansfont verdana, arial sans-serif } font-family family: : verdana verdana, , arial, sans-serif} h1 {font arial, sans serif} body { margin: : 0; margin margin-left left: : 20px 20px; ; margin } tutti i margini a 0 a parte quello sx I modelli font-size size: : 36pt 36pt; ; h1 {font font-family family: : serif serif; ; font font-style style: : normal normal; ; font font-weight weight: : normal normal; ; font fontfont-variant: variant: normal; normal; line-height height: : normal normal} } line font: : 36pt serif serif} } h1 {font Un anticipo del box model Per capire meglio la filosofia dei CSS, al di là delle liste di attributi e loro valori ... Ogni elemento HTML occupa una porzione rettangolare dello schermo, una scatola (element (element box) box) Box model: model: gli oggetti che si possono influenzare con i CSS sono scatole rettangolari che si possono comporre e annidare. Ogni scatola ha un’area per il contenuto (un testo, un’immagine), un padding (imbottitura), un bordo bordo,, un margine Visual model: model: ci dice come queste scatole vengono sistemate nella finestra del browser (lo vedremo più avanti) È come se fossero 4 rettangoli uno dentro l'altro Box model: la struttura Tutti questi rettangoli, o loro parti, hanno proprietà che possono essere influenzate tramite i CSS I quattro lati dei rettangoli margin-top top: : 8px margin margin-right right: : 10px margin margin-bottom bottom: : 12px margin margin-left left: : 14px margin margin: : top right bottom left margin margin: : 8px margin margin: : 8px 8px 8px 8px margin margin: : 8px 4px 2px margin margin: : 8px 4px 2px 4px margin margin: : 8px 2px margin margin: : 8px 2px 8px 2px margin 6 di 7 Lezione 4 Le proprietà dei box: margini Valori: lunghezze, percentuali rispetto al contenitore, auto auto inserisce un margine grande quanto basta a riempire il blocco contenitore Per centrare un elemento di tipo blocco: margin-left left, , margin margin-right right: : auto auto; ; margin Il blocco viene centrato perché il margine sinistro e destro sono resi uguali per simmetria Proprietà dei box: bordi border-style:: border-style none, hidden, dotted, dashed, solid, double, groove (incavato), ridge (sporgente), inset (incavato), outset (a rilievo) border-width:: border-width thin, medium, thick (thin < medium < thick) una misura (in px, em ...) border-color:: border-color trasparent o un colore Stessa cosa per padding padding,, che serve per distaccare il contenuto da un eventuale bordo Fogli di stili per media diversi Possiamo per una stessa pagina richiamare fogli di stile diversi type= ="text/css" <link rel= rel="stylesheet" type media= ="screen, projection" href href= ="stile_schermo.css" /> media In particolare possiamo avere un foglio di stile per lo schermo, uno diverso per la stampa, uno per un telefonino o palmare con browser … <link rel= rel="stylesheet" type= type="text/css" media= ="print" href href= ="stile_stampa.css" /> media Quelli ben supportati sono: media="all", per tutti i media media="print", per la stampa media ="screen", per il video Altri: projection, handheld, aural … 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 Prossimamente Esercizio sui selettori Stili per la tipografia 7 di 7 Fogli di stili per media diversi: uso Il primo è utilizzato per lo schermo o la proiezione il secondo per la stampa (visibile con anteprima di stampa).