如何优雅地解决平台字体适应问题

简介: 对于一套好看舒适的前端设计方案,风格统一是基本要求,其中必然包括字体的统一。

2.png


前言


对于一套好看舒适的前端设计方案,风格统一是基本要求,其中必然包括字体的统一。

由于国产化进程的不断推进,冒出了不少基于 Linux 的国产操作系统,这就导致我们平时在 windows 上使用得好好的字体,在这些国产操作系统上就失效了,其原因是这些操作系统上没有安装对应的字体。


在这里,我就记录一下最近解决字体问题的一次过程。


现象


某客户在某国产系统上运行我们的项目时,脚本编辑器中出现了光标错位的问题。


分析


我们的项目中用到了 ace_editor 脚本编辑器,通过阅读源码得知,它在计算光标位置时,依靠的是字体宽度,这就要求必须使用等宽字体才行,否则,会因计算位置错误而引起光标错位。


引起上述现象的原因,说白了就是客户所使用的的操作系统中,没有安装我们项目脚本编辑器所需要的字体。


CSS 字体知识


熟悉 CSS 的同学应该都知道,我们可以通过 CSS 引入字体文件并定义字体名称,比如:


// font.css
/* 定义字体名称、引入等宽字体文件 */
@font-face {
    font-family: "bianchengsanmei";
    src: url("./font/bianchengsanmei.ttf");
}
/* 使用字体 */
.div{
    font-family: "bianchengsanmei";
    font-size: 14px;
    font-weight: normal;
}


解决方案


针对上述问题,我们的解决方案包括以下步骤:


第一步:在网上下载等宽字体文件,在这里我们选择的是 JetBrainsMono 字体;


第二步:挑选合适的字体文件,本文中选择的是 JetBrainsMono-Regular.ttf  :


1.png


第三步:将 JetBrainsMono-Regular.ttf 拷贝至 ./css/font/ 路径下,并在 CSS 文件中引入和使用:


// ./css/font.css
/* 定义字体名称、引入等宽字体文件 */
@font-face {
    font-family: "JetBrainsMono-Regular";
    src: url("./font/JetBrainsMono-Regular.ttf");
}
/* 使用字体 */
.div{
    font-family: "JetBrainsMono-Regular";
    font-size: 14px;
    font-weight: normal;
}


结果


刷新页面后,重新测试,发现脚本编辑器中的字体显示为等宽字体,且光标位置也显示正常,问题得到解决。


总结


以上的解决方案应该是最常见最普遍的字体问题解决方案,以后遇到类似的问题都可以参考这个解决。


~ 本文完,感谢阅读!


学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!



相关文章
|
存储 自然语言处理 测试技术
玩出新花样,给你5个Go语言词频统计扩展练习
玩出新花样,给你5个Go语言词频统计扩展练习
202 0
|
机器学习/深度学习 人工智能 搜索推荐
语音识别技术的现状与未来展望
【6月更文挑战第15天】**语音识别技术现状与未来:** 随AI发展,语音识别精度与速度大幅提升,应用广泛,从手机助手到智能家居。深度学习驱动技术进步,跨语言及多模态交互成为新趋势。未来,精度、鲁棒性将增强,深度学习将进一步融合,个性化和情感化交互将提升用户体验。跨领域融合与生态共建将推动技术普及,为各行业带来更多智能解决方案。但同时也需关注技术伦理和社会影响。
|
10月前
|
安全 物联网 物联网安全
智能物联网安全:物联网设备的防护策略与最佳实践
【10月更文挑战第26天】随着物联网(IoT)技术的快速发展,智能设备已广泛应用于智能家居、工业控制和智慧城市等领域。然而,设备数量的激增也带来了严重的安全问题,如黑客攻击、数据泄露和恶意控制,对个人隐私、企业运营和国家安全构成威胁。因此,加强物联网设备的安全防护至关重要。
472 7
|
11月前
|
前端开发 JavaScript
深入理解前端状态管理:React、Redux 和 MobX
【10月更文挑战第7天】深入理解前端状态管理:React、Redux 和 MobX
353 0
|
机器学习/深度学习 人工智能 算法
在对齐 AI 时,为什么在线方法总是优于离线方法?
【5月更文挑战第28天】在线AI对齐优于离线方法的原因在于其能更好地捕捉人类反馈的细微差别,通过多样化和相关的数据生成。尽管离线方法效率高、可利用大规模数据,但其数据集可能无法全面反映实际应用场景。研究强调在线采样的关键作用,但也指出离线对齐的效率和泛化优势。[查看论文](https://arxiv.org/abs/2405.08448)以获取详细信息。
210 2
|
XML 存储 前端开发
【Web 前端】HTML、XHTML、XML 有什么区别?
【4月更文挑战第22天】【Web 前端】HTML、XHTML、XML 有什么区别?
|
Java 关系型数据库 MySQL
Eclipse中出现javax.servlet.ServletException: javax.servlet.jsp.JspTagException: ...500问题
Eclipse中出现javax.servlet.ServletException: javax.servlet.jsp.JspTagException: ...500问题
982 0
Eclipse中出现javax.servlet.ServletException: javax.servlet.jsp.JspTagException: ...500问题
|
存储 缓存 NoSQL
Linux内存性能优化总结,让你的系统更加高效!(下)
Linux内存性能优化总结,让你的系统更加高效!
|
Prometheus 监控 Cloud Native
Prometheus: ansible+consul自动发现,监控服务器
Prometheus: ansible+consul自动发现,监控服务器
857 0
|
算法
MATLAB | 插值算法 | 二维griddata插值法 | 附数据和出图代码 | 直接上手
MATLAB | 插值算法 | 二维griddata插值法 | 附数据和出图代码 | 直接上手
1222 0