jQuery contextMenu子菜单与主菜单间距过大对齐偏移问题
问题根因
子菜单偏移完全是自定义样式干扰组件原生定位、手动硬编码坐标导致的,具体触发点:
- 写的全局样式
.ui-menu .ui-menu-item会同时命中主菜单和嵌套子菜单的所有菜单项,强制加的25px左外边距直接把定位基准推偏 - 子菜单的
<ul>标签上硬写了内联样式top:10px; left:120.5px,ui-contextmenu本身会自动计算子菜单弹出位置,手动写的偏移值和组件计算值叠加,直接产生大段空隙 - 给子菜单里Home、Cell选项的图标加了30px、57px的超大
margin-top,把菜单项的实际高度撑得完全不对,组件算垂直位置的时候直接失准 - 额外写的
.ui-menu .ui-front { margin-left: -10px !important; }规则也在乱改菜单偏移,进一步放大错位问题
修复步骤
按顺序改完就能解决:
- 删掉子菜单ul内联样式里写死的
top: 10px; left: 120.5px,只留display: none就够了,子菜单的坐标交给组件自己算,别手动硬写。 - 把菜单项边距规则的作用范围收窄,别让它影响子菜单。原来的全局规则:
.ui-menu .ui-menu-item { margin-left: 25px !important; margin-top: 5px !important; }
改成只给一级主菜单加边距:
#callOptions > .ui-menu-item { margin-left: 25px !important; margin-top: 5px !important; }
- 删掉子菜单图标上那几个几十像素的
margin-top,图标对齐用vertical-align: middle加最多5px的顶部微调就行,用大margin硬顶会把菜单项高度搞乱,直接影响位置计算。 - 删掉
.ui-menu .ui-front { margin-left: -10px !important; }这条冗余规则,组件自己会处理菜单层级和偏移,不需要手动加负边距瞎调。
改完之后子菜单会自动贴在主菜单对应选项的右侧弹出,不会再出现隔很远的偏移问题。

内容的提问来源于stack exchange,提问作者user1181942
相关产品推荐
相关产品推荐

