【发布时间】:2012-12-13 01:37:05
【问题描述】:
我正在开发一个带有导航覆盖(节点和子节点)的响应式网站。导航应拆分为 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
我必须以某种方式尊重子节点的数量,但我真的不知道如何实现这一点。也许有人有很好的提示,我们将不胜感激。
【问题讨论】:
-
似乎节点数只是您应该考虑的标准之一。您可能需要计算里面的内容量。有关在这些节点中可以找到的内容的更多信息将很有帮助。我喜欢你的想法,我现在正在研究我的解决方案:)我会在完成后立即分享:)
-
感谢您的努力 op1ekun。您询问有关节点内容的更多信息,您的确切含义是什么信息?我的问题只是关于拆分导航条目(这就是我对“节点”的意思)。请让我知道我是否应该编辑上面的代码以获取更多信息。
-
好的,你只需要它来导航,而且都是关于链接的 :) 我固定在更通用的解决方案上,这就是我要求内容的原因。
标签: jquery html split responsive-design