2

我目前正在尝试在 CssResource 文件中使用条件 CSS,如此处所述但我对“ <deferred-binding-property>”部分有点不清楚。

这些属性必须在哪里定义?我想认为<define-property>当前正在编译的模块的继承树中的任何标记都是可用的,但这似乎不是真的。我真的在网上找不到任何关于此的文档。

就我而言,我正在处理的项目由两个应用程序组成,每个应用程序都有自己的 GWT 模块,但它们都继承了一个包含共享代码的“核心”模块,包括带有@if语句的 ClientBundle/CssResource。我希望评估的延迟绑定属性在另一个 gwt 模块文件formfactor.gwt.xml中定义。

我正在尝试使用以下内容:

@if formfactor mobile{
  .wrapper{
     top:50px;
  } 
}

一切 gwt 编译没有任何错误。模块文件本身基于“formfactor”属性的任何延迟绑定都被正确评估(即,我正在按预期获得“移动”特定的视图)。块中没有任何 css 规则@if被注入。

我已经尝试在核心 gwt.xml 文件和应用程序 gwt.xml 文件中继承 formfactor.gwt.xml,并且都按照上一段中的描述工作。

如果我@else在 CssResource 文件中包含一条语句,则@else块中的代码确实会被注入,但如果我包含@elif formfactor desktop tablet(为 formfactor 属性定义的唯一其他两个值),则不会注入@if块和@elif块。

更新 - 虽然我仍然认为明确回答问题会很有用,但我的 CssResource 文件似乎确实在范围内具有 formfactor 属性。该问题似乎与 GWT 问题 4697 ( code.google.com/p/google-web-toolkit/issues/detail?id=4697) 有关,其中 @if/@elif/@else 语句的最后一个子句总是被注入,而不管被评估的 deferred-binding-property 的值如何。

在我的情况下,一种解决方法是简单地在普通 css 中设置“标准”值,然后手动更改 @if 块中的值,例如:

.wrapper{ 
  top:66px; 
  ... 
}
@if formfactor mobile {
  .wrapper{
    top:50px;
  }
}

只要您不在条件内使用@def 语句,则仅当条件评估为真时才会注入第二条规则。

我意识到这可能不适用于所有 css 规则,因为它本质上为规则定义了第二个值而不删除第一个值,但这只是一种解决方法!

4

0 回答 0