一个困扰了很久的问题,服务器会导致的网页默认字体显示不同吗?

2020-06-12 23:09:26 +08:00
 JCZ2MkKb5S8ZX9pq

情况说明

问题

可见问题

  1. 腾讯云 COS 有更精细的字重控制。
  2. 腾讯云的 serif 衬线体 /cursive 手写体 /fantasy,都使用了无衬线体。
  3. snas-serif 无衬线和 monospace 等宽,两边都使用了不同的字体。

猜想原因

问题


附 html 代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="Cache-control" content="no-cache" />
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, minimum-scale=1, maximum-scale=1" />
    <title>qcloud font test</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.slim.min.js"></script>
</head>

<body>
    <div id="host"></div>
    <hr>
</body>
<script type="text/javascript">
ff = ["serif", "sans-serif", "cursive", "fantasy", "monospace"]
text = '字体测试 Font Test'
for (var i in ff) {
    for (var fw = 100; fw <= 900; fw += 100) {
        console.log(ff[i], fw)
        $('body').append('<div style="font:' + fw + ' 12pt/1.5 ' + ff[i] + '">' +
            text + ' [' + fw + ' ' + ff[i] + ']' + '</div>')
    }
    $('body').append('<hr>')
}
$('#host').html(window.location.host)
</script>

</html>

1115 次点击
所在节点    问与答
12 条回复
cydian
2020-06-12 23:33:28 +08:00
cos 设置字体跨域头没?
also24
2020-06-12 23:40:18 +08:00
同楼上疑问,建议打开 Chrome 的控制台,先检查一下 Network 标签内的每一个请求是否一致。
JCZ2MkKb5S8ZX9pq
2020-06-13 00:02:10 +08:00
@cydian 请问字体跨域头是啥?我调用的都是默认字族名称,没有涉及具体字体。
JCZ2MkKb5S8ZX9pq
2020-06-13 00:06:33 +08:00
@also24

诡异的部分就在这里,request header 除了 Host 完全一致。

response 的话。

# 本地
Content-Length: 744
Content-type: text/html
Date: Fri, 12 Jun 2020 16:00:19 GMT
Last-Modified: Sat, 06 Oct 2018 08:55:42 GMT
Server: SimpleHTTP/0.6 Python/3.8.1

# 腾讯云 cos
Accept-Ranges: bytes
Content-Language: zh-CN
Content-Length: 744
Content-Type: text/html
ETag: c????????????????????????????????a
Last-Modified: Sat, 23 Feb 2019 01:09:13 GMT
Server: TencentCOS
x-cos-object-type: normal
x-cos-storage-class: STANDARD

感觉唯一有可能的,也许是 Content-Language 这个部分。
有可能是不同文字对应的默认字体不同。
我加个 meta 试试看哦。
JCZ2MkKb5S8ZX9pq
2020-06-13 00:19:18 +08:00
@also24 定位到了,果然是语言识别的问题。

html 头部加一个 meta
<meta http-equiv="content-language” content=”en-us”>

强制浏览器按指定语言来识别就可以了。腾讯云又自作聪明地加了一个语言信息。
不过的确有点意外,语言会导致默认字体指向不同的字型。
但回想起来,iOS 下系统语言改变,港台使用的繁体字型的确是有细微区别的。
also24
2020-06-13 00:36:40 +08:00
@JCZ2MkKb5S8ZX9pq #5
语言和字体关联还是蛮合理的,不过从你这几个问题来看,腾讯云的 COS 静态网页相关功能,还真是很多小坑啊
cydian
2020-06-13 00:38:21 +08:00
@JCZ2MkKb5S8ZX9pq get 到了。还以为跨域头问题。
JCZ2MkKb5S8ZX9pq
2020-06-13 00:52:20 +08:00
@also24 的确是比较冷门的问题,我刚好是处理英日文比较多。
而且这里一开始没反应过来的还有一个细节,就是英文语言下(左侧),回退到的中文,其实并不是右侧的中文字体。
所以有可能左边回退出来的中文字体,zh-CN 的排序还挺低的,先退到了别的语言字体。
而且从浏览器的检查工具里,好像是没办法定位到部分字符回退后显示的具体字体的,也有点麻烦。
also24
2020-06-13 01:06:11 +08:00
@JCZ2MkKb5S8ZX9pq #8
应该可以查看的吧,你看下 Computed 标签里的 Rendered Fonts

https://i.loli.net/2020/06/13/lyYn3q2JxGWIsdc.png
JCZ2MkKb5S8ZX9pq
2020-06-13 01:07:00 +08:00
想起一个事情补充一下。

我记得 iOS 的语言喜好顺序是会影响字体回退顺序的,有一段时间用日文系统,会出现汉字大小磅数不一的情况。

目前使用的 Preferred Language Order 是:
英文
简中
繁中
日本语

日常访问繁体和日文视觉上问题不大。
JCZ2MkKb5S8ZX9pq
2020-06-13 01:15:44 +08:00
@also24 嗯,如果是英汉那还比较容易猜。
但特殊情况下,比如我面对日汉字,就挺麻烦。

说到日汉字,以前写过一个小东西涉及古文,希望在 iOS 显示宋体,调用系统默认的日文明朝,然后单独再写了个 python 去查 glyphs 会不会缺。另外日汉字还涉及到不同简化字型的替代字问题,基本要换成长得差不多,中国人也能认出来的异体字。
also24
2020-06-13 11:42:50 +08:00
@JCZ2MkKb5S8ZX9pq #11
嗯,更具体的我就不太了解了,我试了一下中英文字体的混合并回退的情况,会展示出两种字体。
不清楚你是否是想要看到具体的每一个字所回退的情况,这样的功能似乎确实没有。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/681117

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX