5

我正在尝试使用 data-uri-scheme 将自定义字体包含到 css 中。CQ5(我使用的是 5.5 版)正在将 clientlib 目录中的路径添加到带有 data-uri-scheme 字体数据的 css 文件所在的位置。

因此,不要仅仅忽略 css 属性:

@font-face {
  font-family: 'CustomFont';
  src: url(data:application/x-font-woff;...
  ...
}

CQ5 执行以下操作:

@font-face {
  font-family: 'CustomFont';
  src: url(desktop/css/data:application/x-font-woff;...
  ...
}

这是 CQ5.5 中的错误还是我可以添加/做一些事情来防止添加“桌面/css”

结果是,我得到 404 HTTP 状态,因为字体“未找到”。

[更新]

css 文件包含在base.jsphtml<head>部分中。

<link rel="stylesheet" 
    href="/etc/designs/myproject/clientlib/desktop.css" type="text/css"/ >

地点base.jsp

/apps/myproject/pages/base/base.jsp

地点css.txt

/etc/designs/myproject/clientlib/desktop/css.txt
4

4 回答 4

3

它看起来像一个错误。CSS 通过一个方法传递,该方法专门在连接在一起的 CSS 文件中查找 url('{}') 以创建组合的 CSS 文件 - CssFileBuilder#resolveUrl(String[], String[], String)。此方法似乎没有考虑数据方案,而是仅在 URL 长度为 0、以斜杠 (/) 开头或匹配模式“^[A-Za-z][ A-Za-z0-9+\-.] ://. "(有效的外部链接)。我的假设是它这样做是为了修改相对 url('{}') 值,但它们没有考虑数据方案。

我建议使用 Adob​​e 开一张 Daycare 票以更新此方法以支持 data-uri-scheme。

于 2012-12-22T23:00:03.070 回答
2

解决 CQ5(通常很有帮助)链接重写的两种策略:

(1) 将@font-face 代码放在CQ5 为您组装的外部.css 文件中。除了使用<cq:includeClientLib>标记将其包含在您的 HTML 中,您可能会发现您必须显式编码 <link> 标记,例如:

<link rel="stylesheet" href="<%= currentDesign.getPath() %>/clientlibs/themes/default.css" type="text/css" media="screen" />

(2) 使用 document.write() 调用注入@font-face 代码:

<script type="text/javascript">
    document.write("@font-face { font-family: 'CustomFont'; src: url(data:application/x-font-woff;
    ...}");
</script>
于 2012-12-18T14:52:55.217 回答
2

这是一个错误,将在 5.6 中修复。直接包含单个 css 文件(如前所述)避免了 clientlib 重写,否则我不知道 clientlib 中的解决方法。

原因是客户端库正在重写相对路径,因为基础从单个 css 文件更改为连接的客户端库 css。“数据:” uris 在这里根本没有被正确考虑。

于 2013-01-03T14:10:01.407 回答
0

在没有检查导致错误重写的原因的情况下,我认为它是Day CQ Link Checker Service.

您可能想要添加一个Special Link PrefixorSpecial Link Pattern来防止此模式被识别为链接并被重写。

因此,只需将您的自定义链接检查器配置添加到 /apps/.. (libs 下相应配置的覆盖)并进行上述更改,您应该没问题。

于 2013-01-02T17:58:40.950 回答