Search code examples
cssinternet-explorer-8internet-explorer-7font-faceitalic

Custom font sometimes renders in italics in IE8 / IE7


In IE7 and IE8, when using a custom web font, text is sometimes rendered in italics, even when I explicitly set font-style: normal. The issue is sporadic - it will render fine a few times, then I refresh and everything is in italics, then I refresh and it's back to normal.

I'm using this @font-face declaration:

@font-face {
    font-family: 'DIN';
    src: url('fonts/DINWeb.eot');
    src: url('fonts/DINWeb.eot?#iefix') format('embedded-opentype'),
         url('fonts/DINWeb.woff') format('woff');
    font-weight: normal;
    font-style: normal;
}
@font-face {
    font-family: 'DIN';
    src: url('fonts/DINWeb-Bold.eot');
    src: url('fonts/DINWeb-Bold.eot?#iefix') format('embedded-opentype'),
         url('fonts/DINWeb-Bold.woff') format('woff');
    font-weight: bold;
    font-style: normal;
}
@font-face {
    font-family: 'DIN';
    src: url('fonts/DINWeb-Ita.eot');
    src: url('fonts/DINWeb-Ita.eot?#iefix') format('embedded-opentype'),
         url('fonts/DINWeb-Ita.woff') format('woff');
    font-weight: normal;
    font-style: italic;
}
@font-face {
    font-family: 'DIN';
    src: url('fonts/DINWeb-BoldIta.eot');
    src: url('fonts/DINWeb-BoldIta.eot?#iefix') format('embedded-opentype'),
         url('fonts/DINWeb-BoldIta.woff') format('woff');
    font-weight: bold;
    font-style: italic;
}

Theres a comment on this article that indicates it could be about the order of the @font-face declarations: however the only thing that stopped the problem was removing the italic declarations altogether.

Another Stack Overflow answer suggests using the Font Squirrel @font-face generator; I'm not able to do this however as the web font files I'm using have DRM.

Is there a way to solve this without completely removing the italic declarations?

UPDATE: Upon further investigation, it seems this issue affects IE8 as well, not just in compatibility mode.


Solution

  • For each of your @font-face font-family names, create a custom name instead.

    Example:

    @font-face {
        font-family: 'DINnormal';
        src: url('fonts/DINWeb.eot');
        src: url('fonts/DINWeb.eot?#iefix') format('embedded-opentype'),
             url('fonts/DINWeb.woff') format('woff');
        font-weight: normal;
        font-style: normal;
    }
    @font-face {
        font-family: 'DINbold';
        src: url('fonts/DINWeb-Bold.eot');
        src: url('fonts/DINWeb-Bold.eot?#iefix') format('embedded-opentype'),
             url('fonts/DINWeb-Bold.woff') format('woff');
        font-weight: bold;
        font-style: normal;
    }
    @font-face {
        font-family: 'DINitalic';
        src: url('fonts/DINWeb-Ita.eot');
        src: url('fonts/DINWeb-Ita.eot?#iefix') format('embedded-opentype'),
             url('fonts/DINWeb-Ita.woff') format('woff');
        font-weight: normal;
        font-style: italic;
    }
    @font-face {
        font-family: 'DINboldItalic';
        src: url('fonts/DINWeb-BoldIta.eot');
        src: url('fonts/DINWeb-BoldIta.eot?#iefix') format('embedded-opentype'),
             url('fonts/DINWeb-BoldIta.woff') format('woff');
        font-weight: bold;
        font-style: italic;
    }
    

    After those CSS rules are defined, then you can include specific CSS rule:

    li {
      font: 18px/27px 'DINnormal', Arial, sans-serif;
    }