Re: [css-fonts] Why not allow redefining generic font families by @font-face?

Hi Duan Yao,

There are a few basic problems with allowing @font-face rules to
redefine generic font families. The first is that generic font
families, as you point out, often vary by language/script. That
makes trying to override them via @font-face rules problematic. The
second thing to point out is that an @font-face rule defines a
single *face* within a family, not a family. So using @font-face as
a way of aliasing one *family* to another also doesn't work very
well.

I think some of the things you've pointed out are simply browser
settings that should be updated/improved. Part of the problem with
generics is that for many scripts it can be difficult to find fonts
available on all versions of Windows, so sometimes the settings are
set to pick up the lowest common denominator fonts across Windows
versions.

I'll file a bug on SimSum being used for sans-serif, for Firefox I
think we can do better. It's interesting to note here also that the
local Firefox communities in Taiwan and Hong Kong requested that the
default generic fonts be set to Latin fonts so that Latin text
appeared in those fonts while Chinese would appear in the default
font for Chinese via fallback. This is not ideal at all but as
platforms provide better CJK font support (e.g. with font families
such as Source Sans Han) I think this sort of hacked solution won't
be needed.

Regards,

John Daggett
Mozilla Japan


----- Original Message -----
From: "duanyao" <duanyao@ustc.edu>
To: "www-style list" <www-style@w3.org>
Sent: Friday, November 14, 2014 1:25:53 PM
Subject: [css-fonts] Why not allow redefining generic font families by @font-face?

Hi all,

@font-face rule allow us to define any font families, except "generic
font families", e.g. sans-serif and serif. However, there are use cases
that redefining generic font families are very helpful:

* Some UAs/OSs are missing certain generic font families. For example
android only has serif fonts for western languages, but not for east
asia languages. We want to provide a downloadable CJK serif font
(SimSun.otf) to compensate this issue:
@font-face {
font-family: "serif";
src: local("SimSun"),
url("http://mysite.net/SimSun.otf");
unicode-range: U+FF-FFFFFF;
}

* Some UAs have mis-configured generic font families. For example,
firefox on windows assigns "SimSun" font to both serif and sans-serif
families for zh-CN locale by default. But "SimSun" is actually a serif
font, so we want to reset sans-serif to "HeiTi", a real sans font for
Chinese:
@font-face {
font-family: "sans-serif";
src: local("HeiTi");
unicode-range: U+FF-FFFFFF;
}

* Some UAs don't use different underlying fonts for different languages
if generic font families are used. For example, some UAs for zh-CN
locale use CJK fonts for both western and CJK texts, which makes western
texts look not good. We want to re-confiure this:
@font-face {
font-family: "sans-serif";
/* CJK fonts */
src: local("Droid Sans"), /* android, linux*/
local("HeiTi"); /* win */
}
@font-face {
font-family: "sans-serif";
src: local("Roboto"), /* android */
local("Arial"); /* win */
unicode-range: U+0-FF;
}

However, with current spec (http://dev.w3.org/csswg/css-fonts/) we can't
redefine generic font families, so we have to specify customized font
families:
@font-face {
font-family: "my-sans-serif";
src: local("HeiTi");
unicode-range: U+FF-FFFFFF;
}

Customized font families work, but can be inconvenient, because we have
to change existing generic font families in all existing css files. For
user-generated contents, it is hard to ensure our customized font
families are used instead of generic font families. If redefining
generic font families would be possible, we could put these `@font-face`
rules into normalize.css/reset.css, and the whole site is beautified
suddenly!

So I wonder are there particular reasons to not allow redefining generic
font families?

Regards,
Duan Yao.

Received on Friday, 14 November 2014 05:08:12 UTC