解决蝉知CMS的三级菜单错位

最近在用蝉知CMS,发现了其导航菜单有一些不容易发现的小错误。上一篇文章解决了导航菜单的大小限制,这里我再描述一下如何处理三级菜单的错位问题。

我已经将该bug提交给开发商,但最终还是自己先解决了。

问题描述

如果导航菜单最右一项有三级菜单,则该三级菜单会向左移动,并且出现错位。

原因分析

通过Firefox的审查元素工具,发现,该三级菜单的left属性为-100%

这里的-100%是相对于父容器元素的宽度而言的。

由于二级菜单的菜单项“关于我们”的宽度为160px,其子元素三级菜单A的展开宽度为150px,则三级菜单A会与二级菜单有90px的重叠。这会导致菜单项“关于我们”被遮盖而无法看到。

 

同理,二级菜单的菜单项“媒体工具箱、标识使用、白皮书”的宽度为196px,其子元素三级菜单B的展开宽度为158px,则三级菜单B与二级菜单之间会产生38px的空隙。这个会导致三级菜单B无法点击。

解决办法

既然已找出原因,我的解决思路就很明确了:先确定各个三级菜单的宽度,然后将特定的三级菜单向左移动其对应的宽度。

由于下拉菜单(包括二级菜单和三级菜单)默认情况下是折叠的,无法计算宽度。因此,要在将宽度计算及位置变更的操作绑定在resize事件处理函数里。

蝉知CMS已配备了jQuery,可以直接采用jQuery

$(document).ready(function () {
	$("#navbar ul.navbar-nav .dropdown-submenu.pull-left .dropdown-menu").on("resize", function () {
		var offset_size = $(this).width();
		if (offset_size > 0) {
			$(this).attr("style", "left: -" + offset_size + "px");
		}
	});
});

将上述代码粘贴到蝉知后台的JavaScript代码区,保存后即可生效。

更多的话

尽管jQuery早已成明日黄花,风光不再,但它已成为众多网站的底层组件之一,仍旧兢兢业业地发挥作用。

Web应用极其复杂,边边角角的坑很多。灵活应用浏览器的开发工具,可以查找问题并导向解决办法。

其实我是做营销的,为啥必须自己去开发网站呢?