Search code examples
windows-xpfont-facesifrcufonwebfonts

Well rendered webfont solution


The challenge:

Provide dynamic web fonts that render acceptably across all major browsers, devices and Operating Systems

The story:

So I had used cufon or sifr in the past and had since abandoned both in favor of @font-face. After using @font-face in production for some time, I made a horrifying discovery. Many fonts (most?) look like crap in Windows XP, regardless of browser. Even in google chrome, XP renders the fonts unacceptably jagged and ugly.

I am aware of why this is happening. After reading many excellent posts on ye olde stack overflow, I understand the issue is NOT of font hinting, but of XP having clear-type set to off be default. So ALL fonts are jagged in XP by default regardless of application.

So... if @font-face works great everywhere BUT XP with clear-type off, and is still superior to cufon what should we be doing?

Possible solutions:

  • @font-face as default, Cufon with user agent sniffing for windows XP. (currently using, and very much not loving it)
  • @font-face alone with yet unknown method of forcing clear-type
  • Cufon alone :(
  • Another paradigm all together

Failed solutions:

  • Adobe Typekit (jagged in XP on their own website!, even though they show a smooth specimen jpeg)
  • Google Webfonts (same problem with XP)
  • @font-face alone (same problem with XP)

Cufon so far works everywhere, but just sucks, and offers additional challenges if you are animating anything, or wish to update the text after the fact.

Do you have a solution that works completely cross browser and cross OS? What is the best way to handle this?


Solution

  • I'm pretty sure the web-fonts, which look ugly, are missing some hinting (edit: Nope, even though hinting is still required to make a font look good on windows, the real problem here was the disabled ClearType in XP. However, this answer has a solution anyway).

    Unlike font renderers on other operating systems the windows engine relies on hinting information shipped with the font. If the hinting is missing, bad or broken the font will look ugly - simple as that. Luckly there's a way to add some automatically generated hinting to a ttf-font using ttfautohint. After adding the hinting you can generate the different web-font-formats (eof, woff, etc) you need from the enhanced TTF. Additionally you should try to use SVG fonts if font-smoothing is disabled, since they are always rendered with antialiasing.

    I've written an article on how to create web-fonts on Pixels|Bytes, which explains how to add hinting to a font and how to use my Font Smoothie script to enable SVG fonts when necessary. Hope this helps :)

    PS: I'm aware that linking to my own blog won't be appreciated here, but I think my post describes a good solution to the problem, so I posted it anyway. Please leave a comment if you want me to remove the link and I'll do so.