home » Articoli » Font-stack, @font-face, Cufòn e fratelli: come usare nuovi font nelle pagine web
5/11/2009
[di Maurizio Boscarol]
Per anni i web designer hanno avuto scelte limitate riguardo ai font da usare sulle proprie pagine web, dovendo ripiegare su quelli più diffusi sui computer dei loro utenti (Verdana, Arial, Courier, ecc: vedere questo articolo).
Negli ultimi anni sono avvenuti almeno due fenomeni di rilievo, che possono cambiare la qualità del web design come lo conosciamo oggi:
È dunque giunto il momento di arricchire le nostre scelte tipografiche sul web? Quanto è sicuro utilizzare questi font nelle proprie pagine web? E quali tecniche sono più adatte?
Già prima dell’introduzione di nuovi font, i web designer si erano affidati a tecniche di image replacement per sostituire, attraverso i CSS, delle immagini di background al testo prodotto dal browser. La tecnica di base può venir automatizzata con librerie php e javascript come Facelift e con l’uso di Flash (la tecnica è chiamata Sifr; qui in versione Sifr 3, la più aggiornata, opera di Mike Davidson) per generare automaticamente, a partire dal font o da una versione ricodificata del font stesso, immagini anche su più righe, perfino utilizzando gli stili CSS. La versione in Flash rende il testo addirittura ridimensionabile e selezionabile. Il tutto degrada a testo standard per gli utenti che non hanno a seconda del caso javascript o Flash attivo.
I problemi con queste tecniche sono comunque diversi:
Al netto di questi problemi noti, le tecniche erano comunque sufficientemente robuste (o i difetti poco rilevanti per il pubblico di quei siti) da essere usate anche in siti di vasta audience, per migliorarne la resa estetica, elemento importante anche per aumentare la tolleranza degli utenti, l’usabilità percepita e la credibilità.
Sebbene ancora usate e utilizzabili, le tecniche di image replacement sono state recentemente affiancate da nuovi espedienti che promettono di ottenere risultati anche migliori. In particolare:
<canvas>) per gli altri browser. Sebbene HTML 5 sia una specifica in progress, alcune sue parti sono state implementate già da alcuni browser (Safari, Firefox, Opera e Chrome), e consentono di far disegnare le lettere direttamente al browser, senza la necessità di produrre e caricare immagini; per Explorer, che non supporta <canvas> si può usare VML, appunto, implementato silenziosamente sul browser di Redmond fin dalla versione 5.0, e finora scarsamente utilizzato (anche Google Maps però usa VML, standard aperto proposto fin dal 1998 da alcune aziende, su Explorer 5.5 e successivi, mentre fa uso di SVG, specifica ufficiale del W3C, sugli altri browser).Queste tecniche si stanno sostituendo alle tecniche di image replacement, rendendole obsolete, e stanno offrendo la possibilità concreta ai web designer di usare font non consueti sulle proprie pagine web.
Vediamo i pro e i contro (che non mancano) di queste tecniche, il loro grado di maturazione e come usarle nella produzione di siti già oggi.
La proprietà font-family dei CSS consente di specificare font diversi, separati da virgola. I browser tenteranno di utilizzare il primo font, se disponibile sul computer dell’utente. In caso negativo proveranno con il secondo, e così via. È sempre stata buona norma usare più di un font nelle dichiarazioni di proprietà font-family, in modo da accomodare tutti, scrivendoli dal più particolare (e meno diffuso) al più generale e diffuso. E lasciare come ultima indicazione non un font, ma un’indicazione generica di famiglia, come serif o sans-serif (con grazie o senza grazie, una macro-distinzione fra i font). Questa sequenza è uno stack, una pila di font utilizzabili in successione in caso di assenza del font precedente.
Spingendo questo comportamento, implementato da tutti i browser, all’estremo, è possibile scrivere regole css che propongano per primi i font più recenti, per poi degradare, progressivamente, verso font meno recenti ma più diffusi, più generici. un esempio di font-stack è il seguente:
In questo modo, chi ha uno dei primi font, vedrà quello. Gli altri vedranno il Georgia o, se non ce l’hanno, il più generico font graziato disponibile (solitamente il Times New Roman o il Times).
È disponibile un ottimo articolo che presenta questa tecnica assieme ad una matrice dei font più installati.
Esistono inoltre ottimi generatori di font-stack che tengono conto della base di font installati, secondo le statistiche note, sui principali sistemi operativi, e costruiscono una gerarchia. Qui ulteriori risorse sui font-stack. Provateli: ma naturalmente questa tecnica è adatta solo se non vi importa la precisione e se usate font che siano non troppo diversi da quelli più diffusi.
Come già detto, è possibile già oggi consentire al browser di disegnare direttamente il testo con un font, usando per explorer un linguaggio nativo, VML, per gli altri browser l’implementazione del tag <canvas> proveniente dalle specifiche incomplete di HTML 5.
Queste tecniche si appoggiano a javascript (e non sono realizzabili in puro HTML/CSS) per due ragioni:
Le librerie più diffuse pronte all’uso che utilizzano questa tecnica sono:
Da test prestazionali sembra che Cufòn sia il più efficiente. Questi sistemi funzionano così:
I difetti sono:
Ci sono diverse soluzioni ai problemi di licenza:
Dovrebbe a questo punto essere chiaro, insomma, che i problemi di licenza sono più complessi di quelli tecnici, tanto che molti cominciano a lamentarsi dell’arretratezza complessiva della normativa sui diritti di utilizzo, non solo di software e musica, ma di tutto ciò che si può avere in formato digitale (cioè qualunque prodotto di comunicazione).
In definitiva, le tecniche javascript sono già mature, utilizzabili per testi brevi ma non brevissimi, a patto di risolvere i problemi di royalties. Naturalmente chi non ha javascript attivo vedrà una versione della pagina con un font normale, dichiarato nel css secondo l’ordine di priorità.
La regola @font-face, prevista nei CSS3, prevede – se l’utente non lo ha installato sul suo computer – lo scaricamento di un font dal server per l’uso diretto, incorporato, nella pagina web. Sorprendentemente, è supportato da moltissimi browser. Dunque, è una tecnica già utilizzabile, e non ha le controindicazioni di limiti alla lunghezza del testo e di peso di ulteriori file (tranne il font, naturalmente, che può pesare qualche decina di kilobyte). I difetti principali di questa tecnica sono tre:
Il modo corretto per servire un font a tutti i browser che la supportano, è, dunque, secondo questo articolo di Paul Irish, da cui è tratto l’esempio, la seguente:
Così si definisce la nuova famiglia “Graublau Web”, che poi può essere usata in seguito in qualunque dichiarazione css, come una famiglia font qualsiasi. La prima dichiarazione src è per Explorer, e usa il formato proprietario .eot (che peraltro è anche l’unico ad essere in regola con i problemi di licenza, perché incorpora un meccanismo di DRM) . La seconda è per gli altri browser, e non viene capita da Explorer a causa dell’istruzione format(), che blocca il suo parsing. Il nome del file deve essere messo fra virgolette (doppie o singole) per Opera. Il nome del file nella dichiarazione local deve corrispondere al nome del font (non del file), comprese le maiuscole.
Attenzione: Per Explorer il formato deve essere .eot, che si può produrre a partire da un file True Type (.ttf) con alcune utility di conversione: ad esempio Weft (è per sistemi Windows, scaricabile dal sito di Microsoft), oppure questo tool online. Per gli altri browser il formato può essere Open Type (.otf) o True Type (.ttf). Nel primo caso si scriverà format(‘opentype’), nel secondo format (‘truetype’). È possibile usare per la conversione anche FontForge, programma scarsamente usabile anche se molto potente, per Mac e Linux. Questo programma effettua anche una conversione in formato SVG, che può essere utile, come vedremo tra poco.
Tutti i browser tranne explorer, cercano prima il file nel computer locale dell’utente. Solo se non lo trovano, lo scaricano dal server e lo utilizzano.
Dalla festa rimangono, allo stato attuale, esclusi alcuni browser. Oltre a Firefox nelle versioni inferiori a 3.5, che andranno progressivamente a ridursi, anche Chrome non supporta nativamente i webfont fino alla versione 3. O meglio, li supporta, ma dopo un’attivazione da linea di comando. Qualcosa che il nostro utente non farà mai. È annunciato un supporto per la versione 4 stabile, ma al momento non si vedono novità dalle versioni alfa. C‘è però un formato supportato sia da Chrome 0.3 e successivi, sia Opera 9 e successivi, sia da Safari in versione iPhone OS 3.1. Si tratta del formato SVG: in pratica, il nostro font viene ridefinito in questa variante di XML, già standard W3C per la grafica vettoriale.
Con FontForge è possibile fare una conversione da .ttf a .svg del nostro font, eventualmente anche eliminando parte dei glifi non usati per alleggerire il peso del font (operazione chiamata “subsetting”). A quel punto la regola di Paul Irish può essere riscritta come segue:
La chiamata al formato .svg va eseguita referenziando anche l’id del font, che trovate nel tag <font id="lg"> aprendo il file prodotto con un editor di testo. Così abbiamo incluso anche Chrome, Opera9 e Safari mobile nel nostro parco browser, con relativamente poco sforzo (una volta imparata la conversione). Cioè un altro 5-10% di browser a giudicare dalle nostre statistiche. Rimane escluso praticamente solo il 15% per cento che usa una versione inferiore alla 3.5 di Firefox (queste percentuali sono solo indicative e possono cambiare anche di molto a seconda della tipologia di sito).
Va precisato che in prospettiva (da qui in avanti) questa sembra di gran lunga la soluzione migliore, sia per facilità di implementazione, che per ragioni di accessibilità. I problemi tipici dell’image-replacement e della disabilitazione di immagini, css e javascript, vengono infatti risolti automaticamente, perché non c‘è alcuna immagine da generare. Purtroppo non sembra dietro l’angolo la soluzione dei problemi di diritti per le licenze online dei font. Si tratta di capire se questo significherà un aumento dell’utilizzo dei font free, alcuni magari cloni veri e propri di font commerciali più noti, oppure il successo di servizi di Font-as-a-service, o, magari, il diffondersi, come in altri campi, di pratiche di utilizzo diffuso dei font pur in mancanza della licenza.
Alcuni font sono distribuiti con più “pesi”. In teoria via CSS si puòi specificare il peso di un font (dall’ultra-light all’ultra-black) con la proprietà font-weight: 100-900. In realtà questo non avviene, anzi, vi sono discrepanze fastidiose con diversi browser. Potete farvene un’idea più precisa in quest’articolo di Richard Rutter. Sono disponibili altre informazioni su differenze di rendering e di kerning, e un test case su diversi modi di servire il font via css, inclusa la codifica base64.
I problemi di licenza e l’uso del @font-face embedding sono al centro del sito Font Squirrel, che presenta moltissimi font free e già con un kit di formati e le regole CSS pronte per il @font-face embedding.
Se usate font free, cioè se risolvete i problemi di licenza, è possibile anche pensar di usare in contemporanea @font-face e Cufòn, in modo da coprire un maggior numero di browser. Con un check javascript è possibile valutare se il font è disponibile, sia direttamente sul computer dell’utente che tramite scaricamento con @font-face. Ad esempio, questo check andrebbe bene per le versioni di Firefox inferiori alla 3.5. Nel caso il font non risultasse disponibile, né il browser supportasse @font-face, allora si potrebbe passare ad utilizzare Cufòn.
La procedura dettagliata e i file javascript necessari sono disponibili in questo articolo di Kilian Valkhof. Ci sono alcuni effetti collaterali (ad esempio in Explorer, perché Cufòn verrebbe prima applicato e poi sostituito con il @font-face, e le contromosse, che pure esistono, non sono così robuste). Insomma si rischia di complicarsi la vita: dovete valutare valutare voi se il vostro design merita tutto questo lavoro. Dal lato utente, è chiaro che @font-face è la soluzione migliore perché permette selezionabilità del testo e stati :hover sui link. Si tratta di valutare se,
Con l’obsolescenza delle vecchie versioni di Firefox, verrà sempre più usata la tecnica che si basa sul @font-face, usando Cufòn solo come alternativa temporanea. Aprendo a sua volta dei problemi: come evitare che, come nei primi anni del web, si usino font illeggibili, problematici, non nati per il monitor? Come preservare una corretta leggibilità? Il consiglio è di usare font di cui si conoscano le prestazioni di leggibilità (ma ricerche del genere non sono frequenti), o di limitarsi, nell’uso di font anomali, a quelli più leggibili e comunque a caratteri sufficientemente grandi (oltre una certa dimensione, molti font hanno leggibilità paragonabile).
In sintesi:
Gli scenari coperti dalle varie soluzioni, come si vede, sono piuttosto differenti, non sovrapponibili. L’importante è che definiate i vostri obiettivi e valutiate i pro e i contro delle diverse tecniche nel vostro specifico caso.
Il tema di questo articolo è discusso anche nel nostro corso di css design, proposto in-house ad enti e aziende. L’articolo potrebbe venir modificato in seguito alle prime letture per render conto dell’inevitabile evoluzione della materia. Ne daremo conto sul blog.
Precedente:
« Test di usabilità e soddisfazione degli utenti: dati inaffidabili?
Successivo:
L'accessibilità osservata con utenti reali: un'esperienza sul campo »