我想弄清楚到底是什么css包含在标准调用中找到的currentDesign.writeCssIncludes(pagecontext);
在headlib .jsp。文档简单地说明了它是
Convenience method that writes the CSS include strings to the response.
看看它似乎要做什么,它将包括/etc/designs/currentdesign.css
,这是建立在设计组件css,和/etc/designs/currentdesign/static.css
,这只是一个静态文件。但这就是它的全部内容吗?
<link rel="stylesheet" href="<%= currentDesign.getPath() %>/myclientlib.css" />
但是我更喜欢让它自动生成,这样我的设计师就可以灵活地为不同的设计构建不同的css文件(即,对于"基础"设计,他们只需要一个static.css
文件就可以了,但是对于"花哨"设计,他们想要使用更少的css并更精细地分解文件)。将特定于设计的css信息与它们所影响的组件放在一起会更有帮助,而不是需要将它们分开。
您可以使用<cq:includeClientLib>
标签,结合主题和/或类别,混合和匹配CSS的位
但是你可能会发现它有些限制;例如,您不能指定媒体属性。如果你需要这样做,或者你的设计师没有以适合主题/类别模型的方式构建他们的CSS,你的退路是你在问题中确定的技术,直接使用<link>
。
一个关于主题的好问题!我只是顺带看到过它们的使用。
您可以通过在/etc/designs/yourproject/clientlibs/themes
下添加一个新文件夹/节点来定义主题,作为default
的兄弟。
您可以使用<cq:includeClientLibs>
标记为主题拉入客户机库,也许是在一些条件逻辑的控制下。例如,在我的一个项目中,我有一个名为authoring
的主题,我只想将其应用于作者实例;我用headlibs.jsp
:
<c:if test="${ (global['wcmmode'] eq 'EDIT') || (global['wcmmode'] eq 'PREVIEW') }">
<cq:includeClientLib theme="apps.myproject.authoring" />
</c:if>
我还没有看到任何文档会自动将主题应用于内容树的特定子树,或者基于标签的存在。
在Adobe文档中有一个神秘的语句"主题名称是从请求中提取的",这是由Sling文档中的这条语句支持的,"ThemeResolverFilter为请求提供主题。"主题作为请求属性提供。"因此,也许将&theme=apps.yourproject.foo
添加到查询字符串上将应用该主题。
CSS文件列表基于页面的属性'cq:designPath'