`

在网页中嵌入任意字体的解决方案

阅读更多

   字体使用是网页设计中不可或缺的一部分。经常地,我们希望在网页中使用某一特定字体,但是该字体并非主流操作系统的内置字体,这样用户在浏览页面的时候就有可能看不到真实的设计。美工设计师最常做的办法是把想要的文字做成图片,

 

这样做有几个明显缺陷:

1. 不可能大范围的使用该字体;

2. 图片内容相对使用文字不易修改;

3. 不利于网站SEO(主流搜索引擎不会将图片alt内容作为判断网页内容相关性的有效因素)。

 

网络上有一些使用sIFR技术、或 javascript/flash hack的方法,但实现起来或繁琐,或有缺陷。下面要讲的是如何只通过CSS的@font-face属性来实现在网页中嵌入任意字体。

 

【第一步】

获取要使用字体的三种文件格式,确保能在主流浏览器中都能正常显示该字体。

 

1. @font-face

CSS3的@font-face属性(事实上CSS2中就已引入),为我们带来了一些希望,而 Firefox 3.5新增的对@font-face的支持,让我们离这个希望更进了一些。

 

到现在为止,已经有Safari、 Chrome、Opera 10和Firefox 3.5支持@font-face了,比较意外的是,IE系列浏览器也部分支持该属性。Mozilla旗下的其它产品,SeaMonkey 2 和Thunderbird 3 也支持该属性。

 

浏览器兼容性

浏览器 最低版本 支持字体
Internet Explorer 4.0 只支持OpenType字体(eof格式)
Firefox (Gecko) 3.5 (1.9.1) TrueType(ttf格式)和OpenType 字体
Opera 10.0 TrueType 和OpenType 字体
Safari (WebKit) 3.1 (525) TrueType和OpenType 字体

 

从表中可以看出,IE系浏览器不支持TTF格式的字体,只支持eof格式,不过,微软官方发布了一个WEFT工具,可以将TTF转化为EOF,需要的朋友可以去下载使用

 

可以使用的样式如下:

  • .TTF或.OTF,适用于Firefox 3.5、Safari、Opera
  • .EOT,适用于Internet Explorer 4.0+
  • .SVG,适用于Chrome、IPhone

下面要解决的是如何获取到某种字体的这三种格式文件。一般地,我们在手头上(或在设计资源站点已经找到)有该字体的某种格式文件,最常见的是.TTF文件,我们需要通过这种文件格式转换为其余两种文件格式。

 

字体文件格式的转换可以通过网站FontsQuirrelonlinefontconverter 提供的在线字体转换服务获取。这里推荐第一个站点,它允许我们选择需要的字符生成字体文件(在服务的最后一个选项),这样就大大缩减了字体文件的大小,使得本方案更具实用性。

 

【第二步】

获取到三种格式的字体文件后,下一步要在样式表中声明该字体,并在需要的地方使用该字体。

字体声明如下:

 

Html代码 复制代码
  1. @font-face {   
  2.     font-family: 'fontNameRegular';   
  3.     src: url('fontName.eot');   
  4.     src: local('fontName Regular'),    
  5.               local('fontName'),    
  6.               url('fontName.woff') format('woff'),    
  7.               url('fontName.ttf') format('truetype'),    
  8.               url('fontName.svg#fontName') format('svg');   
  9. }     
  10. /*其中fontName替换为你的字体名称*/  
@font-face {
	font-family: 'fontNameRegular';
	src: url('fontName.eot');
	src: local('fontName Regular'), 
              local('fontName'), 
              url('fontName.woff') format('woff'), 
              url('fontName.ttf') format('truetype'), 
              url('fontName.svg#fontName') format('svg');
}  
/*其中fontName替换为你的字体名称*/

 

 

在页面中需要的地方使用该字体:

 

Html代码 复制代码
  1. p { font: 13px fontNameRegular, Arial, sans-serif; }   
  2. h1{font-family: fontNameRegular}  
    p { font: 13px fontNameRegular, Arial, sans-serif; }
    h1{font-family: fontNameRegular}
 

或者

 

Java代码 复制代码
  1. <p style="font-family: fontNameRegular">掬水月在手,落花香满衣</p>  
    <p style="font-family: fontNameRegular">掬水月在手,落花香满衣</p>

 


 

其他方法:

sIFR

sIFR并非一种新技术,而是已经存在并被使用很多年了。sIFR是一种很有用也很好用的文本替换技术,通过 Flash+JS+CSS将网络字体嵌入到页面中。

考虑到网上已经有很多资源,本文就不再赘述,想要了解的朋友可以参考一下文章:

  1. 如何以及何时使用sIFR
  2. sIFR-文本替换技术
  3. sIFR——百度百科

Typeface.js

Typeface 被认为是替代 SIFR的最佳方案,相对于sIFR,Typeface少了Flash的应用,使用纯JS来嵌入相关字体,而且用法也很简单:在页面中引入相应的js文件就OK了。

 

Html代码 复制代码
  1. <html>  
  2.   <head>  
  3. <!-- 加载所有的样式先 -->  
  4.     <link rel="stylesheet" type="text/css" ref="/style.css">  
  5. <!-- 再加载typeface.js 库文件和typeface.js字体文件-->  
  6.     <script type="text/javascript" src="typeface-0.10.js"></script>  
  7.     <script type="text/javascript" src="helvetiker_regular.typeface.js"></script>  
  8.   </head>  
  9.   <body>  
  10. <!-- 继续并使用CSS指定typeface.js 字体 -->  
  11.     <div class="myclass typeface-js" style="font-family: Helvetiker">  
  12.       文本文本...   
  13.     </div>  
  14.   </body>  
  15. </html>  
<html>
  <head>
<!-- 加载所有的样式先 -->
    <link rel="stylesheet" type="text/css" ref="/style.css">
<!-- 再加载typeface.js 库文件和typeface.js字体文件-->
    <script type="text/javascript" src="typeface-0.10.js"></script>
    <script type="text/javascript" src="helvetiker_regular.typeface.js"></script>
  </head>
  <body>
<!-- 继续并使用CSS指定typeface.js 字体 -->
    <div class="myclass typeface-js" style="font-family: Helvetiker">
      文本文本...
    </div>
  </body>
</html>

 

 

从中我们可以看出来,使用Typeface只需要着简单的几步就可以在页面中使用嵌入字体了。

typeface资源:

cufon

cufon是一个比较新的技术,被定位为有价值的sIFR替代方案,它有很多优势:

  1. 无需浏览器插件——被浏览器原生支持;
  2. 兼容性——兼容各个主流浏览器
  3. 易用—— 无需配置
  4. 速度—— 快速渲染大量字体

cufon的原理:

cufon通过生成器将字体文件转化为SVG字体,再将其转换为VML文件,这对IE很重要,因为IE原生支持VML文件。最后,使用复杂的JavaScript函数将VML文件编码为 JSON文件(typeface的原理与此类似)。如下图所示:

 



 

 

这样做有很多好处:

  1. 与加载一个字体文件,你只需要加载一些js文件就可以;
  2. 客户端无需再次手工编码;
  3. 外部js文件直到加载完成才会被执行,这可以让我们实现无闪烁的干净的替换。
  4. 压缩率高。相对于字体文件,可压缩掉60-80% 。

cufon 的用法:

cufon的用法与typeface类似,需要加载一个库文件和字体文件。而与typeface不同的是,你需要使用js初始化 cufon:

 

Js代码 复制代码
  1. <script type="text/javascript">   
  2. Cufón.replace('h2', { fontFamily: 'Qlassik Medium' });    
  3. </script>  
<script type="text/javascript">
Cufón.replace('h2', { fontFamily: 'Qlassik Medium' }); 
</script>

 

 

这与typeface的在样式中定义字体很不一样。

cufon的介绍:http://www.ibm.com/developerworks/cn/web/0911_zhuzh_cufon/

cufon资源:

cufon和typeface.js对比:


Cufón Typeface.js File size 支持的浏览器 支持的字体类型 支持的字体样式 可选文字?
14.0kb (压缩后) 16.3kb (未压缩)
Firefox 1.5+, Safari 3+, Opera 9.5+, Google Chrome 和 Internet Explorer6+ Firefox 1.5+, Safari 2+, and Internet Explorer 6+, 最新版已经支持IE8
.ttf, .otf, PFB, postscript .ttf
font-size, font-style, font-weight, line-height, text-shadow, color font-size, font-style, font-weight, font-stretch, letter-spacing, line-height
尚不支持 尚不支持

 

从这个对比中可以看出来,两者并没有太大的不同,cufon支持更多的浏览器和字体类型,而typeface支持更多的字体样式。实际应用中貌似typeface方便一些,可以直接在样式中定义字体,而cufon则有总体文件大小方面的优势。具体用哪一个,看你自己的喜好吧。

总结

事实上,sIFR、 typeface.js和cufon都是目前常说的文本替换技术,这些技术都可以用来替换@font-face,并且实现更好的浏览器兼容性。但是每种技术都不是完美的:

  1. @font-face最简单,虽然大部分浏览器也都支持了,但是其浏览器兼容性并不是很完美,对IE还需要 eof字体的特殊支持,而且对于中文字体来说,一般都很大,这会占用很大的页面加载时间和服务器流量。
  2. sIFR是兼容性和可用性最好、对SEO友好的一种方案,但也是实现起来最复杂的,而且需要浏览器支持Flash插件。
  3. typeface和cufon都是利用在IE中渲染VML,而在非IE浏览器中使用canvas的方式实现“伪”字体的,他们使用起来相对简单,但是可用性和用户体验以及SEO都不是很理想。
  4. 版权问题是一个很重要的问题,无论你使用哪种技术,都需要考虑文字的授权。

所以,使用哪种方案,要看你的需求和喜好,或许你宁愿切更多的图片也不愿使用这些技术?

  • 大小: 29.6 KB
分享到:
评论
1 楼 chaoqunzhang 2012-03-28  

相关推荐

    Excel2007图表完全剖析 3/8

     全书分为14章和一个附录,包括如下内容:学习使用Excel 2007图表制作界面,掌握使用图形有效地表示数据的方式,根据要传达的信息选择正确的图表类型,学习可节省时间的解决方案,创建大多数人认为使用Excel无法...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例004 根据需要创建所需解决方案 6 1.2 Visual Studio开发环境的使用 8 实例005 为程序设置版本和帮助信息 8 实例006 设置Windows应用程序启动窗体 9 实例007 统一窗体中控件的字体设置 10 实例008 通过“格式”...

    PHP和MySQL WEB开发(第4版)

    10.2 在数据库中插入数据 10.3 从数据库中获取数据 10.3.1 获取满足特定条件的数据 10.3.2 从多个表中获取数据 10.3.3 以特定的顺序获取数据 10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询 10.4 ...

    PHP和MySQL Web开发第4版pdf以及源码

    10.2 在数据库中插入数据 10.3 从数据库中获取数据 10.3.1 获取满足特定条件的数据 10.3.2 从多个表中获取数据 10.3.3 以特定的顺序获取数据 10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询...

    PHP和MySQL Web开发第4版

    10.2 在数据库中插入数据 10.3 从数据库中获取数据 10.3.1 获取满足特定条件的数据 10.3.2 从多个表中获取数据 10.3.3 以特定的顺序获取数据 10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询...

    Excel2007图表完全剖析 8/8

     全书分为14章和一个附录,包括如下内容:学习使用Excel 2007图表制作界面,掌握使用图形有效地表示数据的方式,根据要传达的信息选择正确的图表类型,学习可节省时间的解决方案,创建大多数人认为使用Excel无法...

    Excel2007图表完全剖析 1/8

     全书分为14章和一个附录,包括如下内容:学习使用Excel 2007图表制作界面,掌握使用图形有效地表示数据的方式,根据要传达的信息选择正确的图表类型,学习可节省时间的解决方案,创建大多数人认为使用Excel无法...

    Excel2007图表完全剖析 2/8

     全书分为14章和一个附录,包括如下内容:学习使用Excel 2007图表制作界面,掌握使用图形有效地表示数据的方式,根据要传达的信息选择正确的图表类型,学习可节省时间的解决方案,创建大多数人认为使用Excel无法...

    Excel2007图表完全剖析 4/8

     全书分为14章和一个附录,包括如下内容:学习使用Excel 2007图表制作界面,掌握使用图形有效地表示数据的方式,根据要传达的信息选择正确的图表类型,学习可节省时间的解决方案,创建大多数人认为使用Excel无法...

    Excel2007图表完全剖析 6/8

     全书分为14章和一个附录,包括如下内容:学习使用Excel 2007图表制作界面,掌握使用图形有效地表示数据的方式,根据要传达的信息选择正确的图表类型,学习可节省时间的解决方案,创建大多数人认为使用Excel无法...

    电脑高手必备 Windows系统35招实用技巧

    意,可以在“声音方案”选项组中,选定该方案,然后单击“删除”按钮, 删除该方案。  (6)选择“音量”选项卡,打开“音量”选项卡。你可以在“设备音量” 选项组中,通过左右调整滑块改变系统输出的音量大小。...

    会计理论考试题

    A、不可恢复 B、可以在“回收站”中找到 C、可以恢复 D、可以在“我的公文包”中找到 15.下列软件中不属于系统软件的是 ___D__ 。 A、Windows B、Visual FoxPro C、UCDOS D、WPS97 16.应用软件在计算机普及中起重要...

    vfp6.0系统免费下载

    答案: Knowledge Base 是内容广泛的论文集,覆盖了如何使用产品的各种特性、已知的软件错误及其解决方案或回避的方法、以及其他有助于使用各种 Microsoft 产品的有用信息。通过以下站点可访问整个 Knowledge Base: ...

Global site tag (gtag.js) - Google Analytics