主にウェブフォントの利用やフォントの合成を行う時に使う@font-face
ルールはまれに他のAt規則にネストされる。@media
や@supports
ルールを使って条件付きでフォントを変えたいことがあるからだ。しかしEdge 15ではそうやってネストされた@font-face
ルールで作られたフォントを参照できない。
ネストされているかどうかだけが問題になるようで、以下のようなほぼ無意味な@supports
ルールでも表面化する。
@supports (top: 0) {
@font-face {
font-family: "Foo";
src: url("https://example.com/woff2/foo.woff2") format("woff2");
}
}
body {
font-family: Foo, sans-serif;
}
もうちょっと複雑にしたこのようなコードを含むウェブページで挙動を確認できる。Firefox 57、Chrome 63、Mobile Safari 11ではFooを参照できるが、Edge 15では参照できずsans-serif
になってしまう。
@media
や@supports
ルールと他のCSSコードのネストに関しては、 CSS Conditional Rules Module Level 3に定められている。これによると条件節以降であるgroup_rule_body
は{}
とnested_statement
だけを持つ。そしてこのnested_statement
にはfont_face_rule
が含まれる。つまりネストできるので、無効になるEdge 15の挙動はバグだろう。
ほぼ同じ内容の放置されたイシューにはコメントしておいた(なぜかAnonymousになった)。Won’t Fixとなっており直りそうもない。