9.11.应用嵌入字体

9.11.1.问题
你想将字体嵌入程序以确保在任何机器上的外貌感观保持一致,不用去管用户系统字体如何。
9.11.2.解决办法
通过在ActionScript 中利用[Embed]元标记或者在CSS 中使用@font-face 以嵌入字体。
9.11.3.讨论
在程序中嵌入字体的原则确保文本应用的样式是完整的,不需要考虑用户机器上系统字体。

你能利用ActionScript 和CSS 嵌入字体。

下面例子描述了怎样在ActionScript 嵌入字体以为Flex 组件应用字体:
+展开
-XML
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical">

<mx:Script>
<![CDATA[
[Embed(source="assets/fonts/verdana.TTF",fontName="MyVerdana")]
private var _verdana:Class;

]]>
</mx:Script>
<mx:Label text="i have no custom style." />
<mx:Label text="i have verdana style!fontFamily="MyVerdana" />
</mx:Application>

通过对字体应用[Embed] 标记,在组件实例化并对fontFamily 样式属性赋值时,你能明确做为参考的fontName 属性。本例中,字体被嵌入同时连带的Class 实例成员也被声明。然而在对font family 赋值时并不需要引用那个变量,但其却被增设为与嵌入的指令相关联的定义。

前面的代码嵌入了有无格式或者普通、样式外观的字体。该字体能应用于任何组件并显示在屏幕上。无论如何你都会发现一些组件显示内含的特定样式,例如mx.controls.Button 及其黑体字标签, 如果没有嵌入特定的字体它们的文本将会显示失败。除非你嵌入相应的字体并同时设置fontWeight 属性,否则不能将粗字体应用于组件。例如:
[Embed(source="assets/fonts/verdanab.TTF", fontName="MyVerdana" fontWeight="bold")]
private var _verdanaBold:Class;
...
<mx:Button label="I have style" fontFamily="MyVerdana" />

大多数字体有四种主要的打印机字体样式:无格式、粗体、斜体、粗斜体。你能嵌入任意的打印机字体进Flex 程序, 但他们需要用正确的属性分开声明。

利用ActionScript 嵌入字体是可行的方法,管理和创造待嵌入于连带类成员中的大量字体将变得很麻烦。你也能通过CSS 嵌入字体,既能在MXML 文件内部也可以来自外部, 按如下方法利用@font-face 指令:
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxmllayout="vertical">
<mx:Style>
@font-face
{
src: url('assets/fonts/verdana.TTF');
font-family: MyVerdana;
}

@font-face
{
src: url('assets/fonts/verdanai.TTF');
font-family: MyVerdana;
font-style: italic;
}

@font-face
{
src: local('Verdana');
font-family: MyVerdana;
font-weight: bold;
}

Application {
font-family: MyVerdana;
}

.italicStyle {
font-style: italic;
}

</mx:Style>
<mx:Text text="i have MyVerdana fontFamily styling." />
<mx:Label text="i am in italics with MyVerdana styling."
styleName="italicStyle" />

<mx:Button label="i am a button. i am bold" />
</mx:Application>

嵌入了Verdana 字体的三种打印机字体样式,并对程序设置了默认字体。对Application 应用类型选择器,程序中的所有文本使用嵌入的字体。因为Button 实例中默认样式的fontWeight 样式属性值为bold,本例中你不需为应用于按钮而声明样式因为粗体字已嵌入而且在Application 选择中使用fontFamily 默认设置。

你也不例外可以在@font-face 指令中通过使用local 函数替代url 函数来依靠指定字体名而不是位置的方法嵌入字体:
+展开
-CSS
@font-face
{
src: local('Verdana');
font-family: MyVerdana;
font-weight: bold;
}

当使用local 函数时,你不需要指明打印机字体名称(例如本例中的verdanab),反而要指明字体名称。可以通过在声明中添加相对应属性来嵌入粗体、斜体及粗斜体打印机字体。

将字体嵌入程序中会使SWF 文件尺寸变大。前面的例子演示了为所有可用的字符集嵌入字体的大概。你能根据嵌入的字体在@font-face 规则中通过声明字符范围可以膨胀程序的原理缩小尺寸:
+展开
-CSS
@font-face
{
src: local('Verdana');
font-family: MyVerdana;
unicodeRange: U+0041-U+005A, U+0061-U+007A, U+002E;
}

你能利用unicodeRange 属性明确待嵌入的一系列或单一字符。子集的声明中间用逗号分开。

你能利用连字符(-)同时声明单个字符来明确范围。本例中,标准拉丁字母的大小写符号(A至Z 与a 至z) 和句点(.) 符号都被嵌入了。

加支付宝好友偷能量挖...


评论(0)网络
阅读(94)喜欢(0)flash/flex/fcs/AIR