在网页中插入特殊字体,浅谈@font-face

摘要:本篇文章包括(1)介绍@font-face(2)如何在网页中使用@font-face插入特殊字体(3)中文在线@font-face——有字库(4)修改hexo主题字体

自从在hexo上安装了pacmen主题之后,就一直对pacman主题header上的textlogofooterintro_line的字体很感兴趣,因为我的电脑和手机上并没有安装该字体,但是无论是在任何终端上,浏览的体验都是一致的,然后查找了一些资料,发现这是CSS3中的一个功能模块@font-face,主要用于实现网页字体多样性。

@font-face功能

制作网站难免有些字体不是默认的,通过@font-face可以加载自己特定的字体,来实现特定的文字效果。
@font-face语句是css中的一个功能模块,用于实现网页字体多样性(设计者可随意指定字体,不需要考虑浏览者电脑上是否安装)。主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,
@font-face 不能说他是什么新东西了,在 CSS2.0 规范中就有了这玩意儿,IE4.0 开始就已经出现,只是当时用的不是特别广泛,后来在 CSS2.1 草案中又被删掉。随着 web 的急速发展,@font-face 价值越来越凸显,然后再次被纳入 CSS3 草案中。@font-face 是个什么东西,本文不做过多说明,不太清楚的童鞋可以看这里

http://www.w3schools.com/css/css3_fonts.asp

@font-face文件

而由于网页中使用的字体类型,也是各浏览器对字体类型有不同的支持规格。 字体格式类型主要有几个大分类:TrueType、Embedded Open Type 、OpenType、WOFF 、SVG。

TrueType

Windows和Mac系统最常用的字体格式,其最大的特点就是它是由一种数学模式来进行定义的基于轮廓技术的字体,这使得它们比基于矢量的字体更容易处理,保证了屏幕与打印输出的一致性。同时,这类字体和矢量字体一样可以随意缩放、旋转而不必担心会出现锯齿。

EOT– Embedded Open Type (.eot)

EOT是嵌入式字体,是微软开发的技术。允许OpenType字体用@font-face嵌入到网页并下载至浏览器渲染,存储在临时安装文件夹下。

OpenType(.otf)

OpenType是微软和Adobe共同开发的字体,微软的IE浏览器全部采用这种字体。致力于替代TrueType字体。

WOFF–WebOpen Font Format (.woff)

WOFF(Web开发字体格式)是一种专门为了Web而设计的字体格式标准,实际上是对于TrueType/OpenType等字体格式的封装,每个字体文件中含有字体以及针对字体的元数据(Metadata),字体文件被压缩,以便于网络传输。

SVG(Scalable Vector Graphics) Fonts (.svg)

SVG是由W3C制定的开放标准的图形格式。SVG字体就是使用SVG技术来呈现字体,还有一种gzip压缩格式的SVG字体。

@font-face声明字体

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

浏览器 支持类型
IE6,7,8 仅支持 Embedded OpenType(.eot) 格式。
Firefox 3.5 支持 TrueType、OpenType(.ttf, .otf) 格式。
Firefox 3.6 支持 TrueType、OpenType(.ttf, .otf) 及 WOFF 格式。
Chrome,Safari,Opera 支持 TrueType、OpenType(.ttf, .otf) 及 SVG Font(.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 */
}

使用@font-face实现网页中插入特殊字体的过程

获取特殊字体

这里我们要用到的是Single Malta字体


Single Malta
Single Malta

要得到Single Malta字体,不外乎两种途径,其一找到付费网站购买字体,其二就是到免费网站DownLoad字体。当然要给钱的这种傻事我想大家都不会做的,那我们就得到免费的地方下载,在哪有呢?我平时都是到Google Web Fonts和Dafont.com寻找自己需要的字体,当然网上也还有别的下载字体的地方,这个Demo使用的是Dafont.com的Single Malta字体,这样就可以到这里下载Single Malta:

http://www.dafont.com/single-malta.font

获取@font-face所需字体格式

由于不同浏览器支持的字体文件不同,我们需要想办法获得@font-face所需的.eot,.woff,.ttf,.svg字体格式,这里我们用到了一个网站fontsquirrel,可以方便的帮助我们实现字体格式的转换

http://www.fontsquirrel.com/tools/webfont-generator

fontsquirrel
fontsquirrel

进入网站后点击Add Fonts按钮,上传我们刚刚下载好的字体文件(要先把SingleMalta.ttf从.zip压缩包中解压出来),通常选择中间默认的OPTIMAL选项即可,然后勾选Agreement,点击DOWNLOAD YOU KIT,稍等片刻,即可下载我们所需要的字体文件。
解压压缩包包可以看到已经转换好的字体文件,如下图:

大家可以看到,解压缩出来的文件格式,里面除了@font-face所需要的字体格式外,还带有一个DEMO文件,如果你不清楚的也可以参考下载下来的DEMO文件,我在这里不对DEMO说明问题,我主要是给大家介绍如何把下载下来的文件有价值的运用到我们的项目中。

应用@font-face到我们的项目中

这里我们新建一个DOME项目,目录包括一个fonts文件夹,里面存放的转换好的字体文件;一个css文件夹,用于存放ccs文件;和一个index.html入口文件。目录和html如下


style.css代码

   @font-face {
      font-family: 'SingleMaltaRegular';
      src: url('../fonts/singlemalta-webfont.eot');
      src: url('../fonts/singlemalta-webfont.eot?#iefix') format('embedded-opentype'),
           url('../fonts/singlemalta-webfont.woff') format('woff'),
       url('../fonts/singlemalta-webfont.ttf') format('truetype'),
       url('../fonts/singlemalta-webfont.svg#SingleMaltaRegular') format('svg');
      font-weight: normal;
      font-style: normal;
   }
      h1.SingleMalta{
     font-family: 'SingleMaltaRegular';
   }
   body{
    background-color: rgb(123,234,234);
   }

