更改GWT子菜单弹出位置
在菜单栏中,子菜单通常显示在右侧。我想换到左手边。谁能告诉我,我该怎么做呢?我再次建议您覆盖默认样式GWT:)当我不得不更改GWT元素的一些标准视图时,我在我的项目中使用了此方法。我再次建议您覆盖默认样式GWT:)当我不得不更改GWT元素的一些标准视图时,我在我的项目中使用了此方法。弹出窗口位置子菜单由CSS元素根据菜单项的位置在渲染时定义 通过Firebug在其生成的主菜单上查看:更改GWT子菜单弹出位置,gwt,menubar,Gwt,Menubar,在菜单栏中,子菜单通常显示在右侧。我想换到左手边。谁能告诉我,我该怎么做呢?我再次建议您覆盖默认样式GWT:)当我不得不更改GWT元素的一些标准视图时,我在我的项目中使用了此方法。我再次建议您覆盖默认样式GWT:)当我不得不更改GWT元素的一些标准视图时,我在我的项目中使用了此方法。弹出窗口位置子菜单由CSS元素根据菜单项的位置在渲染时定义 通过Firebug在其生成的主菜单上查看: element.style { clip: rect(auto, auto, auto, auto);
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”)
子菜单的弹出位置由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”)
尝试一下,我也可以通过更改css实现一个解决方案。也许这不是最优雅的方式,但它确实有效。下面是一个简短的示例,使用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的默认菜单栏实现设置css后更改css。
此行“$(menuBar).closest(.gwt MenuBarPopup”).get(0);”将搜索DOM树,直到找到类为.gwt MenuBarPopup的元素,该类是您要更改的元素。我还可以通过更改css来实现解决方案。也许这不是最优雅的方式,但它确实有效。下面是一个简短的示例,使用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的默认菜单栏实现设置css后更改css。
这一行“$(menuBar).closest(“.gwt MenuBarPopup”).get(0);”将搜索DOM树,直到找到类为.gwt MenuBarPopup的元素,这是您要更改的元素。我的解决方案在某种程度上是目前为止发布的解决方案的混合体,但我认为它比它们中的任何一个都更干净/简单
菜单栏
,作为项目添加到顶层
菜单栏
。对于要放到左边而不是右边的任何子菜单,请使用该菜单栏上的.addStyleName(“myLeftDropDownStyleName”)
向其添加样式类名
.myLeftDropDownStyleName{
位置:绝对位置;
右:0px;
}
这对我来说非常有效,简单明了,并且不会强迫你所有的菜单栏都采用这种风格(我认为如果你自己对其中一种GWT菜单栏风格进行了改写,情况就是这样)。我的解决方案在某种程度上是迄今为止在这里发布的解决方案的混合体,但我认为它比它们中的任何一种都更干净/简单
菜单栏
,作为项目添加到顶层
菜单栏
。对于要放到左边而不是右边的任何子菜单,请使用该菜单栏上的.addStyleName(“myLeftDropDownStyleName”)
向其添加样式类名
.myLeftDropDownStyleName{
位置:绝对位置;
右:0px;
}
这对我来说非常有效,简单明了,并且不会强迫你所有的菜单栏都使用这种样式(我认为如果你自己对其中一种GWT菜单栏样式进行了重写,就会出现这种情况)。我知道这只能通过这种方式来实现。但是你能告诉我需要覆盖哪些样式吗?我在firebug中打开了一个示例菜单栏,看到所有菜单栏的项都有CSS样式类“gwt MenuItem”。此外,每个项目都有其标识符,如“gwt-uid-1”、“gwt-uid-2”等。如果要覆盖元素的默认样式,请连接到主机页、CSS文件并为所需的类和ID写入新属性。我建议您在连接GWT脚本之后,将CSS文件连接到主机页的节头的末尾,否则更改无法覆盖默认样式。如果你愿意的话,我可以描述我所做的事情)我知道这只能通过这一点来实现。但是你能告诉我需要覆盖哪些样式吗?我在firebug中打开了一个示例菜单栏,看到所有菜单栏的项都有CSS样式类“gwt MenuItem”。此外,每一项都有我