【发布时间】:2012-03-28 12:04:42
【问题描述】:
在菜单栏中,通常子菜单显示在右侧。我想换到左侧。谁能告诉我,我该怎么做?
【问题讨论】:
在菜单栏中,通常子菜单显示在右侧。我想换到左侧。谁能告诉我,我该怎么做?
【问题讨论】:
子菜单的弹出位置由 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{
}
所以,试试使用代码中的setStyleName("css goes here")
【讨论】:
我再次建议您覆盖默认样式 GWT:) 当我不得不更改 GWT 元素的一些标准视图时,我在我的项目中使用了这种方法。
【讨论】:
我也能够通过更改 css 来实施解决方案。也许这不是最优雅的方式,但它确实有效。使用 GwtQuery 的最接近()方法的一点帮助,这里是一个简短的例子。
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);"将向上搜索 DOM 树,直到找到具有 .gwt-MenuBarPopup 类的元素,这是您要更改的元素。
【讨论】:
我的解决方案与目前在此处发布的解决方案有些混合,但我认为它比其中任何一个都更干净/更简单。
每个垂直子菜单本身都是一个MenuBar,作为项目添加到顶层
MenuBar。对于您想要放置到左侧而不是右侧的任何子菜单,请在该 MenuBar 小部件上使用 .addStyleName("myLeftDropDownStyleName") 为其添加样式类名称。
像这样为该样式定义选择器规则(这些是我获得左下角所需的最低属性):
.myLeftDropDownStyleName{
position: absolute;
right: 0px;
}
Absolute 相对于第一个非静态位置的父元素的位置;至少就我而言,该父位置似乎是水平位置,否则下拉菜单的左边缘没有此解决方案。如果Relative 职位在其他人的情况下可能会更好,我不会感到惊讶。
0px 的右偏移量告诉绝对位置的正确位置在我上面提到的那个水平位置。当然,像素大小可以是 > 0 以进一步向左推那么多,甚至可以是
这对我来说非常有效,简单干净,并且不会强制 所有 您的 MenuBars 具有这种样式(我认为如果您覆盖其中一种 GWT MenuBar 样式就会出现这种情况自己)。
【讨论】: