【问题标题】:Embed external CSS in Flex's swf file在 Flex 的 swf 文件中嵌入外部 CSS
【发布时间】:2012-09-20 19:28:14
【问题描述】:

我希望一些 Flex (SDK 4.6) 应用程序共享相同的样式表(存储在 CSS 文件中)。但是,我不想沿着这些应用程序的 SWF 分发独立文件,而是想将 CSS 文件嵌入到 Flex 应用程序文件中(就像嵌入图像等一样)。 CSS 声明包含字体嵌入,因此(我认为)不可能在运行时加载 CSS。

我已经发现了什么:

  1. 我不能简单地使用<fx:Script source="@Embed(stylesheet.css)" />。语法错误。

  2. 我不能在某些应用程序之间共享的 MXML 组件中使用内联样式表,因为 CSS 包含组件中不允许的类型声明。

  3. 我可以选择将 CSS 编译为 SWF,但这会创建独立的 SWF 文件(因此我可以将 Flex 框架嵌入到 SWF 中,但不能嵌入独立的 CSS ;])。

我希望我遗漏了一些明显的东西,这很容易实现。

【问题讨论】:

    标签: css apache-flex stylesheet embedded-resource


    【解决方案1】:
    • 创建库项目(生成 swc 文件)
    • 将样式表添加为资源
    • 将此项目(或编译后的 swc)放在其他项目的构建路径中
    • 您现在可以在其他项目中使用此资源:
      <fx:Style source="stylesheet.css" />

    作为示例
    在图书馆项目中,您有 src/stylesheet.css
    如果src 是源文件夹,则该文件应自动打包到库中
    如果不是,您将不得不手动添加文件:在 FlashBuilder 中,这可以通过Build path 编辑器的Assets 选项卡完成。在命令行中,使用-include-file 选项添加它。

    使用 swc 作为库依赖项的替代 是将其定义为 主题 依赖项。在 FlashBuilder 中,项目属性中有一个Theme 向导。在命令行执行:

    mxmlc -theme="/path/to/my/theme.swc" MyApp.mxml
    

    如果您将其用作主题,您甚至不必在应用程序中包含fx:Style 标记。默认情况下包含 CSS。但我认为它必须命名为defaults.css

    【讨论】:

    • 这让我很困扰:为什么 CSS 文件会自动包含在“库”项目 (SWC) 中而不是“应用程序”项目 (SWF) 中?任何想法? :]
    • A .swf 是一个包含所有已编译字节码的文件(有点像 Java .class 文件)。另一方面,.swc 只不过是一个存档(如.zip 或Java .jar 文件),其中包含带有库字节码的.swf,以及您想要添加到其中的任何其他文件,就像一个 CSS 文件。因此,就其本质而言,.swf 不能包含其他文件,并且 CSS 是一种解释性语言,不能编译(因此不能编译成 swf)。
    • 但是 .swf 不能像包含图像文件一样包含 CSS 文件吗?如果你将.swc 链接到最终的.swf,那么这个最终的.swf 有效地包含原始CSS,不是吗? :]
    • 谢谢,RIAstar,我会试试你的解决方案,但就个人而言,构建一个库来嵌入一个简单的 CSS 文件是一个相当大的开销...... :-)
    • @KubaWyrostek 当您将图像文件嵌入swf 时,您不会包含文件本身,而是包含其内容。图像被序列化为分配给变量的 ByteArray,所有这些都被编译为字节码。我想理论上你也可以编译 CSS 文件的内容(在这种情况下作为字符串变量)并将这个字符串作为样式声明加载,但是这种加载只能在运行时完成。
    猜你喜欢
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2012-08-15
    相关资源
    最近更新 更多