Typeface.js – Embedda fonter på dina webbsidor
23 Dec 2008
Övrigt
Ett av de största begräsningarna i webbläsare sedan dag ett har varit typsnitt. Man har varit begränsad till ett mindre antal fonter som fungerar i samliga webbläsare. Man kan ju tycka att det vid det här laget borde finnas metoder för att embedda fonter i webbsidor men så är icke fallet. Det finns olika typer av work arounds till detta problem. Den vanligaste är att använda Flash för att rendera fonter i rubriker genom plugins som t.ex. WordPress Flash Titles. Ett annat alternativ är att använda serverside script som genererar GIF-bilder för rubriker. Jag förespråkar den senare då den belastar klienten minst men det kan vara lite bökigt att uppnå. Flash är betydlig enklare men båda har sina nackdelar. Framför allt är väl problemet Google-optimering. Texter som är genererade av flash är svåra att indexera och även om man lyckas är det långt ifrån optimala lösningar som luktar lite för mycket fulhack.
Just där för är Typface.js ett av de intressantaste kodbiblioteken som släppts på mycket länge. Det använder sig av Canvas-klasserna för att rita ut pixelgrafik genom Javascript. Detta fungerar numera i de flesta webbläsare. Och genom att först konvertera TrueType-fonter till kurvor i en Javascript-fil kan man rita upp vilka fonter som helst i canvasytor. Detta görs som vanligt genom CSS och sedan körs bara ett script som byter ut alla element med klassen: typeface-js. Man CSS-style’ar bara html-koden som vanligt och sedan lägger man in en script-fil och font-scriptfil och sätter helt enkelt bara font-family enligt nedan.
<script type="text/javascript" src="typeface-0.11.js"></script> <script type="text/javascript" src="helvetica_regular.typeface.js"></script> <div class="myclass typeface-js" style="font-family: Helvetiker"> Text here in Helvetiker font... </div>
Det enda kruxet med det här tillvägagångssättet är hur man konverterar TrueType-fonter till Javascript-kurvor. På Typeface-sidan finns ett verktyg för att göra just detta men de allra flesta kommersiella fonter är kodade med ett attribut som säger att de just inte får embeddas. Jag är inte säker på juridiken här men OM man faktiskt har köpt fonten kan jag tycka att man borde få embedda den på webbsidor. Så för att ändå konvertera fonten kan du ladda ned programmet Font Creator från High Logic. Genom att öppna fonten i det programmet kan du gå in i menyn på: Format -> Settings ->General -> Font Embedding och där klicka bort alla boxar. Sedan sparar du ned fonten och laddar upp den igen på Typeface-sidan. Då kan du konvertera fonten och lägga in den på din sida.
Exempel:

december 26th, 2008 kl 1:47 e m
Det är väl snarare tvärt om när det gäller Google-indexeringen. Flashlösningen ändrar ju i DOM:en på klientsidan, så Google-spindeln ser ju bara en vanlig h2:a eller div. Däremot om man genererar gifar server side lägger man ju oftast in bilderna direkt i html-koden och då blir det inte indexerad text. Det går ju visserligen att göra en kombination av javascript och backend, men då blir det ännu krångligare.
Det enda (förutom den jobbiga konverteringen) problemet jag ser med Typeface.js är att det inte går att markera texten ordentligt.
december 26th, 2008 kl 2:20 e m
Du det har du iofs rätt i om man lägger upp det på det sättet. WP-pluginen till WordPress utgår dock från att man lägger in ett javascript som skriver ut en flash snarare än att den ändrar DOM-trädet men det finns kanske flera plugins. Och vad gäller bilder så stämmer det ju helt och fullt.
december 27th, 2008 kl 4:20 e m
Ja, alltså det där med extra pixlar här och där låter inte kul ur en designers synvinkel. Sen saknar jag den fina sub-pixelrenderingen som vi får med dagens plattskärmar. Hoppas på officiellt stöd iomed css3… Alla ”fulhack” luktar lite reklambyrå som bara MÅSTE ha corporatefonten
mars 9th, 2009 kl 6:46 e m
Installerade detta tidigare idag och såg din post om det nu. Problemet med inbäddningen är ju att det möjliggör för andra att stjäla typsnittet, som nu t.ex. har jag snott ditt javascript med det konverterade helvetica. Tack för det, nu slapp jag göra det själv