0

在 CssResource 中,我可以从同一方法返回多个样式类名称吗?

[请原谅代码中的任何错误-我正在尝试根据记忆在家里重新创建]。我有以下库代码(我无法更改):

void render(ClientBundle1 bundle) {
    setInnerHtml("<div class=\" + bundle.css().style() + \"/>");
}

捆绑包是直截了当的:

interface ClientBundle1 extends ClientBundle {
    @Source("css1.css")
    CssResource1 css();
}

和CSS资源:

interface CssResource1 extends CssResource {
    style1();
}

和 css1.css:

.style1 {width=10; height=20}

现在-我想_部分_用我自己的css(css2.css)的另一种样式(仅覆盖高度,而不是宽度)覆盖“style1”。但是,我的 css2.css 声明如下:

.style2 {height=30}

所以我想用 css2.style2 (不同的类名)部分覆盖 css1.style1 。

如果这是普通的 HTML,我会写:

...导入 css1 然后 css2 ...

  <div class="style1 style2"/>

但是,由于这是 GWT,我需要这样的东西:

interface ClientBundle2 extends ClientBundle1 {
    @Source("css1.css", "css2.css")
    CssResource2 css();
}

和CSS资源:

interface CssResource2 extends CssResource1 {
    @Classname("style1", "style2")
    style();
}

但当然,以上在 GWT 中是不可能的。

有没有一种方法可以为每个样式方法分配两个样式类名称?

4

1 回答 1

2

几个选项,其中没有一个正是您所要求的:

添加多个类:

就像您所说的那样,无论您在哪里应用该样式,都可以<div class="style1 style2"/>添加两种样式。如果在 UiBinder 中,请执行类似的操作<g:Widget addStyleNames="{css.style1} {css.style2}" />,如果在 Java 中,只需添加两个类:

widget.addStyleNames(css.style1() + " " + css.style2());

或者

widget.addStyleNames(css.style1());
widget.addStyleNames(css.style2());

仅覆盖该样式:

style1为什么不为or设置多个样式规则style2?几种方法,取决于你的追求:

css1.css:

.style1 {width:10px; height:20px}

和 css2.css:

.style1 {height:30px}

在这个 CssResource/ClientBundle 中使用:

interface CssResource2 extends CssResource1 {
    String style();
}
interface MyClientBundle extends ClientBundle {
    @Source({"css1.css", "css2.css}) 
    CssResource2 css();
}

将导致(或多或少)这种风格:

.style1 {width:10px; height:30px}

因为后来的具有相同权重的 CSS 规则会覆盖早期的规则。

或者,类似:

css1.css:

.style1, .style2 {width:10px; height:20px}

css2.css:

.style2 {height:30px}

将导致任何内容为 10x20 style1,而任何内容style2均为 10x30。注释可@ClassName用于CssResource2或多或少地忽略先前定义的样式。

于 2012-07-10T03:45:23.143 回答