在最近的一次开发中,设计同事说我设置的页面标题字体很粗,想让我调细一些,起初,我以为只是一个很简单的问题,但是调整的时候,发现事情并没有这么简单,于是,写下这篇文章记录踩过的坑。
页面
<div className='box'>
<p className='p1'>The sky reflects the earth, and the sky makes the sound of rain</p>
<p className='p2'>The sky reflects the earth, and the sky makes the sound of rain</p>
<p className='p3'>The sky reflects the earth, and the sky makes the sound of rain</p>
</div>
<div className='box'>
<p className='p1'>映地为天色,飞空作雨声</p>
<p className='p2'>映地为天色,飞空作雨声</p>
<p className='p3'>映地为天色,飞空作雨声</p>
</div>
样式
p {
text-align: left;
font-family: Robot, Arial, Helvetica, PingFangSC, Microsoft Yahei, sans serif;
&.p1 {
font-weight: 100;
}
&.p2 {
font-weight: 400;
}
&.p3 {
font-weight: 700;
}
}
这里,我分别指定了一组中英文的渐进字重文段,然后我们来看看效果
可以明显的看到,英文只展示出了两种字重的样式,而中文展示出了三种字重的情况,这里是因为什么呢,我们来一步一步的说。
font-weight属性决定着文字的粗细程度,值可以为数字或者关键字,常用的大概有以下类型
注意:bolder和lighter没有对应的数字,为什么呢?因为它们俩是相对父元素而言的。 例如:如果父元素设置的是font-weight:200; 子元素我设置为font-weight:bolder; 那么你在浏览器上查看的时候你会发 现最后显示就变成了normal的效果。因为bolder是相对父级元素而言的。同理lighter也是如此。
我们都知道,在 css 中,可以通过 font-family 指定不同的字体,并且可以给定一个先后顺序,由字体名或者字体族名组成。
当指定的的字体找不到的时候,浏览器会按照 font-family 属性指定的先后顺序寻找支持的字体。
在 CSS 中,可以通过 font-weight 属性指定了字体的粗细程度,但是不同字体支持的字重不同,比如说有些字体可能只支持400,700两个权重,如果指定的权重值不可用,浏览器需要靠字重的回退机制去解决。
如果指定的权重值在 400
和 500
之间(包括400
和500
):
500
之间的可用权重;500
的可用权重。如果指定值小于400
如果指定值大于500
了解了这两个模块的知识之后,我们再来看看这个问题
p {
text-align: left;
font-family: Robot, Arial, Helvetica, PingFangSC, Microsoft Yahei, sans serif;
&.p1 {
font-weight: 100;
}
&.p2 {
font-weight: 400;
}
&.p3 {
font-weight: 700;
}
}
这里我指定的一组字体样式,而中文和英文字体的生效情况是不一样的,在chrome浏览器中,英文的字体是Helvetica
生效的,而中文则是Microsoft YaHei
所以它们所支持的字重程度不同,就导致了文章开头出现的问题。
如果浏览器自带的字体无法满足我们的要求,我们可以通过下载字体文件,寻找可以替换的字体,以PingFang SC
来举例
目前PingFang SC
字体族提供了Thin
,Ultralight
,Light
,Regular
,Medium
,Semibold
这 6 种字重的字体。而PingFangSC-Regular
(平方-简 常规体)相当于PingFang SC
字体族下面 400 的字重。
通过@font-face来实现
@font-face {
font-family: 'PingFang SC Regular';
src: url('../assets/fonts/PingFang\ SC\ Regular.ttf');
}
如果更换字体所需要的成本比较大的话,可以试一下使用-webkit-text-stroke
属性来实现
-webkit-text-stroke
CSS属性为文本字符指定了宽 和 颜色 . 它是-webkit-text-stroke-width
(en-US) 和-webkit-text-stroke-color
(en-US)属性的缩写。
可以将-webkit-text-stroke理解为文字的内边距,如果我们想让文字变细,只需要将它的内边距的颜色设置为何背景相同即可,视觉上,文字整体都变得更细了。
html
<p className='p1'>The sky reflects the earth, and the sky makes the sound of rain</p>
<p className='p2'>The sky reflects the earth, and the sky makes the sound of rain</p>
css
p {
text-align: left;
font-family: Robot, Arial, Helvetica, PingFangSC, Microsoft Yahei, sans serif;
&.p1 {
font-weight: 400;
}
&.p2 {
font-weight: 400;
-webkit-text-stroke: 0.6px rgba(23, 39, 64, 0.75);
}
}
最终效果
另外,这个属性的兼容性还不错,大家可以放心使用
感谢你能看到这里,本文通过一个字重的问题,总结了一下相关的知识点,希望对你有所帮助,如果可以的话,看完不妨点个赞再走呀。
参考链接:
https://juejin.cn/post/7005056135279427614#heading-6
https://developer.mozilla.org/zh-CN/docs/Web/CSS/-webkit-text-stroke