2012-03-28 15 views

答えて

1

ポップアップ位置がメニュー項目の位置に基づいて、レンダリングにCSS要素によって定義されます。それは、生産メインメニュー経由のFirebugを探し

element.style { 
    clip: rect(auto, auto, auto, auto); 
    left: 337px; // Change this to left:35px; 
    overflow: visible; 
    position: absolute; 
    top: 319px; 
    visibility: visible; 
} 

// This is main CSS for popup 
.gwt-MenuBarPopup{ 
} 

そうで、私もCSSを変更することにより、ソリューションを実装することができましたコード

+0

ちょっとHardik、URのお返事ありがとうございます。私は同じことをしてそれを達成しました。 – PVR

+0

Ranna:よく聞いてください –

+2

実際には ".gwt-MenuBarPopup"のメニューグループではなく、ポップアップのメニューグループに実際にaddStyleNameを行うことができます。メニューバーのポップアップは、ユーザーの操作(ホバー、クリック)に応じて必要になるまで作成されないため、ポップアップをそのインデックスでスタイルすることさえできません。そのDOMコンテナには親が全くないので、実際にはその親によっても。私はもう一つのポップアップの位置を別のものとする方法を見つけていません(たとえば、最後にポップアップする必要があるのは最後のアイテムです)。 MenuBarクラスのアラインメント能力を持たないことを大いに監視しているようです。 – eon

0

私は再び、私はGWT-要素のいくつかの標準的なビューを変更しなければならなかったときGWTは:)私は私のプロジェクトで、この方法を使用するデフォルトのスタイルを上書きすることをアドバイス。サブメニューの

+0

私は、それだけでそれができることを知っています。しかし、どのスタイルを上書きする必要があるのか​​教えてください。 – PVR

+2

Firebugにサンプルのメニューバーを開き、メニューバーのすべてのアイテムにCSSスタイルのクラス "gwt-MenuItem"があることを確認しました。また、各項目には、 "gwt-uid-1"、 "gwt-uid-2"などの識別子があります。要素の既定のスタイルをオーバーライドする場合は、ホストページ、CSSファイルに接続し、必要な罫線とIDの新しいプロパティを作成します。 GWTスクリプトを接続した後に、CSSファイルをホストページのセクションヘッダーの最後に接続することをお勧めします。そうしないと、デフォルトのスタイルを変更できません。あなたがしたい場合、私はそれをしたようにポイントを記述することができます) –

0

からsetStyleName("css goes here")を使用してそれを試してみます。多分これは最もエレガントな方法ではないが、それは機能する。 GwtQueryのclosest()メソッドの助けを借りて、ここに簡単な例を示します。

 menuBar.addAttachHandler(new AttachEvent.Handler() {    
     @Override 
     public void onAttachOrDetach(AttachEvent event) { 
      if(event.isAttached()){ 
       Scheduler.get().scheduleDeferred(new ScheduledCommand() {      
        @Override 
        public void execute() { 
         Element e = $(menuBar).closest(".gwt-MenuBarPopup").get(0); 
         e.getStyle().setLeft(parentMenuBar.getAbsoluteLeft()-menuBar.getOffsetWidth() , Unit.PX); 
        } 
       });     
      } 
     } 
    }); 

子供のサブメニューが添付されていると考えられるので、CSSを変更する必要があります。私はGWTのデフォルトのMenuBar実装がそれを設定した後にcssを変更するように、遅延コマンドを使用します。 この行 "$(menuBar).closest("。gwt-MenuBarPopup ")。get(0);"変更したいクラス.gwt-MenuBarPopupを持つ要素が見つかるまで、DOMツリーを検索します。

0

私のソリューションは、やや、これまでここに掲載それらのハイブリッドのですが、私はそれがそれらのいずれかよりも簡単/きれいだと思います。

  1. 各垂直サブメニューはMenuBar自体は、トップレベル MenuBarに項目として追加。どちらのサブメニューでも、右の代わりに左にドロップしたい場合は、MenuBarウィジェットの.addStyleName("myLeftDropDownStyleName")を使用してスタイルクラス名を追加します。

  2. (これらは、私は左のドロップを取得するために必要であった最低限の属性です)このようなそのスタイルのためのセレクタルールを定義します。最初からの相対

    .myLeftDropDownStyleName{ position: absolute; right: 0px; }

Absolute位置static以外の位置を持つ親要素。少なくとも私の場合、親の位置は、この解決策がなければドロップダウンに左端がある水平な場所のようでした。 Relativeポジションが他の人のケースでうまくいくかもしれないと私は驚かないだろう。

0PXのオフセット右は、私は上記のように水平な場所にあると絶対位置の右に指示します。そしてもちろん、ピクセルサイズはそれ以上左にプッシュするために0以上にすることもできますし、< 0でもそれを右に戻すことができます。

これは私のために完璧に動作し、簡単な&きれいで、(私はあなたがGWTメニューバーのスタイルその人自身のいずれかをオーバーライド場合ケースだと思うと)このスタイルを持っているあなたのMenuBarののすべてを強制するものではありません。

関連する問題