当有许多孩子而没有“孙子”节点时,超级鱼下拉列表会被列

时间:2010-05-28 19:21:04

标签: jquery css superfish

我有一个使用jquery superfish的水平导航菜单。在我的一个下拉菜单中,其中不再有下拉菜单(即没有孙子节点),但有几个孩子(现在确切地说是45个孩子,它可能会及时上升或下降)。我正试图找到一种方法让下拉列表在一定数量之后被列好。 15很适合我,因为有45个。所以没有显示所有包含这里的HTML列表 - 并且为了更少的代码我会使用15:

<ul class="sf-menu sf-js-enabled sf-shadow" id="menu-1">
  <li class="current"> <a href="#a" class="sf-with-ul">menu item<span class="sf-sub-indicator"> »</span></a>
    <ul style="display: none; visibility: hidden;">
      <li> <a href="#aa">menu item</a> </li>
      <li> <a href="#ab">menu item</a> </li>
      <li> <a href="#ac">menu item</a> </li>
      <li> <a href="#ac">menu item</a> </li>
      <li> <a href="#ad">menu item</a> </li>
      <li> <a href="#aa">menu item</a> </li>
      <li> <a href="#ab">menu item</a> </li>
      <li> <a href="#ac">menu item</a> </li>
      <li> <a href="#ac">menu item</a> </li>
      <li> <a href="#ad">menu item</a> </li>
      <li> <a href="#aa">menu item</a> </li>
      <li> <a href="#ab">menu item</a> </li>
      <li> <a href="#ac">menu item</a> </li>
      <li> <a href="#ac">menu item</a> </li>
      <li> <a href="#ad">menu item</a> </li>
    </ul>
  </li>
  <li> <a href="#">menu item</a> </li>
  <li> <a href="#">menu item</a> </li>
  <li> <a href="#">menu item</a> </li>
</ul>

所以如果我希望列从5开始,我就有3列。我无法弄清楚我是如何做到这一点而不是打破一切。我尝试过使用一些css并没有找到解决方案。

1 个答案:

答案 0 :(得分:3)

如果列表中有45个项目,我建议您使用mega dropdown脚本而不是superfish。

更新:如果你想要一个很好地降级的多列下拉菜单,那么为什么不去寻找一个CSS菜单呢?查看multi-column menupro dropdownlist 1prodropdown list 2CSS3 multi-slide甚至是vertical flyout list


更新#3:好的,既然我的OCD强迫我弄明白这一点,我今天在这个问题上工作了一段时间。它不是那么漂亮,但它有效。这是a demo

您必须稍微重新格式化HTML:

<ul class="sf-menu">
 <li>
  <a href="#a">menu item</a>
  <div class="listwrap">
   <div class="listblock">
    <ul>
     <li><a href="#">menu item</a></li>
     ...
     <li><a href="#">menu item</a></li>
    </ul>
   </div>
   <div class="listblock">
    <ul>
     <li><a href="#">menu item</a></li>
     ...
     <li><a href="#">menu item</a></li>
    </ul>
   </div>
  </div>
 </li>
</ul>

将此CSS添加到标准

.sf-menu .listwrap {
 position: absolute;
 top: -999em;
 max-height: 500px;  /* adjust height as desired */
 width: 45em;        /* adjust width as more columns are added (~10em per column + shadow width */
}
.sf-menu .listblock ul {
 position: relative;
 display: block;
 float: left;
 width: 10em;
}
.sf-menu li:hover ul,
.sf-menu li:hover .listwrap,    /* added two definitions to existing one */
.sf-menu li.sfHover .listwrap,
.sf-menu li.sfHover ul {
 left: 0;
 top: 2.5em; /* match top ul list item height */
 z-index: 99;
}
.sf-menu li:hover .listblock ul,
.sf-menu li.sfHover .listblock ul {
 top: 0;
 left: 0;
}