不同操作系统、不同浏览器下的默认字体是不同的,在网页项目中可以通过CSS的font-family和@font-face来让页面渲染出适合当前网页的字体。
除了特定设置,正确的字体引用会避免两种字形同时出现:
中西文的字重不统一:
内容概览
01#关于font-family属性
02#常见的网页字体
03#一些常见网站的字体设置
04#如何在网页项目中显示特定的字体
05#CSS引用不可商用的字体会造成侵权吗
06#为什么中西文的字重不统一
07#字体网站推荐
字体的fallback机制
在CSS中,可以通过font-family引用多种系列、多种字体,并且可以对字体先后顺序进行设置。
当用户打开一个网页的时候,浏览就会读取font-family第一个引用的字体,并去检索用户当前操作系统下的字体,如有就显示,如没有就检索下一个,以此类推。
若浏览器找不到指定的字体,或者没有设置font-family则会fallback到浏览器的默认字体。
字体的先后顺序设置
由于中文字体内都包含西文字体,如想优先显示效果较好的西文字体,需要将西文字体写在中文字体的前面。
虽然用户群体中使用Windows系统较多,但Mac用户大部分会下载Office,所以会存在许多Windows下常见的字体,比如微软雅黑。将macOS系统的字体写在Windows的前面,可以保证在对应平台显示更好的效果。
先了解serif(衬线体)与sans-serif(无衬线体)
衬线体与无衬线体是两种最基础的字形分类,衬线体在笔画开始与末端的地方有像小三角的装饰。
衬线体更多使用在印刷品上,在纸张上有棱角的字体更容易被识别。而在屏幕显示中字体过多的装饰点缀容易造成视觉疲劳,所以在屏幕显示中更多使用无衬线体。
一些常见常用的字体:
system-ui
一种通用字体系列,它会选择当前操作系统的默认字体渲染。如在macOS与iOS系统里system-ui指向的中文字体为苹方,西文字体为.SFNS。
-apple-system
system-ui的兼容写法,在macOS与iOS系统里调用苹果系统的默认字体。
BlinkMacSystemFont
为macOSChrome里调用苹果系统的默认字体。
Arial
无衬线西文字体,经常与Helvetica一起出现,支持不同操作系统、不同浏览器,兼容性好,属于安全字体。
Tahoma
无衬线西文字体,经常出现,支持不同操作系统、不同浏览器,兼容性好,属于安全字体。
Helvetica/HelveticaNeue
苹果生态中最常用的无衬线西文字体,HelveticaNeue是Helvetica的升级版,加了不同粗细、不同宽度的字形。
SegoeUI
无衬线西文字体,Windows系统的默认西文字体。
Roboto
无衬线西文字体,Android系统的默认西文字体。
苹方
无衬线中文字体,苹果系统的默认中文字体,除了中文简体(PingFangSC),还有台湾繁体(PingFangTC)和香港繁体(PingFangHK)。
HiraginoSansGB(冬青黑体)
无衬线中文字体,用于兼容不支持苹方的旧版苹果系统,作为苹方字体的fallback。
MicrosoftYaHei(微软雅黑)
无衬线中文字体,Windows系统的默认中文字体,iOS与Android系统不支持微软雅黑。
NotoSans(思源黑体)
无衬线中文字体,Android系统的默认中文字体,由Google与Adobe推出的开源字体。除了中文简体(NotoSansCJKSC),还有中文繁体(SansCJKTC)。
WenQuanYiMicroHei(文泉驿微米黑)
无衬线中文字体,Linux系统的默认中文字体,用于兼容Linux系统。
Simsun(宋体)
衬线中文字体,风格明显,支持Windows与macOS系统。
sans-serif
一种无衬线字体系列,常见的兜底字体,在前面所有引用的字体都找不到时会生效,显示当前浏览器默认的无衬线字体。
怎么查看网页项目的引用字体
打开浏览器的检查,用选中功能点击要查看的文字:
即可看到字体堆栈,以及当前生效的字体。
当选中的文本包含中文和西文时,即可看到当前生效的中西文字体。
如图,由于在第一位的-apple-system生效,所以当前中文字体为PingFangSC,西文字体为.SFNS。
爱奇艺
由于将苹方写在最前面,因此西文字体也是苹方自带的西文,所以写在后面的Helvetica没有生效。
有些会在网页中显示特定字体:
腾讯官网
TencentSans
OPPO官网
OPPOSans
会发现在RenderedFonts中显示TencentSans和OPPOSans为Networkresource,不同于知乎和爱奇艺渲染出的字体为Localfile。
因为特定字体除非用户主动下载安装,并不能确保存在于所有用户的电脑内,仅仅用font-family引用,未安装字体的电脑都无法渲染出来。
方法一:
将需要使用的字体文件下载后放在服务器上,用@font-face将字体文件作为一个资源应用到CSS文件。
为了兼容不同浏览器需要准备多种字体格式文件,字体格式文件与浏览器的兼容情况:
.ttf/.otf
Firefox3.5+,Chrome4+,Safari3+,Opera10+,iOSSafari4.2+。
.woff
IE9+,Firefox3.5+,Chrome6+,Safari3.6+,Opera11.1+。
.eot
IE4+专用。
.svg
主要针对Safari做兼容。
方法二:
谷歌提供了一个网站GoogleFonts可以下载、或者链接字体资源库。
方法三:
有种技术可以将网站用到的文字按需截取并生成.ttf.eot.woff.svg四种能支持所有浏览器的字体格式文件,将字体体积优化到最小。也有第三方网站支持,比如有字库网站只要提交需要使用的字体,或者提供一段js代码即可实现。
方法四:
如果项目中只是少量地方使用特殊字体,可以考虑切图,导出.svg格式(比.png更清晰)导出前,将文本轮廓化,使文字变成形状,不然可能会导致svg内部字体失效,如下图:
设定字体字重的属性font-weight的值可以使用短语或者数字(权重级别),短语有效值为normal和bold,数字的有效值为100-900。
短语的normal对应数字的400,也就是设计软件中常见到的“常规体“,bold对应700。
浏览器在渲染字体的时候,会从字体中找到对应的权重级别进行渲染,但并不是每个字体都有100-900的权重级别,有些字体只提供normal和bold两种字重,就拿常见的Arial和NotoSans(思源黑体)中西文混合举例:
上图看起来西文字体会比中文字体更粗一些,在设计软件内设置字体为“中粗体”,那么font-weight的值就为500。
由于西文Arial只有normal和bold两种字重,500的权重级别大于了normal对应的400,所以显示了bold(700),而NotoSans(思源黑体)字体提供了对应500的中粗体,因此出现了中西文字体的字重不统一。