6x - Politecnico di Torino
Transcript
6x - Politecnico di Torino
CSS (mar'11) HTML (Hyper Text Markup Language) CSS (Cascading Style Sheets) Antonio Lioy < [email protected] > Politecnico di Torino Dip. Automatica e Informatica linguaggio di descrizione della pagina descrizione testuale (file di testo) specifica tramite comandi (tag) interpretati dai browser i file HTML contengono tre tipi di informazioni: il testo vero e proprio del documento da visualizzare una suddivisione logica del documento in parti (titolo, paragrafi, ...) indicazioni sulla presentazione grafica del documento (formattazione, ovvero lo stile di visualizzazione) HTML: stili i tag furono originariamente pensati per definire il contenuto logico del documento e non la formattazione (che veniva lasciata al browser) <h1> vuol dire “questo è un titolo di primo livello” <p> vuol dire “qui inizia un paragrafo” e così via sono stati aggiunti nuovi tag per la gestione della formattazione (ad es. <font>) indipendenti dai componenti logici (titolo, paragrafo, tabella, … ) HTML: problema sugli stili è diventato sempre più difficile creare siti Web dove il contenuto dei documenti HTML è chiaramente separato dalle regole per la loro formattazione i siti sono diventati insiemi molto complessi in cui si vuole mantenere un aspetto grafico omogeneo le regole di formattazione applicate in maniera “selvaggia” rendono difficile la manutenzione del sito La soluzione: CSS Cascading Style Sheets introdotti dal World Wide Web Consortium (W3C) nella specifica HTML 4.0 ed ora usati anche per XHTML e XML i fogli di stile descrivono come visualizzare i componenti logici di un documento: il titolo di primo livello lo sfondo della pagina … in questo modo si separano nettamente il contenuto ed il formato di presentazione © A.Lioy - Politecnico di Torino (2003-11) CSS: definizione CSS1 (dicembre 1996) http://www.w3.org/TR/REC-CSS1 50 proprietà CSS2 (maggio 1998) e CSS2.1 (luglio 2007) http://www.w3.org/TR/CSS2/ http://www w3 org/TR/CSS2/ (vari errori) http://www.w3.org/TR/CSS21/ aggiunge altre 70 proprietà a CSS1 (media-specific style-sheet – es. per stampanti e dispositivi audio – font scaricabili, tabelle, posizionamento di elementi) CSS3 in corso di sviluppo F.1 CSS (mar'11) CSS: risorse CSS CSS home page at W3C http://www.w3.org/Style/CSS/ tutorial ed altre risorse http://www.w3.org/Style/CSS/learning servizio automatico di validazione http://jigsaw.w3.org/css-validator/ descrizione normalmente salvata in file di testo esterni al documento HTML file con estensione “.css” file referenziato all’inizio del documento HTML lo stesso file CSS può essere incluso da molte pagine HTML è possibile cambiare l’aspetto di un intero sito modificando un solo file! possibile – ma sconsigliato – definire lo stile in-line: per un singolo file per singoli tag all’interno di uno specifico file Sintassi CSS Sintassi CSS - esempi la sintassi CSS è costituita da 3 parti un selettore, una proprietà ed un valore selector { property : value ; ... } il selettore è il nome di un tag, di una classe o un identificatore unico tag_name [ tag_name ].class [ tag_name ]:pseudo-class #unique_id il nome del tag può essere omesso (o si può usare *) per indicare qualunque tag per una classe /* tag */ body { background-color: gray } p { font-family: "sans serif" } /* tag.classe */ p.centrato { text-align: center; color: green } /* classe */ .warning { color: red } /* lista di tag */ h1, h2, h3 {color: green } /* tag:pseudo-classe */ a:hover { background: aqua } /* #id */ #footer { font-style: italic } Visione gerarchica di HTML ... <body> <h1>I Re di Roma</h1> <p>I primi tre Re di Roma:</p> <ul> <li>Romolo</li> <li>Numa li N P Pompilio</li> ili /li <li>Tullo Ostilio</li> </ul> </body> Ereditarietà gerarchica le proprietà assegnate ad un elemento sono automaticamente ereditate da tutti i suoi discendenti possibile però fornire stile specifico per un discendente si applica sempre la regola più specifica esempio: per impostare il tipo di font di una pagina HTML è meglio specificare lo stile del BODY invece che di tutti gli elementi specifici gerarchia degli oggetti body h1 ul p fratelli primo figlio © A.Lioy - Politecnico di Torino (2003-11) li li eccezione: lo sfondo (background) li F.2 CSS (mar'11) Selettori gerarchici possibile specificare selettori in modo gerarchico per condizionare l’applicazione delle proprietà solo a casi specifici E1 E2 elemento E2 quando discende da E1 E1 > E2 elemento E2 quando è figlio di E1 E1 + E2 elemento E2 quando immediatamente preceduto da un fratello E1 E:first-child elemento E quando è il primo figlio del suo genitore Selettori condizionali E[A] elemento E con un valore assegnato all'attributo A E [ A="Val"] elemento E con valore Val assegnato all'attributo A E : lang(L) elemento E nella lingua L (es. "it", "de", "fr", "en-uk") E : focus elemento E quando ha il "focus" (es. è attivo un campo per inserire testo) Sintassi dei commenti in CSS stessa sintassi del linguaggio C, ossia /* … */ /* questo e' un commento */ p { text-align: g center; ; /* questo e' un altro commento */ color: red } Richiamare un foglio di stile (link) ciascuna pagina HTML che si basa su un certo file di stile deve includerne il nome nella sezione <head> mediante il tag <link rel="stylesheet" …> il browser leggerà le definizioni nel file (dopo averlo scaricato) e formatterà opportunamente la pagina da visualizzare esempio: <head> <link rel="stylesheet" type="text/css" href="polito.css"> <title> . . . </head> Foglio di stile interno si può definire uno stile direttamente nella sezione <head> mediante il tag <style> opzione sconsigliata perché si perdono i vantaggi della condivisione dello stile tra più pagine utile solo per fare prove rapide (migrare poi lo stile ad un CSS esterno) <head> <style type="text/css"> body { background-color : gray } </style> . . . </head> © A.Lioy - Politecnico di Torino (2003-11) Per i vecchi browser ... i browser ignorano i tag sconosciuti ma visualizzano ciò che è contenuto tra i tag a meno che non sia commentato i nuovi browser ignoreranno i segni di commento (perché nei fogli di stile i commenti sono diversi) <head> <style type="text/css"> <!-body {background-color: gray } --> </style> . . . </head> 19 F.3 CSS (mar'11) Stile per singoli tag (in-line style) quando usare un CSS sarebbe troppo complesso si consiglia comunque di usare la sintassi del CSS tramite l’attributo STYLE nei singoli tag esempio: Definizioni multiple <!-- vecchio HTML --> Prof. Antonio <b>Lioy</b> nel caso di definizione multipla dello stile di un elemento, il browser decide lo stile di tale elemento considerando “in cascata” tutte le definizioni con la seguente priorità: impostazioni sul tag (alta priorità) foglio di stile interno foglio di stile esterno (bassa priorità) <!-- CSS-like --> Prof. Antonio <span style="font-weight:bold">Lioy</span> Definizioni multiple: esempio un foglio di stile esterno collegato alla pagina contiene la seguente definizione h1 {color: red; text-align: left} mentre un foglio di stile interno alla pagina contiene: h1 {text-align: right} la definizione risultante di <h1> per il browser sarà color: red text-align: right Media-type noti definiti in CSS-2.1 all (è il default) braille (= dispositivo tattile Braille) embossed (= stampante Braille a pagina) handheld (= ( piccolo schermo, schermo banda limitata) print (stampante a pagina, pre-print view) projection screen speech (in CSS2 era "aural") tty (stampante a spaziatura fissa; vietato usare "px") tv (=bassa risoluzione + audio) © A.Lioy - Politecnico di Torino (2003-11) Media-type possibile specificare che un foglio di stile si applica solo se la pagina è visualizzata su uno specifico supporto multimediale (o "media-type"): parametro "media=…" del tag LINK possibile elencare più media-type, separati da virgola esempio: <head> <link rel="stylesheet" type="text/css" href="polito_stampa_A4.css" media="print"> . . . </head> Media-type e media-group media-type braille embossed handheld print projection screen speech tty tv media group paged, visual, audio, grid, static, continuous speech, tactile bitmap interactive continuous tactile grid both paged tactile grid static both visual audio visual, audio, grid grid, both speech bitmap paged visual bitmap static paged visual bitmap interactive continuous visual, audio bitmap both continuous speech N/A both continuous visual grid both both visual, audio bitmap both F.4 CSS (mar'11) Includere un foglio di stile (@import) un CSS può importare le regole di altri CSS in modo assoluto o condizionato al media-type sintassi @import: url ("URI_CSS") [ media1 , media2 , ... ] ; da inserirsi prima di qualunque regola di formattazione esempio (all'interno di un file/sezione CSS): @import url("poli_general.css"); @import url("poli_stampa.css") print; body { color: blue } . . . CSS: definizione dell’attributo class è possibile definire stili differenti per uno stesso elemento di HTML usando l’attributo “class” esempi: un paragrafo “normale” allineato a sinistra un paragrafo “citazione” centrato e corsivo una classe “centrato” da usarsi al posto di <center> p.normale { text-align: left } p.citazione { text-align: center; font-style: italic } /* sconsigliato: non e' una classe "logica" */ .centrato { text-align: center } HTML: uso dell’attributo class CSS: unità di lunghezza relative: "em" = altezza della lettera "M" nel font corrente "ex" = altezza della lettera "x" nel font corrente "px" = dimensione di un pixel assolute: "in" = inch (25.4 mm) "cm" o "mm" "pt" = punto tipografico (1/72 di inch) "pc" = pica (12 pt) N.B. "em" ed "ex" sono riferite al font del genitore se usate per definire la dimensione di un font <p class="normale"> Il poeta ha scritto: </p> <p class="citazione"> Nel mezzo del cammin di nostra vita ... </p> Il poeta ha scritto: Nel mezzo del cammin di nostra vita ... CSS: colori alcuni colori predefiniti ed accessibili per nome: Black, White, Gray, Silver, Yellow, Red, Purple, Fuchsia, Maroon, Green, Lime, Olive, Aqua, Teal, Blue, Navy altri colori specificabili mediante il loro codice RGB esadecimale decimale o percentuale esadecimale, esempi (equivalenti a "red"): rgb (255, 0, 0) rgb (100%, 0%, 0%) #ff0000 #f00 /* abbreviazione per due cifre hex uguali */ N.B. stessi nomi di HTML ma formato RGB diverso © A.Lioy - Politecnico di Torino (2003-11) CSS: background (I) background-color: colore | inherit | transparent "transparent" è il default background-image: url("image_URI") URL dell’immagine si suggerisce di specificare anche un colore da usarsi: se non si riesce a caricare l'immagine per contornare l'immagine visibile nelle trasparenze dell'immagine F.5 CSS (mar'11) CSS: background (II) background-repeat: repeat | repeat-x | repeat-y | no-repeat | inherit copie multiple dell'immagine per coprire tutto lo sfondo oppure solo in orizzontale o verticale background-position: posizione_h posizione_v ogni posizione può essere una keyword, una lunghezza (distanza da angolo in alto a sinistra) o una percentuale (della dimensione del contenitore) keyword (orizzontale): left, center, right keyword (verticale): top, center, bottom se c'è una sola keyword la seconda si assume essere "center" CSS: background (III) background-attachment: fixed | scroll | inherit immagine in posizione fissa o segue l'eventuale scorrimento del contenuto background: color image_URI repeat attachment position | inherit formato sintetico per tutte le varie specifiche non importa l'ordine perché ogni elemento ha una sintassi diversa (possibile anche omettere elementi) esempio (sfondo grigio, immagine centrata, segue il contenuto) background: gray url("polito_logo.jpg") scroll center center no-repeat CSS: text properties (I) color: colore text-align: left | right | center | justify text-transform: none | capitalize | uppercase | lowercase text-decoration: none | underline | overline | linethrough | blink text-indent: lunghezza | percentuale possibili valori negativi (testo sporge a sinistra) CSS: text properties (II) CSS: font properties (I) font-style: normal | italic | oblique N.B. oblique sottilmente diverso da italic font-weight: normal | bold | 1…1000 il valore numerico indica la saturazione del nero font font-variant: variant: normal | small-caps small caps font-stretch: ultra-condensed | extra-condensed | condensed | semi-condensed | normal | semi-expanded | expanded | extra-expanded | ultra-expanded raramente disponibile su UA © A.Lioy - Politecnico di Torino (2003-11) line-height: normal | fattore | lunghezza | percentuale il valore del fattore moltiplicativo viene ereditato tale e quale mentre per la percentuale si eredita il valore numerico risultante esempi: { line-height: 1.2; font-size: 10pt } = i figli ereditano per l'altezza delle loro righe un fattore 1.2 da applicarsi alla dimensione del loro font { line-height: 120%; font-size: 10pt } = i figli ereditano per l'altezza delle loro righe un valore fisso di 12pt CSS: font properties (II) font-size: dimensione_del_font valore assoluto (pt, mm, …) valore relativo (em, ex, …) percentuale scala assoluta (1 (1…7, 7 normale=3) normale 3) o relativa (+/ (+/– N) xx-small x-small small medium large x-large xx-large (notare che manca “normal” e la scala non è definita) note: i valori relativi e le percentuali sono riferite al font dell'elemento genitore (può essere il default dell'UA) preferire valori relativi o percentuali, evitare valori assoluti (eccezione: media a dimensione fissa/nota) F.6 CSS (mar'11) CSS: font properties (III) font-family: lista_di_nomi_di_font lista ordinata (Courier, “Courier New”, …) UA sceglie first match coi font disponibili localmente utile specificare un font “generico” in ultima posizione occhio alla compatibilità tra i font alternativi elencati font generici (e compatibilità): serif (times, “times new roman”, palatino, ...) sans-serif (arial, helvetica, verdana, ...) monospace (courier, “courier new”, fixed, …) cursive (“comic sans MS”, florence, ...) fantasy (impact, oldtown, ...) CSS: dimensioni dei contenitori width: lunghezza | percentuale | auto | inherit min-width: lunghezza | percentuale | inherit max-width: lunghezza | percentuale | none | inherit larghezza (fissa, minima, massima) del contenuto height: lunghezza | percentuale | auto | inherit min-height: lunghezza | percentuale | inherit max-height: lunghezza | percentuale | none | inherit altezza (fissa, minima, massima) del contenuto i vari browser hanno default diversi per margin, border e padding – specificarli esplicitamente! CSS: modello di formattazione margin (trasparente) border padding contenuto larg. elemento larghezza contenitore CSS: dimensioni margini e padding margin-left, margin-right, margin-top, marginbottom: auto | lunghezza | percentuale la percentuale è riferita alla larghezza del genitore margin: m_top_bottom_left_right margin: m_top_bottom m_left_right margin: m_top m top m m_right_left right left m_bottom m bottom margin: m_top m_right m_bottom m_left formato sintetico (in quattro versioni) per le dimensioni dei margini corrispondenza tra numero parametri e margini seguita anche per i bordi padding-left, padding-right, padding-top, paddingbottom, padding: auto | lunghezza | percentuale CSS: bordi dei contenitori border-top-style, border-right-style, border-bottom-style, border-left-style, border-style: none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset stile di uno specifico bordo o forma sintetica border-top-width, border top width border border-right-width, right width border-bottom-width, border-left-width, border-width: thin | medium | thick | lunghezza dimensione di uno specifico bordo o forma sintetica border-top-color, border-right-color, border-bottom-color, border-left-color, border-color: colore | transparent | inherit colore di uno specifico bordo o forma sintetica © A.Lioy - Politecnico di Torino (2003-11) ogni blocco è visto come un contenitore (box) CSS: formati sintetici per i bordi border-top, border-right, border-bottom, border-left, border: [ width ] [ style ] [ color ] nella forma sintetica "border" si può specificare un unico valore uguale per tutti i bordi esempio: border: medium ridge red F.7 CSS (mar'11) CSS: link properties per definire lo stile dei link nei vari stati si usano pseudo-classi: :link (link non visitato) :visited (link visitato) :active (link su cui viene fatto click) :hover (link puntato dal mouse) oppure si possono associare classi / stili al tag A (indipendenti dallo stato) esempi: a:link { color: blue } a:hover { background: aqua } a.semplice { text-decoration: none } Un template standard per pagine con header, footer, menù e contenuto moderno e standard: usa CSS per la formattazione usa DIV per il layout ispirato da http://friendlybit.com header menù contenuto footer CSS: layout grafico posizionamento dei vari contenitori (box) float: left | right | none contenitore mobile posizionamento orizzontale rispetto al padre clear: left | right | both | none quali lati di un contenitore NON possono essere adiacenti a contenitori floating precedenti N.B. molte altre istruzioni, modello molto complesso, leggere lo standard Template: parte HTML (I) <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="it"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <meta name="Author" name= Author content= content="A A.Lioy Lioy"> > <title>Titolo della pagina</title> <meta name="Keywords" content="web tutorial"> <link rel="stylesheet" href="polito.css" type="text/css"> </head> <body> <div id="header"> <h1>Titolo della pagina</h1> </div> Template: parte HTML (II) <div id="navigation"> <h2>Menù</h2> <ul> <li><a href="p1.html">First</a></li> <li><a href="p2.html">Second</a></li> </ul> </div> / <div id="content"> <h2>Contenuto</h2> <p>Contenuto della pagina.</p> </div> <div id="footer"> <h2>Autore</h2> <p>Nome dell’autore e info per contattarlo.</p> </div> </body> </html> © A.Lioy - Politecnico di Torino (2003-11) Template: CSS body { ... } div { border: 1px solid Black; padding: 1ex; } h1, h2, h3, h4, h5, h6 { margin: 0; } #navigation { float: left; width: 10ex; } #navigation ul { list-style: none; margin: 0 0 0 0; padding: 0 0 0 0; } #content { margin-left: 12ex; } #footer { clear: both; } F.8