惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
Apple Machine Learning Research
Apple Machine Learning Research
Hugging Face - Blog
Hugging Face - Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
B
Blog
月光博客
月光博客
博客园 - 【当耐特】
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Jina AI
Jina AI
博客园 - Franky
MyScale Blog
MyScale Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Last Week in AI
Last Week in AI
B
Blog RSS Feed
H
Help Net Security

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活
ascent-override descent-override line-gap-override一锅端 ...
张鑫旭,zhangxinxu · 2022-03-21 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=10319 鑫空间-鑫生活
本文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可以联系授权。

破茧成蝶

ascent-overridedescent-overrideline-gap-override这 3 个 CSS 属性作用都是类似的,都是在 @font-face 自定义字体中设置文字的上、中或下间隙大小。

由于兼容性一致,作用类似,使用场景也一致,因此,放在一起介绍。

一、作用说明

简单来说:

ascent-overridedescent-override用来重置字体中内置的上悬线和下悬线的位置。

字体基础知识

vertical-align属性支持 top/baseline/bottom 这 3 个值,这个很多人知道,实际上,ascentdescent 也是文字垂直对齐中非常重要的两条线。

参见下面的示意图:

字体中的各种线

表示英文字母(包括大写)图形的上下边缘线位置。

如果大家对 SVG 字体了解,就可以看到其字体面的描述中有 ascentdescent 这两项,如下截图示意:

ascent和descent示意

<font-face 
  font-family="ZxxHeiTi"  
  font-weight="400"   
  font-stretch="normal"    
  units-per-em="1000"
  ascent="1240" 
  descent="-334" 
/>

ascent-overridedescent-override属性就是用来重置字体内部的 ascentdescent 的。

line-gap-override作用

如果大家认真读过 《CSS世界》,就应该知道 line-height:normal 这个 CSS 声明很有故事,当行高为 normal 的时候,最终的行高大小是由字体决定的。

例如下面我手机拍的照片,其中微软雅黑字体和宋体下的行高计算值就是不一样的。

normal不同字体下的行高计算值

line-gap-override 属性的作用是重置这个字体内部设定的行间隙(可以近似理解为行高)。

二、功能演示

上面介绍了几个属性的作用,下面看下真实的表现效果,这几个 CSS 属性都需要在 @font-face 声明中才有效,例如:

@font-face {
    font-family: ascentFont;
    src: local('PingFang SC'),
         local('Microsoft Yahei');
    ascent-override: 100%;
    descent-override: 0%;
    line-gap-override: 80%;
}

为了方便大家直观体验效果,我专门做个个演示页面,您可以狠狠地点击这里:CSS ascent-override descent-override line-gap-override基本效果demo

各个属性表现如下 GIF 截屏示意:

1. ascent-override

ascent 是设置上悬线的位置,默认是 100%,范围从 0%-∞,值越大,文字越下沉,这个很好理解,上悬线的位置大了之后,文字的文字自然就靠下了。

上悬线位置重置示意图

2. descent-override

descent 是设置下悬线位置,由于不支持负值,且一般字体内部的 descent 都是负值,因此,初始值可以看成是 0%,值越大,文字的位置越高。例如下面 GIF,所以滑杆移动到右侧,文字所在的垂直位置明显变高。

下悬线效果示意

3. line-gap-override

line-gap-override 设置要想生效,则对应字体所在的 lien-height 属性值必须是 normal,无论是数值,长度值还是百分比值都会让 line-gap-override 属性没有效果。

line-gap-override 不支持负值,因此,只能让行高变高,而不能减少。

行间隙重置

三、应用场景

在某些 Android 设备下,或者使用某些自定义字体或图标的时候,文字或者图形总是没法垂直居中,无论是 Flex 布局的 align-items:center ,还是 line-height 设置都不行,则多半是这个字体内部的上悬线或者下悬线位置不太对。

此时可以使用本文提供的这几个属性进行重定义进行修复。

我想,这就是这几个 CSS 属性设计的意义所在。

不过,有点遗憾的是,目前 Safari 浏览器还没有对其进行支持。

兼容性示意

在 JS 中使用

另外,ascent-overridedescent-override等属性也是可以在 JavaScript 代码中使用的,使用全局的 FontFace 对象接口,下面是一段代码示意,适合不太喜欢 CSS 的开发小伙伴:

let fontFace = new FontFace('Roboto', 'url(./roboto.woff2)', {
  'descentOverride': '90%'
});
console.log(fontFace.descentOverride); // 90%
fontFace.descentOverride = 'normal';
console.log(fontFace.descentOverride); // 'normal'

四、结尾的絮叨

最近小区被封了,一切从严,很久没出门了,其实我觉得吧……

写了很多,又删了,算了……好好写代码。

今天看新闻,发生了空难,整个人心情都不好了,刚开始刷到的时候还没确认,希望是小故障,没想到……

……又删了,算了……好好写代码。

做好自己,发光发热。

本文为原创文章,欢迎分享,勿全文转载,如果实在喜欢,可收藏,永不过期,且会及时更新知识点及修正错误,阅读体验也更好。
本文地址:https://www.zhangxinxu.com/wordpress/?p=10319

(本篇完)