我正在开发一个带有导航覆盖(节点和子节点)的响应式网站。导航应拆分为 4 列用于桌面视图或 2 列用于平板电脑视图。<ul />
这是一个嵌套列表导航,因此围绕它构建了一个列。我的想法是,只需将导航写在 1 列中,然后使用 jquery 将其动态排列为 4 或 2 列。
html:
<!-- overlay -->
<nav class="overlay">
<!-- ul for column -->
<ul>
<!-- nodes & subnodes -->
<li><a href="#">node</a>
<ul>
<li><a href="#">subnode</a></li>
<li><a href="#">subnode</a></li>
<li><a href="#">subnode</a></li>
<li><a href="#">subnode</a></li>
</ul>
</li>
<li><a href="#">node</a>
<ul>
<li><a href="#">subnode</a></li>
<li><a href="#">subnode</a></li>
<li><a href="#">subnode</a></li>
<li><a href="#">subnode</a></li>
<li><a href="#">subnode</a></li>
<li><a href="#">subnode</a></li>
<li><a href="#">subnode</a></li>
<li><a href="#">subnode</a></li>
</ul>
</li>
<li><a href="#">node</a> ...
</ul>
</nav>
我写了这个函数:
$.fn.arrangeObjects = function(wrapWith, maxCols) {
this.each(function() {
if ($(this).parent(wrapWith).length) $(this).unwrap();
});
this.parent().each(function() {
var $el = $(this).children();
amount = $el.length,
wrapAmount = amount / maxCols;
for (var i = 0; i < amount; i += wrapAmount) {
$el.slice(i, i + wrapAmount).wrapAll('<'+ wrapWith +'/>');
}
});
};
用于台式机:
$(".overlay > ul > li").arrangeObjects('ul', 4);
用于平板电脑:
$(".overlay > ul > li").arrangeObjects('ul', 2);
此解决方案将节点分成等份的列。不幸的是,这样看起来不太好:http:
//bern09.ch/notgood.png
我想要实现的是排列几乎相同的列高,如下所示:
http ://bern09.ch/good.png
我必须以某种方式尊重子节点的数量,但我真的不知道如何实现这一点。也许有人有很好的提示,我们将不胜感激。