GWT在另一个GSS文件中覆盖GSS样式

时间:2017-09-12 17:34:49

标签: css gwt gss

由于我的应用程序变大了,我决定每个"模块"我的应用程序,将有自己的资源文件,样式文件和GSS文件。此外,例如按钮的样式将位于不同的全局GSS文件中,因为它更像是应用程序使用的应用程序样式。

这不是问题,但是当我想做这样的事情时:

.buttonGroup>.button.active{ background-color: red}

在其中一个模块中,它与任何内容都不匹配。

由于在不同的(全局)GSS文件中指定了按钮样式(buttonGroup,按钮,活动)和行为(添加"活动"点击类),我无法更改样式"有源"类。

这是一个简化的例子:

public interface AppResources extends ClientBundle {

    public static AppResources INSTANCE = GWT.create(AppResources.class);

    @Source({"style.gss"})
    AppStyle appStyle();
}

样式文件:

public interface AppStyle extends CssResource {

    String buttonGroup();
    String button();
    String active();
}

模块:

public interface ModuleResources extends AppResources{

    public static ModuleResources INSTANCE = GWT.create(ModuleResources.class);

    @Source({"style.gss","module.gss"})
    ModuleStyle moduleStyle();
}

样式文件:

public interface ModuleStyle extends AppStyle {
}

在GSS文件中,我尝试使用@provide和@require(没有它就不会编译,因为它会缺少标识符或类)。

然后它编译得很好,但是按钮组,按钮甚至活动类都被视为属于AppStyle,因此使用了style.gss样式和规则:

.buttonGroup>.button.active{ background-color: red}
module.gss中的

与任何内容都不匹配,因为它可能正在寻找 .hash-ModuleStyle-buttonGroup .hash-ModuleStyle-button .hash -ModuleStyle-active 类,而按钮上的实际样式为 .hash-AppStyle-buttonGroup 等。

2 个答案:

答案 0 :(得分:0)

最后,我通过在我想要在不同的GSS样式表中使用的类上使用@external来解决它。

通过使用@external来自小部件的所有类(具有自己的样式表),保持其类名称不被混淆,以便可以在任何模块样式表中覆盖它们。

我以前不想这样做,但这是我能想到的唯一解决方案。

答案 1 :(得分:0)

这实际上正是@Import要解决的问题!