最新要闻
- 官旗大促:鸿星尔克梭织速干运动短裤 限时49元
- 热点聚焦:450块都不到!AMD最便宜新U锐龙3 5100来了:极致性价比
- 新机型恐怕还要等:发售七年后Switch销量再创新高 每日看点
- 钢铁侠同款!全新奥迪纯电轿跑e-tron GT限量发售 109.98万起
- 欢乐颂3酒店问题(欢乐颂3酒店取景地)
- 红魔大黄蜂超能版全家桶来了:手机、键鼠全定制
- 21年前清华学生硫酸泼熊 现已是中科院副研究员:程序合规
- 深圳一辆私家车开上火车站台 路人惊叹 官方回应
- 每日讯息!RTX 4090频繁烧毁!英伟达在4070上用改良接口 16针接口要淘汰了
- 1080P光追利器!索泰RTX 4060 X-GAMING OC欧泊白图赏
- 焦点速看:昆导确认:十部电影上限降至《杀死比尔3》无望
- 满血版骁龙8+《原神》满帧无压力!红魔电竞平板发布|焦点日报
- 突然!腾讯音频App企鹅FM宣布停运:上线刚8年 环球短讯
- 【世界新要闻】通吃全平台!红魔Dao TWS氘锋耳机上市:1499元起
- 天天微资讯!几百块的激光打印机堪用吗?实测后心里有数了
- 红魔魔境49寸QD-OLED电竞显示器发布:240Hz超高刷新率-全球热议
手机
光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
- 搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 视点!美国首位女总统即将诞生?拜登恐怕要提前下岗,美政坛迎来变局?
- 当前速递!用理想仪器实现更好的颗粒 德国新帕泰克亮相CPHI & PMEC China获好评
- 微粒贷怎么申请开通 开通方法如下
- 焦点简讯:心疼!这位40岁的云南缉毒警,已是满头白发
家电
记录--什么!一个项目给了8个字体包???|头条焦点
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助
遇到的问题
在一个新项目中,设计统一了项目中所有的字体,并提供了字体包。在项目中需要按需引入这些字体包。
首先,字体包的使用分为了以下几种情况:
- 无特殊要求的语言使用字体A,阿拉伯语言使用字体B;
- 加粗、中等、常规、偏细四种样式,AB两种字体分别对应使用
Bold
、Medium
、Regular
、Thin
四种字体包;
所以,我现在桌面上摆着 8 个字体包:
(资料图)
A-Bold.tff
A-Medium.tff
A-Regular.tff
A-Thin.tff
B-Bold.tff
B-Medium.tff
B-Regular.tff
B-Thin.tff
不同语言要使用不同的字体包,不同粗细也要使用不同的字体包!
还有一个前提是,设计给的设计图都是以字体A为准,所以在 Figma 中复制出来的 CSS 代码中字体名称都是A。
刚接到这个需求时还是比较懵的,一时想不出来怎么样才能以最少的逻辑判断、最少的文件下载、最少的代码改动去实现在不同情况下自动的去选择对应的字体包。
因为要涉及到语言的判断,最先想到的还是通过 JS,然后去添加相应的类名。但这样也只能判断语言使用A或B,粗细还是解决不了。
看来还是要用 CSS 解决。
首先我将所有的8个字体先定义好:
@font-face { font-family: A-Bold; src: url("./fonts/A-Bold.ttf");}/* ... */@font-face { font-family: B-Thin; src: url("./fonts/B-Thin.ttf");}
如何根据粗细程度自动选择对应字体包
有同学可能会问,为什么不直接使用 font-weight
来控制粗细而是用不同的字体包呢?
我们来看下面这个例子,我们使用同一个字体, font-weight
分别设置为900、500、100,结果我们看到的字体粗细是一样的。
对的,很多字体不支持font-weight
所以我们需要用不同粗细的字体包。
@font-face
中的font-weight
属性来设置字体的宽度:@font-face { font-family: A; src: url("./fonts/A-Bold.ttf");font-weight: 600;}@font-face { font-family: A; src: url("./fonts/A-Medium.ttf");font-weight: 500;}@font-face { font-family: A; src: url("./fonts/A-Regular.ttf");font-weight: 400;}@font-face { font-family: A; src: url("./fonts/A-Thin.ttf");font-weight: 300;}
注意,这里我们把字体名字都设为相同的,如下图所示,这样我们就成功的解决了第一个问题:不同粗细也要使用不同的字体包;
并且,如果我们只是定义而未真正使用时,不会去下载未使用的字体包,再加上字体包的缓存策略,就可以最大程度节省带宽:
如何根据不同语言自动选择字体包?
通过张鑫旭的博客找到了解决办法,使用 unicode-range
设置字符 unicode 范围,从而自定义字体包。
unicode-range
是一个 CSS 属性,用于指定字体文件所支持的 Unicode 字符范围,以便在显示文本时选择适合的字体。
它的语法如下:
@font-face { font-family: "Font Name"; src: url("font.woff2") format("woff2"); unicode-range: U+0020-007E, U+4E00-9FFF;}
在上述例子中,unicode-range
属性指定了字体文件支持的字符范围。使用逗号分隔不同的范围,并使用 U+XXXX-XXXX
的形式表示 Unicode 字符代码的范围。
通过设置 unicode-range
属性,可以优化字体加载和页面渲染性能,只加载所需的字符范围,减少不必要的网络请求和资源占用。
通过查表得知阿拉伯语的 unicode 的范围为:U+06??, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+10A60-10A7F, U+10A80-10A9F
这么几个区间。所以我们设置字体如下,因为设计以 A 字体为准,所以在 Figma 中给出的样式代码字体名均为 A,所以我们把 B 字体的字体名也设置为 A:
当使用字体的字符中命中unicode-rang
的范围时,自动下载相应的字体包。
@font-face { font-family: A; src: url("./fonts/A-Bold.ttf"); font-weight: 600;}@font-face { font-family: A; src: url("./fonts/A-Medium.ttf"); font-weight: 500;}@font-face { font-family: A; src: url("./fonts/A-Regular.ttf"); font-weight: 400;}@font-face { font-family: A; src: url("./fonts/A-Thin.ttf"); font-weight: 300;}:root { --ARABIC_UNICODE_RANGE: U+06??, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF, U+10A60-10A7F, U+10A80-10A9F;}@font-face { font-family: A; src: url("./fonts/B-Bold.ttf"); font-weight: 600; unicode-range: var(--ARABIC_UNICODE_RANGE);}@font-face { font-family: A; src: url("./fonts/B-Medium.ttf"); font-weight: 500; unicode-range: var(--ARABIC_UNICODE_RANGE);}@font-face { font-family: A; src: url("./fonts/B-Regular.ttf"); font-weight: 400; unicode-range: var(--ARABIC_UNICODE_RANGE);}@font-face { font-family: A; src: url("./fonts/B-Thin.ttf"); font-weight: 300; unicode-range: var(--ARABIC_UNICODE_RANGE);}p { font-family: A;}
总结
遇到的问题:
- 两种字体,B 字体为阿拉伯语使用,A 字体其他语言使用。根据语言自动选择。
- 根据字宽自动选择相应的字体包。
- 可以直接使用 Figma 中生成的样式而不必每次手动改动。
- 尽可能节省带宽。
我们通过 font-weight
解决了问题2,并通过 unicode-range
解决了问题1。
并且实现了按需下载相应字体包,不使用时不下载。
Figma 中的代码可以直接复制粘贴,无需任何修改即可根据语言和自宽自动使用相应字体包。
本文转载于:
https://juejin.cn/post/7251884086536781880
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。
关键词:
记录--什么!一个项目给了8个字体包???|头条焦点
官旗大促:鸿星尔克梭织速干运动短裤 限时49元
热点聚焦:450块都不到!AMD最便宜新U锐龙3 5100来了:极致性价比
新机型恐怕还要等:发售七年后Switch销量再创新高 每日看点
钢铁侠同款!全新奥迪纯电轿跑e-tron GT限量发售 109.98万起
Poi Excel 动态变化行高,动态创建Sheet-当前视点
【笔试实战】LeetCode题单刷题-编程基础 0 到 1【三】-最资讯
AI PPT 一句话轻松生成PPT演讲稿。-全球聚焦
世界速递!实时社群技术专题(一):支持百万人超级群聊,一文读懂社群产品Discord
欢乐颂3酒店问题(欢乐颂3酒店取景地)
红魔大黄蜂超能版全家桶来了:手机、键鼠全定制
21年前清华学生硫酸泼熊 现已是中科院副研究员:程序合规
深圳一辆私家车开上火车站台 路人惊叹 官方回应
每日讯息!RTX 4090频繁烧毁!英伟达在4070上用改良接口 16针接口要淘汰了
1080P光追利器!索泰RTX 4060 X-GAMING OC欧泊白图赏
环球实时:解决浏览器SSL缓存,自动将http跳转至https导致无法访问的问题
今日看点:加速体细胞突变检测分析流程-系列2(ctDNA等高深度样本)
FreeMarker指令语法【FreeMarker】
最新消息:MedCalc v22.009 医学ROC曲线统计分析软件下载安装教程
04vgg剪枝_世界新动态
焦点速看:昆导确认:十部电影上限降至《杀死比尔3》无望
满血版骁龙8+《原神》满帧无压力!红魔电竞平板发布|焦点日报
突然!腾讯音频App企鹅FM宣布停运:上线刚8年 环球短讯
【世界新要闻】通吃全平台!红魔Dao TWS氘锋耳机上市:1499元起
天天微资讯!几百块的激光打印机堪用吗?实测后心里有数了
红魔魔境49寸QD-OLED电竞显示器发布:240Hz超高刷新率-全球热议
世界快讯:世界气象组织预警:厄尔尼诺或致今后气温“创纪录”
【世界独家】第五套人民币豹子号价格(2023年7月5日)
美国女网红直播睡觉月入1447万 网友羡慕:躺着就把钱赚了
环球时讯:被曝能白嫖付费网页:ChatGPT紧急下线联网模式
打破全球23年魔咒!天兵科技天龙三号大型液体火箭明年首飞:可复用_时讯
环球视讯!谷歌论文展示量子计算机新突破!超算47年任务几秒即可完成
轿车高速路上强行变道被大货撞旋一圈 女子不满处罚:明明是他撞我
[llama懒人包]ChatGPT本地下位替代llama-7b,支持全平台显卡/CPU运行 环球看热讯
灵山卫站派出所110民警帮助乘客归还遗失证件
全新国产芯片设计EDA发布:首发PCIe 5.0、60万兆网络!
日本有孩家庭数首次跌破1000万户:欲加快推进机器人、AI人工智能
曝小米14系列和Redmi Note 13系列手机预装MIUI 15,均配备极窄屏 环球快报
焦点报道:天问一号登陆火星2多年 我国公布科学探测数据:总量超过2TB
全球热点!Magic V2通讯将是行业顶级!荣耀赵明:无需与iPhone比较
前沿资讯!33.5万开卖!网红坦克500出混动了:发布会现场教友商做越野
一次不成功的洞穴救援 天天热闻
轿车跑车SUV应有尽有 比亚迪腾势全新品牌计划曝光 涵盖30-80万共7款车型
当前滚动:Android Launcher apk 授信安装
华为云GaussDB圈层活动走进香港,以技术创新构筑金融政企数智发展基石
基于袋鼠云实时开发平台开发 FlinkSQL 任务的实践探索
一种基于DeltaE(CIE 1976)的找色算法Cuda实现_即时看
世界通讯!复苏中的中国经济怎么看?2023上财宏观论坛在沪举办
韩国最大在野党:IAEA评估报告未验证福岛核污水安全性
天天动态:卖得太火 魅族20 PRO严重缺货!晨曦紫、曙光银今日开启预定
全球快播:9.99万价格屠夫!长安第二代UNI-T尊享型上市:入门就有骁龙8155
每日速读!小憩、露营、洗车模式上线 岚图梦想家发布OTA2.0版本
奔驰变法拉利!男子107万提新车发现竟是翻新车:退一赔三获赔428万_动态焦点
新资讯:盘点10款最美游戏:《最后生还者》《艾尔登法环》等入选
【AI新趋势期刊#2】AI发明计算机算法,如何给大模型排行,照片秒变二维码,视频一键动漫风 速看
焦点热讯:Java异常分类和常见异常
语音直播源码知识分享:探索新的沟通方式-全球微动态
水深火热成语接龙_热字开头的成语
《巨齿鲨2:深渊》最新预告出炉:杰森·斯坦森、吴京大战海底怪兽
双泵水冷力压13900KS 310W功耗!超频三DE360水冷散热器评测:静音水泵也很重要 即时焦点
头条焦点:华裔学者出手!50年零进展算法难题被突破
不顾国内外强烈反对!日本拟最早8月核污水排海|当前观察
环球最资讯丨故宫门票提前7天抢不到 黄牛要价翻6倍!全国博物馆几乎都如此
全球即时看!还分不清bin log 、redo log 跟 undo log?
全球快讯:前端Vue一款基于canvas的精美商品海报生成组件 根据个性化数据生成商品海报图 长按保存图片
世界简讯:突发!俄军一架战机坠毁
【天天速看料】火狐发布115版本更新:支持Win7/8最后版本
天天微资讯!女子半夜拍蚊子走出158步吓坏母亲:通过微信步数了解家人起居
男孩被锁车内父母心疼玻璃不愿砸 路人做好事反被责怪:网友看怒|热资讯
焦点热讯:比亚迪豪掷45亿巴西建三厂:年产15万辆、提供超5000个就业岗位
实时:西安饭庄长安礼记糕点礼盒大促:原价69.9 西安19.9包邮
【天天时快讯】法国总统马克龙:骚乱顶峰已过去 仍需保持警惕
债市开放新消息:离岸国债期货呼之欲出
环球快播:胡昌升会见俞敏洪一行
宁德时代科学家欧洲拿发明大奖!开发带盖的锂电池降低爆炸风险
全球微速讯:中国新能源汽车6月销量达到历史最高水平:比亚迪、特斯拉均创新高
广东一奥迪车嚣张 逆行还竖中指车主已被查处 大快人心
苹果打鸡血 电池激增!消息称iPhone 15系列存储加大 告别128GB 环球快报
《英雄联盟》LPL夏季赛TT战胜EDG:Uzi复出斩获第七次MVP_环球新动态
多省份上调最低工资标准,安徽等15省份第一档月最低工资超2000元 今日热文
在CentOS 7 mini版中使用ifconfig
世界球精选!年内券商债券承销金额超6万亿元 部分中小券商在不同类型债券承销方面展现出优势
医保谈判药品怎么续约?非独家药品如何竞价?国家医保局公开征求意见 环球快看
成都滴滴公司要注销?官方回应:非运营主体 公司一切正常 世界热门
3999元起口碑超稳!小米13官网评价超100万:99.9%好评率 全球新消息
没人买?RTX 4060大降价 降速让人惊叹:英伟达要出手了
杀入BBA腹地 30多万的比亚迪照样卖爆:腾势N7上市24小时大定11687辆
读发布!设计与部署稳定的分布式系统(第2版)笔记19_基础层之设备 环球讯息
俄外交部:目前没有理由延长黑海港口农产品外运协议-天天观点
重制版或将在今年8月公开,R星已找到作者联系
小米“掐架”华为!发起专利无效请求:到底发生了什么? 热门看点
阿里的AIGC数据库工具: Chat2DB的学习与使用
环球消息!国产汽水 凭啥喝不出一家上市企业
环球热头条丨为什么人类尾巴进化掉了?留下来不行吗?中国科学家新发现
四川惊现“蚊卷风” 大量蚊子聚集5米高?想干嘛?
全球报道:本来想用AI来打败AI:结果惨烈翻车
资讯推荐:深圳市监局回应山姆泡面桶被炒至1999元:没有恶意加价
每日速递:古代20岁到100岁的称呼(20岁到70岁在古代分别叫什么)
行使国家立法权的机关是人民代表大会_全国人民代表大会和行使国家立法权
【天天新视野】ons游戏该死的妹子官方(ons游戏该死的妹子)