使用@font-family时各浏览器对字体格式(format)的支持情况

说到浏览器对@font-face的兼容问题,这里涉及到一个字体format的问题,因为不同的浏览器对字体格式支持是不一致的,这样大家有必要了解一下,各种版本的浏览器支持什么样的字体,前面也简单带到了有关字体的几种格式,下面我就分别说一下这个问题,让大家心里有一个概念:

一、TureTpe(.ttf)格式:

.ttf字体是Windows和Mac的最常见的字体,是一种RAW格式,因此他不为网站优化,支持这种字体的浏览器有【IE9+,Firefox3.5+,Chrome4+,Safari3+,Opera10+,iOS Mobile Safari4.2+】;

二、OpenType(.otf)格式:

.otf字体被认为是一种原始的字体格式,其内置在TureType的基础上,所以也提供了更多的功能,支持这种字体的浏览器有【Firefox3.5+,Chrome4.0+,Safari3.1+,Opera10.0+,iOS Mobile Safari4.2+】;

三、Web Open Font Format(.woff)格式:

.woff字体是Web字体中最佳格式,他是一个开放的TrueType/OpenType的压缩版本,同时也支持元数据包的分离,支持这种字体的浏览器有【IE9+,Firefox3.5+,Chrome6+,Safari3.6+,Opera11.1+】;

四、Embedded Open Type(.eot)格式:

.eot字体是IE专用字体,可以从TrueType创建此格式字体,支持这种字体的浏览器有【IE4+】;

五、SVG(.svg)格式:

.svg字体是基于SVG字体渲染的一种格式,支持这种字体的浏览器有【Chrome4+,Safari3.1+,Opera10.0+,iOS Mobile Safari3.2+】。

这就意味着在@font-face中我们至少需要.woff,.eot两种格式字体,甚至还需要.svg等字体达到更多种浏览版本的支持。

为了使@font-face达到更多的浏览器支持,Paul Irish写了一个独特的@font-face语法叫Bulletproof @font-face:

   @font-face {  font-family: 'YourWebFontName';  src: url('YourWebFontName.eot?') format('eot');/*IE*/  src:url('YourWebFontName.woff') format('woff'), url('YourWebFontName.ttf') format('truetype');/*non-IE*/    } 
   @font-face {  font-family: 'YourWebFontName';  src: url('YourWebFontName.eot'); /* IE9 Compat Modes */  src: url('YourWebFontName.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */              url('YourWebFontName.woff') format('woff'), /* Modern Browsers */              url('YourWebFontName.ttf')  format('truetype'), /* Safari, Android, iOS */              url('YourWebFontName.svg#YourWebFontName') format('svg'); /* Legacy iOS */    } 

说了这么多空洞的理论知识,大家一定有点心痒痒了,那么我们先来看看W3CPLUS首页中导航部分的兰色字体是如何实现的,假如我们有一个这样的DOM标签,需要应用自定义字体:

既然各浏览器的字体格式不一致,那么我们有必要将一种字体转换成各种字体,这样我们在使用时可以给各浏览器设置不同字体格式,下面
给大家提供一个字体生成工具:fonts quirrel。 

转载于:https://www.cnblogs.com/tkzc2013/p/6933307.html

<think>好的,用户想知道在CSS中,如果指定的字体浏览器中不存在,应该如何处理。首先,我需要回忆一下CSS的字体回退机制。根据之前学过的知识,font-family属性可以指定多个字体,用逗号分隔,浏览器会按顺序查找,直到找到可用的字体。比如,先指定想要的字体,然后跟一个通用字体族,如sans-serif。 然后,用户可能还关心如何确保备用字体在样式上与原字体相近。例如,如果主要字体是Arial,备用字体可能是Helvetica,最后才是通用无衬线字体。这样即使前两个字体缺失,也能保持设计的一致性。 另外,记得引用中的内容提到,可以通过@font-face引入网络字体,比如Google Fonts。这可以避免依赖用户本地安装的字体。但需要注意字体加载的问题,比如FOIT(Flash of Invisible Text),这候可以使用font-display属性来控制,比如设置为swap,这样在字体加载完成前会先显示备用字体,避免文字不可见的情况。 还有,用户可能需要知道如何定义自定义字体使用@font-face规则,指定不同的字体文件和格式。这样即使本地没有安装,浏览器也会下载。同,要考虑到不同浏览器的兼容性,提供多种字体格式如woff2、woff等。 总结下来,回答应该包括以下几点: 1. 使用字体回退列表,指定多个备用字体和通用字体族。 2. 使用@font-face引入自定义字体,确保字体可用。 3. 处理字体加载的显示问题,如使用font-display: swap。 4. 结合引用中的内容,比如引用[1]提到的字体匹配样式,引用[2]的字体加载方法,引用[3]的font-display设置,以及引用[4]的响应式设计相关建议。 可能用户没有明确提到但需要注意的点包括性能优化,比如预加载字体使用CDN加速,但根据问题,可能不需要深入这部分。不过还是可以简要提到。 最后,生成的相关问题需要围绕字体回退、自定义字体加载、优化字体显示问题等方面展开,帮助用户进一步学习。</think>### 处理CSS中字体缺失的替代方案 当`font-family`指定的字体浏览器中不存在,可以通过以下方法确保内容正常显示并保持设计一致性: #### 1. **字体回退列表(Fallback Fonts)** 在`font-family`声明中按优先级列出多个字体,最后以通用字体族(如`sans-serif`、`serif`等)结尾。例如: ```css body { font-family: "Roboto", "Arial", "Helvetica", sans-serif; } ``` 浏览器会优先尝试加载`Roboto`,若缺失则依次尝试`Arial`、`Helvetica`,最后使用系统默认的无衬线字体[^1]。 #### 2. **使用`@font-face`引入自定义字体** 通过定义`@font-face`规则加载网络字体(如Google Fonts),确保字体在所有设备上可用: ```css @font-face { font-family: "CustomFont"; src: url("custom-font.woff2") format("woff2"), url("custom-font.woff") format("woff"); } ``` 然后调用: ```css body { font-family: "CustomFont", sans-serif; } ``` 此方法需注意字体文件加载延迟问题(如FOIT),可通过`font-display: swap`优化(见下文)[^2]。 #### 3. **控制字体加载行为** 使用`font-display`属性定义字体加载期间的显示策略: ```css @font-face { font-family: "CustomFont"; src: url("font.woff2") format("woff2"); font-display: swap; /* 立即显示备用字体,待自定义字体加载后替换 */ } ``` 此设置可避免页面长间无文本显示(FOIT问题)[^3]。 #### 4. **选择相近样式的备用字体** 确保备用字体与原字体视觉风格接近。例如: - 若主字体为衬线字体`Georgia`,备用顺序可为`Times New Roman` → `serif`。 - 若主字体为无衬线字体`Open Sans`,备用顺序可为`Arial` → `Helvetica` → `sans-serif`。 #### 5. **响应式字体适配** 结合媒体查询或相对单位(如`em`、`rem`)调整字体大小,避免因字体差异导致布局错乱[^4]: ```css h1 { font-size: 2rem; /* 相对根元素大小 */ } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值