首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >W3C CSS验证器在@字体面unicode范围上出现错误。

W3C CSS验证器在@字体面unicode范围上出现错误。
EN

Stack Overflow用户
提问于 2021-10-24 13:27:57
回答 1查看 569关注 0票数 1

从几天前开始,W3C CSS验证器开始变得更加严格,并开始在这种类型的CSS3实现上出现错误(这种类型的CSS3文件随处可见,例如被Google字体使用):

代码语言:javascript
复制
/* vietnamese */
@font-face {
  font-family: 'Nunito';
  font-style: normal;
  font-weight: 400;
  src: local('Nunito Regular'), local('Nunito-Regular'), url("fonts/XRXV3I6Li01BKofIOuaBXso.woff2") format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
  font-display: fallback;
}
/* latin-ext */
@font-face {
  font-family: 'Nunito';
  font-style: normal;
  font-weight: 400;
  src: local('Nunito Regular'), local('Nunito-Regular'), url("fonts/XRXV3I6Li01BKofIO-aBXso.woff2") format('woff2');
  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
  font-display: fallback;
}
/* latin */
@font-face {
  font-family: 'Nunito';
  font-style: normal;
  font-weight: 400;
  src: local('Nunito Regular'), local('Nunito-Regular'), url("fonts/XRXV3I6Li01BKofINeaB.woff2") format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  font-display: fallback;
}
/* vietnamese */
@font-face {
  font-family: 'Nunito';
  font-style: normal;
  font-weight: 700;
  src: local('Nunito Bold'), local('Nunito-Bold'), url("fonts/XRXW3I6Li01BKofAjsOUbuvISTs.woff2") format('woff2');
  unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
  font-display: fallback;
}
/* latin-ext */
@font-face {
  font-family: 'Nunito';
  font-style: normal;
  font-weight: 700;
  src: local('Nunito Bold'), local('Nunito-Bold'), url("fonts/XRXW3I6Li01BKofAjsOUb-vISTs.woff2") format('woff2');
  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
  font-display: fallback;
}
/* latin */
@font-face {
  font-family: 'Nunito';
  font-style: normal;
  font-weight: 700;
  src: local('Nunito Bold'), local('Nunito-Bold'), url("fonts/XRXW3I6Li01BKofAjsOUYevI.woff2") format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  font-display: fallback;
}

unicode-range上出现以下错误:Too many values or values are not recognized

显然,许多开发人员对其字体使用了具有多个值和倍数范围的unicode范围,因为MDN说没问题显然不是,因为根据W3C文档,unicode-range语法是:

代码语言:javascript
复制
unicode-range: single codepoint | codepoint range | wildcard range | initial | inherit;

也就是说,显然许多范围是不可能的。

如何解决这个问题?

这似乎是W3C的一种非常严格的方法,因为许多浏览器支持多个范围,而且它确实节省了带宽,因为它允许更灵活地下载字体文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-25 16:39:41

这是验证器的一个缺陷。

CSS字体规范将属性定义为

代码语言:javascript
复制
Value: <urange>#

<urange>中的任何一个

单码点(例如U+416)一个Unicode码点,表示为1到6个十六进制数字间隔范围(例如U+400-4ff),表示为两个连字符分隔的Unicode码点,指示范围通配符范围的包容性开始和结束码点(例如,U+4?)由尾随“?”时隐含的代码点集定义。字符表示任何十六进制数字

#的意思是

..。前面的类型、单词或组发生一次或多次,用逗号分隔(可以选择用空格和/或注释包围)。

规范以散文强调了这一正式定义:

这个描述符定义了一组Unicode代码点,这些代码点可以由声明它的字体面板支持。描述符值是以逗号分隔的Unicode range ()值列表。

它还提供了一些例子。实例30特别有用:

代码语言:javascript
复制
@font-face {
  font-family: STIXGeneral;
  src: local(STIXGeneral), url(/stixfonts/STIXGeneral.otf);
  unicode-range: U+000-49F, U+2000-27FF, U+2900-2BFF, U+1D400-1D7FF;
}

如果将其提交给CSS验证器,它将报告相同的错误。由于规范是权威的,验证器必须出错。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69697222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档