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}

したがって、css1.style1 を css2.style2 (別のクラス名) で部分的にオーバーライドしたいと思います。

これが普通の 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 では不可能です。

1 つのスタイル メソッドごとに 2 つのスタイル クラス名を割り当てる方法はありますか?

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またはのいずれかに複数のスタイルルールを設定しないのはなぜ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}

結果はstyle110x20にstyle2なりますが、10x30になります。@ClassName注釈を使用してCssResource2、以前に定義したスタイルを多かれ少なかれ無視することができます。

于 2012-07-10T03:45:23.143 に答える