在尝试将绝对定位的HorizontalContainer插入其他容器时,我遇到了奇怪的问题。如果兄弟姐妹仍然被渲染(有一个面具设置),这个绝对容器会推动他的下一个兄弟的宽度。
示例:
//parent container, holding all the widgets
HorizontalLayoutContainer hlc;
//widgets that are inserted into hlc container from the start
HBoxLayoutContainer hbox1;
HBoxLayoutContainer hbox2;
HBoxLayoutContainer hbox3;
//container that's inserted into hlc onMouseOver event. It can be inserted while hlc hboxes are still being rendered
HorizontalLayoutContainer panelContainer = new HorizontalLayoutContainer();
panelContainer.getElement().getStyle().setZIndex(13);
panelContainer.getElement().getStyle().setPosition(Position.ABSOLUTE);
panelContainer.getElement().getStyle().setWidth(55, Unit.PX);
panelContainer.getElement().getStyle().setHeight(18, Unit.PX);
panelContainer.getElement().getStyle().setFloat(Float.LEFT);
现在让我们假设一个用户将鼠标悬停在hlc容器上,该容器有hboxes1-3,但是其中一些容器有一个掩码集(数据仍在加载),如hbox1.mask()
。 onMouseOver事件panelContainer
被插入到hlc:
hlc.insert(panelContainer, 0, new HorizontalLayoutData(55, 18));
但是,由于仍在渲染hbox,因此panelContainer将hbox1向右推55px(长度)。即使它有position:absolute;
。
left:55px; should be left: 0px;
-->
|panleContainer|hbox1|hbox2|hbox3|
有任何建议我应该如何正确插入panelContainer
?为什么忽略绝对定位?
注意:
如果我等待渲染hbox,正确插入panelContainer,不会推送hbox1。
澄清以避免xy问题:
简短摘要:添加一个绝对定位的框(为了清晰起见,我们称之为DragBox),它具有预定义的宽度到现有容器(WidgetBox)。 WidgetBox是一个HorizontalLayoutContainer,它有2个或3个HBoxLayoutContainer。 WidgetBox子级(HBoxLayoutContainers)的宽度为百分比。示例:如果WidgetBox有2个子节点,它们的宽度为0.3和0.7,如果是3个子节点,则宽度为0.3,0.4,0.3;
WidgetBox的大小由其父级(SimpleContainer-> VerticalLayoutContainer-> WidgetBox)决定。
期待:当鼠标悬停在任何WidgetBox容器上时,会添加一个新项目(DragBox)作为WidgetBox的第一个元素。无论如何它不应该影响WidgetBox子节点。它应该充当绝对(在WidgetBox边界内)框。
结果:如果强制WidgetBox或其父级布局(通过forceLayout()),则DragBox会影响第一个WidgetBox子级。如果未使用forceLayout(),则DragBox不会影响WidgetBox子项。