上传到服务器,效果如下


更改hexo的textlog字体

pacman的字体资源是储存在pacman主题文件夹下source/font之中的,关于@font-face声明是储存在source/css/_base/font.styl配置文件之中,查看pacman的配置文件_config.yml找到字体选项Font通过注释可以了解到,页面的字体配置是保存在source/css/_base/variable.styl之中,如下图所示

首先将解压出来的.eot,.woff,.ttf,.svg字体文件放入font文件夹中,找到source/css/_base/font.styl配置文件,可以看到pacman已经帮我们建立了一个通用的声明,所以我们无需修改声明,只需要在variable.styl中修改页面字体配置即可,将font-custom-family``font-custom-filename改成我们的字体名和文件名即可

font-custom-family = "SingleMaltaRegular"(随意)
font-custom-filename = singlemalta-webfont

刷新页面即可看到效果,如下图:


中文@font-face

上面的这些@font-face转换网站都不支持中文字体的转换,中文字体文件相对于英文显得过于庞大,很长一段时间都被认为是不适合嵌入网页的。

直到几年前,这个问题终于被一个日本网站解决了,他用的技术就是截取法,在前端置入一个js脚本,脚本自动根据网页内容适时生成一个小字库(只包含当前网页内容的小字库)然后自动转换成.ttf、.eot、.woff、.svg等格式嵌入网页中,从页实现@font-face效果。体验和英文@font-face差不多,效果非常漂亮。但日文@font-face网站对于中文网页还无法支持。

如果是你想在你的网页上使用中文简体@font-face服务,也不是不可能,推荐一个中文@font-face网站——“有字库”。

使用时,只需要引用一段js脚本代码或者一段css代码,网站就会自动帮你截取网页需要的小字库并生成.ttf、.eot、.woff、.svg等格式文件,你可以将各文件下载下来,也可以托管在这个网站上,非常方便。去试试吧

有字库测试

<html>
    <head>
    <title>font test</title>
    <meta http-equiv="content-type" charset="utf-8"  content="text/html"
    </head>
    <body>
    <h1 class="SiYuanRegular">中国文字之美</h1>
    <p class="SiYuanRegular">思源黑体测试</p>
    <h1 >中国文字之美</h1>
    <p >思源黑体测试</p>
    </body> //有字库生成的JS脚本插入</body>和</html>之间
    <script type="text/javascript" src="http://www.youziku.com/UserDownFile/jquery.min.js"></script>
<script type="text/javascript" src="http://www.youziku.com/UserDownFile/jquery.md5.js"></script>
<script type="text/javascript"> 
    function youziku46827() {
        var resultStr = $(".SiYuanRegular").text();
        var md5 = "";
        resultStr = Trim(resultStr);
        resultStr = SelectWord(resultStr);
        md5 = $.md5("08d5ae7dc2e04646b67b8f08909cc995"+"SiYuanRegular" + resultStr);
        $.getJSON("http://www.youziku.com/webfont/CSSPOST?jsoncallback=?", { "id": md5, "guid": "08d5ae7dc2e04646b67b8f08909cc995", "type": "5" }, function (json) {
            if (json.result == 0) {/*alert("需要生成");*/
                $.post("http://www.youziku.com/webfont/PostCorsCreateFont", { "name": "SiYuanRegular", "gid": "08d5ae7dc2e04646b67b8f08909cc995", "type": "5", "text": resultStr }, function (json) {
                if (json == "0") { /*alert("参数不对");*/
                } else if (json == "2") {/*alert("超过每日生成字体数的上限");*/
                } else if (json == "3") { /*alert("当前正在生成请稍后");*/
                } else {/*alert("正在生成");*/
                }
            });
            }
            else {/*alert("下载css文件");*/
                loadExtentFile("http://www.youziku.com/webfont/css?id=" + md5 + "&guid=" + "08d5ae7dc2e04646b67b8f08909cc995" + "&type=5");
            }
        });
    }
    (function youziku() {
    if (window.location.href.toString().substring(0, 7) == "file://") {
            alert("你当前是通过双击打开html文件,进行本地测试的,这样看不到字体效果,一定要通过本地建立的虚拟网站或发布到外网进行测试。详见有字库的使用说明。");
        }else{
        youziku46827();
        }
    })()
</script>
</html> 

测试效果


有字库测试
有字库测试
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • 一、概念 参考网页字体Serif和Sans-serif的区别及浏览器字体的设置CSS Font知识整理总结 1.F...
    合肥黑阅读 6,091评论 0 12
  • 最近兴致上来,就想更换了那Blog标题字体(汉字的);网上搜索了一番,发现蘇新詩柳繁體这款甚合我心;然后就着手搞将...
    晚晴幽草阅读 2,369评论 1 8
  • 基础知识 @font-face虽然是CSS3模块,但是IE4时代开始就已经支持了它,只不过跟现在CSS3的功能相比...
    microkof阅读 1,165评论 0 3
  • font-face是css3中允许使用自定义字体的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中。到了今...
    Rin阳阅读 14,706评论 0 13
  • 今天的小记 每天午睡以后都不会按时起床,因为我每天中午都很困。然后就会关了闹钟再多睡一会。但是zs同学每天中午起来...
    西木夏子阅读 153评论 0 0