CSS: Formattazione del testo
Transcript
CSS: Formattazione del testo
Laboratorio di Tecnologie Web CSS: Formattazione del testo Dott. Stefano Burigat www.dimi.uniud.it/burigat Proprietà per la gestione dei font CSS definisce un insieme di proprietà che possono essere utilizzate per gestire aspetti come il tipo o la dimensione dei font utilizzati per visualizzare l'informazione testuale. Tipo di font La proprietà “font-family” viene utilizzata per specificare un font o una lista di font (nota come stack di font) per nome. body { font-family: Arial; } p { font-family: "Duru Sans", Verdana, sans-serif; } I valori della proprietà devono rispettare alcune regole: • Tutti i nomi di font, ad eccezione delle famiglie generiche (come il terzo valore della seconda regola sopra), devono avere l'iniziale maiuscola • I font devono essere separati da virgole • Nomi con spazi devono essere racchiusi tra parentesi Specificare uno stack di font al posto di un font unico permette al browser di avere più soluzioni nel caso in cui il font specificato non sia disponibile. Il browser prova le diverse opzioni a partire dal primo valore. Se nessuno dei font specificati viene trovato, viene utilizzato il font di default. I browser attuali supportano la possibilità di fare riferimento a font non presenti sulla macchina dell'utente (web font). Ci sono due approcci principali per ottenere questo risultato: mettere a disposizione il font sul proprio server o utilizzare dei servizi appositi disponibili online. Il primo approccio prevede di trovare il font che serve (e assicurarsi di poterlo utilizzare), salvare il font nei diversi formati supportati dai browser, fare l'upload dei file sul server, utilizzare la regola CSS @font-face nei propri documenti CSS, specificare il nome del font tramite la proprietà “font-family”. Il secondo approccio, molto più semplice, prevede di sfruttare dei servizi online che fanno il lavoro per noi e permettono di integrare i font con un paio di righe di codice. Si veda ad esempio il servizio fornito da Google alla pagina http://www.google.com/fonts/. Esistono 5 famiglie di font generiche che è possibile utilizzare quando non c'è bisogno di un font specifico oppure come ultima opzione negli stack di font: • serif (ad es. Times New Roman, Georgia): font con delle appendici decorative alle estremità di alcune lettere • sans-serif (ad es. Arial, Verdana, Helvetica): font senza appendici decorative • monospace (ad es. Courier): font in cui ogni carattere occupa lo stesso spazio • cursive (ad es. Comic Sans): font che emulano la scrittura manuale • fantasy (ad es. Western): font decorativi (raramente utilizzati sul web per motivi di leggibilità) La strategia migliore per la specifica dei font nelle proprie pagine web è inserire per primo il font che si vuole utilizzare, poi specificare una o più alternative simili che normalmente si trovano installate sulle macchine degli utenti (perché già fornite dal sistema operativo o da applicazioni comuni come Office) e infine indicare la famiglia generica più adeguata. Online, si trovano molte informazioni su quali sono i font più comuni (web safe font) e suggerimenti sugli stack di font da utilizzare (css font stack). Dimensione del testo La dimensione del testo può essere specificata tramite la proprietà “font-size”. Ci sono diversi modi per specificare i valori di dimensione: • utilizzando una percentuale p { font-size: 150%; } • utilizzando una delle unità di misura della lunghezza supportate da CSS p { font-size: 1.5em; } • utilizzando una delle dimensioni predefinite (tramite parola chiave) p { font-size: x-large; } • utilizzando una dimensione relativa a quella del testo intorno (tramite parola chiave) p { font-size: larger; } Le dimensioni specificate in percentuale sono relative all'elemento padre. Nel frammento di codice che segue, la proprietà “font-size” dell'elemento <body> è stata specificata come 100% della dimensione di default del testo (che normalmente è di 16 pixel). Poichè “font-size” dell'elemento <p> ha valore 150%, la dimensione del testo del paragrafo è pari a 150% di 16 cioè 24 pixel. In questo modo, le dimensioni del testo dei vari elementi sono sempre proporzionali tra di loro. body { font-size: 100%; } p { font-size: 150%; } L'unità di misura della lunghezza più utilizzata in CSS è l'em che è definita come la distanza tra baseline (di due righe) quando un font è utilizzato senza spazio extra (leading) tra le linee. In pratica, per un testo di dimensione 16 pixel, 1em equivale a 16 pixel; per un testo di dimensione 12 pixel, 1em equivale a 12 pixel e così via. Quando viene definita la proprietà “font-size” in em, il valore specificato è sostanzialmente un valore di scala relativo alla dimensione dell'elemento padre. Nell'esempio seguente, la dimensione del testo dell'elemento <p> è 24 pixel in quanto è ottenuta moltiplicando il valore in em per la dimensione del testo del padre (16 pixel). body { font-size: 100%; } p { font-size: 1.5em; } L'esempio illustra anche il modo più appropriato per l'utilizzo degli em, cioè specificare la dimensione dell'elemento <body> come 100% e tutto il resto in em (notate che NON ci deve essere uno spazio tra il numero e l'unità di misura). Detto questo, l'utilizzo degli em non è sempre facile poiché: • Browser e piattaforme diverse possono gestire i calcoli con gli em in modo diverso a causa di errori di arrotondamento. • Poichè em è un'unità di misura relativa, la dimensione del testo di un elemento dipende dai livelli di innestamento dell'elemento stesso. Ad esempio, supponiamo di avere un elemento <h2> all'interno di un elemento <article> all'interno di <body> e di volere visualizzare il testo di <h2> con dimensione 18 pixel e il testo di <article> con dimensione 14 pixel. Se <body> utilizza le dimensioni standard (16 pixel), allora il valore in em per <article> viene determinato dividendo il valore che si vuole ottenere (14px) per il valore del contenitore (16px), che risulta in .875. Con lo stesso procedimento, il valore in em di <h2> viene calcolato dividendo 18px (risultato desiderato) per 14px (dimensione di <article>), ottenendo 1.28571429. body {font-size: 100%;} article {font-size: .875em;} h2 {font-size: 1.28571429em; } Oltre agli em, altre unità di misura per la lunghezza utilizzabili in CSS sono: • px (pixel) definiti come 1/96 di pollice • pt (punti): 1/72 di pollice • pc (picas): 1pc = 12pt • mm, cm, in: millimiteri, centimetri, pollici • ex (x-height): altezza della lettera x minuscola nel font corrente • rem (root em): dimensione in em dell'elemento radice <html> • ch (zero width): larghezza del carattere 0 nel font corrente • vw (viewport width): 1/100 della larghezza della finestra corrente del browser • vh (viewport height): 1/100 dell'altezza della finestra corrente del browser • vm (viewport minimum): il minore tra vw e vh px, pt, pc, mm, cm e in sono unità di misura assolute e dovrebbero essere evitate nelle pagine web. rem, ch, vw, vh e vm sono state introdotte in CSS3. L'utilizzo di rem come unità di misura risolve uno dei problemi di em cioè il fatto che il valore di un elemento dipende dal suo livello di innestamento. I valori specificati in rem sono sempre relativi alla dimensione specificata per l'elemento <html> (di solito 100%). Per permettere l'utilizzo di rem anche sui browser che non lo supportano, è necessario specificare la dimensione anche in un'altra unità di misura, inserendo quella in rem per ultima. html {font-size: 100%;} article { font-size: 12px; font-size: .75rem; } I due modi rimanenti per specificare “font-size” si basano sull'utilizzo di specifiche parole chiave. Le parole xx-small, x-small, small, medium, large, x-large, e xx-large permettono di specificare delle dimensioni che sono scalate proporzionalmente le une rispetto alle altre. Di norma, medium corrisponde al valore di default dei browser e le altre parole variano le dimensioni di conseguenza (ma gli specifici valori usati non sono definiti). Le parole chiave larger e smaller servono invece a dare un'indicazione relativa di dimensione rispetto a quella dell'elemento contenitore. font-weight La proprietà “font-weight” permette di definire lo spessore di un font. I possibili valori sono normal, bold, bolder, e lighter oltre a 100, 200, 300, 400, 500, 600, 700, 800, 900. Per poter utilizzare un certo valore di peso, è necessario che il relativo font abbia una versione specifica dei caratteri per quel peso. Nella maggior parte dei casi, gli unici due valori utilizzati sono bold e normal. Il valore normal può essere utile per far apparire con font normale del testo che sarebbe invece apparso in grassetto (come quello racchiuso nell'elemento <strong>). <!DOCTYPE html> <html> <head> <title>Tecnologie web</title> <style type="text/css"> p { font-weight: bold; } strong { font-weight: normal; } </style> </head> <body> <p>A questo paragrafo vengono applicate <strong>regole di stile</strong> in cascata.</p> </body> </html> font-style La proprietà “font-style” permette di definire l'inclinazione del testo. I possibili valori sono normal, italic e oblique. La differenza tra italic ed oblique è che il primo è di solito una versione ad-hoc del font mentre il secondo prende il font normale e lo inclina. In pratica, nella maggior parte dei casi danno lo stesso risultato. strong { font-weight: normal; font-style: italic; } font-variant La proprietà “font-variant” permette di definire del testo in maiuscoletto. I valori possibili sono normal e small-caps. Se non esiste una versione del font apposita, i browser semplicemente scalano le lettere maiuscole normali. strong { font-variant: small-caps; } font La proprietà “font” è una scorciatoia che permette di specificare tutte le altre proprietà viste finora in una volta sola. In particolare, permette di specificare i valori delle diverse proprietà font-style, font-weight, font-variant, fontsize/line-height, font-family separati da uno spazio. La proprietà “line-height” consente di definire l'altezza della linea di testo, come vederemo nella sezione successiva. Il seguente esempio specifica i valori per ciascuna proprietà: p { font: oblique bold small-caps 1.5em/1.8em Verdana, sansserif; } Notate che in questo esempio gli ultimi due valori fanno in realtà parte della stessa proprietà. Come minimo, la proprietà “font” deve contenere valori per le proprietà “font-size” e “font-family”, in questo specifico ordine. Se ciò non avviene o se l'ordine delle proprietà non è rispettato, l'intera regola non è valida. Le altre proprietà devono essere specificate prima del valore di “font-size” ed il loro ordine non è importante. Se non vengono specificati dei valori per font-style, font-weight e font-variant, viene utilizzato di default il valore normal. Formattazione delle righe CSS mette a disposizione proprietà per gestire la formattazione di intere righe di testo tramite indentazioni, spazi ed allineamenti. Altezza delle righe La proprietà “line-height” definisce la distanza minima tra baseline di righe diverse, impostando in tal modo lo spazio occupato da ogni riga. Si tratta di una distanza minima perchè se si inseriscono su una riga elementi più grandi (ad esempio un'immagine) allora l'altezza della riga è maggiore. Nonostante la distanza venga definita da baseline a baseline, la maggior parte dei browser divide equamente lo spazio vuoto extra sopra e sotto il testo in modo tale che il testo stesso venga posizionato al centro della riga. Gli esempi seguenti mostrano i tre modi in cui può essere specificato il valore di questa proprietà, come numero, come misura di lunghezza e come percentuale. Nel primo e nel terzo caso, il valore inserito è un fattore di scala riepstto alla dimensione corrente del font. Nel secondo caso, si può utilizzare una qualsiasi unità di misura sebbene l'utilizzo di em sia il più comune. In tutti e tre gli esempi, l'altezza della riga viene definita come il doppio della dimensione del testo. p { line-height: 2; } p { line-height: 2em; } p { line-height: 200%; } Indentazione La proprietà “text-indent” permette di definire l'intestazione della prima riga di testo di un paragrafo (per definire l'indentazione di un intero paragrafo si usano altre proprietà). Questa proprietà viene ereditata ma si applica solo ad elementi di tipo blocco, alle celle delle tabelle e ad elementi definiti come blocchi inline. Il valore di “text-indent” può essere specificato come misura di lunghezza o come percentuale (in tal caso, riferita alla lunghezza dell'elemento padre). p#1 { text-indent: 2em; } p#2 { text-indent: 25%; } p#3 { text-indent: -35px; } Notate, nel terzo caso, la definizione di un valore negativo che consente di ottenere un riga che sporge rispetto al resto del paragrafo. Per ottenere questo risultato è però necessario assicurarsi di aver impostato un margine in modo che la riga non finisca fuori dal bordo del browser. Notate anche che il valore che viene ereditato nel caso della percentuale è quello calcolato (cioè il numero di pixel), non la percentuale stessa. Allineamento orizzontale E' possibile gestire l'allineamento del testo così come avviene nei word processor utilizzando la proprietà “textalign” che viene ereditata ma si applica solo ad elementi di tipo blocco, alle celle delle tabelle e ad elementi definiti come blocchi inline. I possibili valori della proprietà sono left, right, center, justify. <!DOCTYPE html> <html> <head> <title>Tecnologie web</title> <style type="text/css"> p#p1 { text-align: left; } p#p2 { text-align: right; } p#p3 { text-align: center; } p#p4 { text-align: justify; } </style> </head> <body> <p id="p1">A questo paragrafo allineato a sinistra vengono applicate <em style="color: red">regole di stile</em> in cascata.</p> <p id="p2">A questo paragrafo allineato a destra vengono applicate <em style="color: red">regole di stile</em> in cascata.</p> <p id="p3">A questo paragrafo centrato vengono applicate <em style="color: red">regole di stile</em> in cascata.</p> <p id="p4">A questo paragrafo giustificato vengono applicate <em style="color: red">regole di stile</em> in cascata.</p> </body> </html> Altre proprietà applicabili al testo CSS mette a disposizione altre proprietà per la gestione del testo che possono risultare utili in alcuni (rari) casi. text-decoration La proprietà “text-decoration” può essere utilizzata per inserire linee sotto, sopra o attraverso il testo, oppure per eliminare la sottolineatura dai link. E' una proprietà che si applica a tutti gli elementi ma non viene ereditata (poichè le linee passano anche attraverso gli elementi figli, potrebbe comunque sembrare che ci sia ereditarietà). I possibili valori della proprietà sono none, underline, overline, linethrough e blink. Il valore none serve ad eliminare qualsiasi decorazione e si usa principalmente con i link. Nel caso in cui venga utilizzato è comunque necessario assicurarsi che i link siano facilmente identificabili in qualche altro modo. a { text-decoration: none; } In generale, è meglio non fare uso della decorazione del testo in quanto potrebbe causare confusione nell'utente se male implementata (ad esempio, il testo sottolineato viene spesso confuso con i link). Capitalizzazione La proprietà text-transform può essere utilizzata per modificare la capitalizzazione del testo, indipendentemente da come il testo originale viene scritto. I possibili valori sono none, capitalize, lowercase e uppercase. <!DOCTYPE html> <html> <head> <title>Tecnologie web</title> <style type="text/css"> p#p1 { text-transform: none; } p#p2 { text-transform: capitalize; } p#p3 { text-transform: lowercase; } p#p4 { text-transform: uppercase; } </style> </head> <body> <p id="p1">L'IBM ha sede ad Armonk, New <p id="p2">L'IBM ha sede ad Armonk, New <p id="p3">L'IBM ha sede ad Armonk, New <p id="p4">L'IBM ha sede ad Armonk, New </body> </html> York, York, York, York, USA.</p> USA.</p> USA.</p> USA.</p> Spaziatura Le proprietà “letter-spacing” e “word-spacing” permettono di aggiungere spazio rispettivamente tra le lettere e tra le parole del testo a cui vengono applicate. Supportano come valore una delle misure di lunghezza definite in precedenza. Come per altre proprietà, il valore calcolato (in pixel) per un elemento viene passato anche agli elementi discendenti. <!DOCTYPE html> <html> <head> <title>Tecnologie web</title> <style type="text/css"> p#p1 { letter-spacing: 8px; } p#p2 { word-spacing: 1.5em; } </style> </head> <body> <p id="p1">L'IBM ha sede ad Armonk, New York, USA.</p> <p id="p2">L'IBM ha sede ad Armonk, New York, USA.</p> </body> </html> Ombreggiatura La proprietà “text-shadow”, introdotta in CSS3, permette di aggiungere ombreggiatura al testo. L'ombreggiatura viene disegnata dietro al testo ma davanti al background e ad eventuali bordi, se presenti. IE9 e precedenti non la supportano. Il valore della proprietà è costituito da tre misure ed un colore. La prima misura specifica l'offset orizzontale ossia lo spostamento orizzonatale dell'ombra rispetto al testo (un valore positivo implica uno spostamento verso destra, uno negativo verso sinistra). La seconda misura specifica l'offset verticale (valore positivo per spostamento verso il basso, negativo verso l'alto). La terza misura, opzionale, definisce un raggio di sfocatura per rendere l'ombra meno definita. Più il raggio è alto, più l'ombra è sfocata. L'ultimo componente di “text-shadow” è il colore utilizzato per l'ombra. Se non viene specificato, viene utilizzato lo stesso colore del testo. <!DOCTYPE html> <html> <head> <title>Tecnologie web</title> <style type="text/css"> h1#p1 { text-shadow: .2em .2em .1em silver; } h1#p2 { text-shadow: -.3em -.3em .2em silver; } </style> </head> <body> <h1 id="p1">Titolo ombreggiato</h1> <h1 id="p2">Titolo ombreggiato</h1> </body> </html> E' anche possibile applicare più di un'ombreggiatura alla volta, nel qual caso esse vengono disegnate nell'ordine in cui vengono incontrate, permettendo di creare effetti come bagliori, incisioni, etc. Nonostante ciò è bene limitare al massimo l'utilizzo dell'ombreggiatura in quanto rende le informazioni più difficili da leggere e può peggiorare le prestazioni del browser. <!DOCTYPE html> <html> <head> <title>Tecnologie web</title> <style type="text/css"> body {background-color: thistle;} h1#p1 { text-shadow: -.7em -.5em .2em gray, .2em .2em .1em gray; } h1#p2 { text-shadow: 0 0 .7em purple; } h1#p3 { color: #ba9eba; text-shadow: -.05em -.05em . 05em white, .03em .03em .05em purple; } h1#p4 { color: #ba9eba; text-shadow: -.05em -.05em . 05em purple, .03em .03em .05em white; } </style> </head> <body> <h1 id="p1">Titolo ombreggiato</h1> <h1 id="p2">Titolo ombreggiato</h1> <h1 id="p3">Titolo ombreggiato</h1> <h1 id="p4">Titolo ombreggiato</h1> </body> </html> vertical-align La proprietà “vertical-align” viene utilizzata per specificare il posizionamento della baseline di un elemento inline (ad esempio, un'immagine) rispetto alla baseline del testo intorno. Può anche essere utilizzata per specificare l'allineamento verticale del contenuto di una cella nelle tabelle. Non viene ereditata. I possibili valori sono baseline, sub, super, top, text-top, middle, textbottom, bottom. E' inoltre possibile specificare un valore di lunghezza oppure una percentuale (in tal caso, la percentuale è riferita alla proprietà “line-height”). white-space La proprietà “white-space” definisce come gestire gli spazi bianchi presenti in un elemento. I possibili valori sono normal, nowrap, pre, pre-line, prewrap. Ad esempio, il valore pre è equivalente all'uso dell'elemento <pre> in html. La seguente tabella riassume l'effetto dei diversi valori per quanto riguarda la gestione dei ritorni a capo, degli spazi e del wrapping automatico del browser. visibility La proprietà “visibility” ha due possibili scopi: • Nascondere un elemento lasciando vuoto lo spazio che questo avrebbe occupato. • Nascondere righe o colonne di una tabella. Nel primo caso è necessario utilizzare il valore hidden, nel secondo il valore collapse. E' anche possibile utilizzare il valore visible per ripristinare la visibilità (ad esempio, di un elemento figlio dato che la proprietà viene ereditata). Il supporto del valore collapse da parte dei browser non è uniforme e può portare a risultati diversi. <!DOCTYPE html> <html> <head> <title>Tecnologie web</title> <style type="text/css"> p#p1 { visibility: hidden; } p#p2 { color: red; } </style> </head> <body> <p id="p1">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <p id="p2">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </body> </html> Gestione delle liste CSS mette a disposizione alcune proprietà che consentono di scegliere il tipo e la posizione dei marker utilizzati per la visualizzazione delle liste o di eliminarli completamente. Queste proprietà si applicano esclusivamente agli elementi <ul>, <ol> e <li> o ad elementi la cui proprietà “display” è stata impostata a list-item (in tal modo è possibile applicare lo stile di una lista anche ad elementi come i paragrafi). Tipo di marker La proprietà “list-style-type” permette di scegliere il marker che verrà visualizzato prima di ogni elemento di una lista. Tipicamente, questa proprietà viene specificata con valore none in modo da eliminare la visualizzazione del marker. I valori disc, circle e square permettono di scegliere il tipo di marker per le liste non ordinate (ma non consentono di variarne lo stile, che è definito dal browser). La seguente tabella mostra gli altri valori CSS2.1 utilizzabili per definire il tipo di numerazione nelle liste ordinate. NOTA: CSS3 ha introdotto la nuova regola @counter-style per permettere la definizione di stili personalizzati per liste e contatori. Posizione dei marker La proprietà “list-style-position” specifica se i marker devono fare parte del contenuto di una lista (valore inside) oppure no (valore outside). Il valore di default è outside. <!DOCTYPE html> <html> <head> <title>Tecnologie web</title> <style type="text/css"> li {border: 1px solid;} ul#p1 { list-style-type: disc; list-style-position: inside; } ul#p2 { list-style-type: square; list-style-position: outside; } </style> </head> <body> <ul id="p1"> <li>Elemento 1</li> <li>Elemento 2</li> <li>Elemento </ul> <ul id="p2"> <li>Elemento <li>Elemento <li>Elemento </ul> </body> </html> 3</li> 1</li> 2</li> 3</li> Immagini marker La proprietà “list-style-image” può essere utilizzata per specificare un'immagine da impiegare come marker. Il valore della proprietà è l'URL dell'immagine. E' preferibile specificare anche la proprietà “list-style-type” per i casi in cui l'immagine non sia disponibile o la proprietà non sia supportata. ul { list-style-image: url(/images/marker.png); list-style-type: circle; } list-style La proprietà “list-style” permette di specificare le tre proprietà precedenti in una volta sola, nell'ordine che si vuole. ul { list-style: url(/images/marker.png) circle outside; }