如何在li元素的水平组中显示列表?

如何在li元素的水平组中显示列表?

问题描述:

我有一个非常长的名单li大于30项。当我在ul menu下拉列表中显示时,该列表垂直向下延伸,这要求浏览器窗口向下滚动以查看每个列表元素。如何在li元素的水平组中显示列表?

我想要做的是将列表中的每一行分组到显示3 li元素而不是每行一个在ul菜单中。

我所尝试的是将菜单使用的样式.sub-menu li设置为display: inlineas suggested here以在线显示li元素,但这对水平排序没有影响。

所以不是这样:

  • 吉姆
  • 杰克
  • 琼斯
  • 杰克逊
  • 的Jhonny

它会显示这样的(其中列表中的每个三个华里要素水平分组):

简 约翰 贾里德

吉姆 詹姆斯 琼斯

问:

如何在n个元素的水平分组中显示列表?

在我目前的设置我用这个CSS的菜单:

nav li:hover .sub-menu { 
    z-index: 2; 
    opacity: 1; 
    min-width: 100px; 
} 

.sub-menu { 
    width: 100%; 
    padding: 0px 0px; 
    position: absolute; 
    top: 100%; 
    left: 0px; 
    z-index: -1; 
    opacity: 0; 
    overflow: hidden; 
    transition: opacity linear 0.15s; 
    box-shadow: 0px 2px 3px rgba(0,0,0,0.2); 
    background: #425563; 
    text-align: center; 
    display: inline-block; 
} 

    .sub-menu li { 
     display: inline-block; 
     font-size: 15px; 
     float: left; 
     margin-top: 0px; 
    } 

     .sub-menu li a { 
      padding: 10px 5px; 
      display: block; 
      text-decoration: none; 
      text-align: left; 
      z-index: 3; 
     } 

      .sub-menu li a:hover, .sub-menu .current-item a { 
       background: #01a982; 
       -moz-box-shadow: 0 0 5px 0px #888; 
       -webkit-box-shadow: 0 0 5px 0px #888; 
       box-shadow: 0 0 5px 0px #888; 
       color: #000; 
      } 


      .sub-menu li a input { 
       display: inline-block; 

      } 

这是使用子菜单css样式的UL名单:

   <ul class="sub-menu" id="assetNameMenu"> 
        @* li elements created in script *@ 
       </ul> 

花车能做到这一点相当只是。

你刚才清除浮动后,每到这个li

ul { 
 
    list-style-type: none; 
 
} 
 
li { 
 
    float: left; 
 
    padding: 0 1em; 
 
} 
 
li:nth-child(3n+1) { 
 
    clear: both; 
 
}
<ul> 
 
    <li>Item 1</li> 
 
    <li>Item 2</li> 
 
    <li>Item 3</li> 
 
    <li>Item 4</li> 
 
    <li>Item 5</li> 
 
    <li>Item 6</li> 
 
    <li>Item 7</li> 
 
    <li>Item 8</li> 
 
    <li>Item 9</li> 
 
</ul>

对于inline-block存在由@phrogz

ul { 
 
    list-style-type: none; 
 
} 
 
li { 
 
    display: inline; 
 
} 
 
li:nth-child(3n)::after { 
 
    content: "\A"; 
 
white-space: pre; 
 
    ; 
 
}
<ul> 
 
    <li>Item 1</li> 
 
    <li>Item 2</li> 
 
    <li>Item 3</li> 
 
    <li>Item 4</li> 
 
    <li>Item 5</li> 
 
    <li>Item 6</li> 
 
    <li>Item 7</li> 
 
    <li>Item 8</li> 
 
    <li>Item 9</li> 
 
</ul>
在回答详述这 question一个类似的选项

+0

我试着子的李风格编辑菜单但名单仍然相同,没有分成三个。任何想法,为什么这是?这是更新的CSS http://hastebin.com/ijikonawah.css,这是浏览器中的元素的屏幕截图..http://picpaste.com/pics/menu-1M9luEus.1471444731.PNG –

+0

不知道,但我不能从代码图像中分辨出很多东西。你必须做一个适当的演示。 –

+0

我再一次通过评论'.sub-menu'属性来测试。注释掉'position:absolute;'将鼠标悬停在列表上时,以三个分组正确地呈现列表项。但删除此位置选项会导致其他菜单元素间隔很远,而不是内联http://picpaste.com/menu-9HrKc4NS.PNG。在离开此位置属性时显示菜单正确内联,但li元素在盘旋时未分组http://picpaste.com/pics/menu-9QZGmRkZ.1471447583.PNG –

作为替代方案,如果你不介意使用较新的CSS,你可以用flexbox做到这一点,太:

ul { 
 
    display:   flex; 
 
    list-style-type: none; 
 
    width:   300px; 
 
    flex-wrap:  wrap; 
 
} 
 

 
li { 
 
    flex: 33%; 
 
}
<ul> 
 
    <li>Item 1</li> 
 
    <li>Item 2</li> 
 
    <li>Item 3</li> 
 
    <li>Item 4</li> 
 
    <li>Item 5</li> 
 
    <li>Item 6</li> 
 
    <li>Item 7</li> 
 
    <li>Item 8</li> 
 
    <li>Item 9</li> 
 
</ul>

+0

(谁低估 - 我在这里错了很好,但请告诉我我忽略了什么。) –

+0

我只能认为你的答案要求所有'li'都是相同的宽度,可能不是需要或优先。 –

+2

够公平的。我只是假设他们会在那种情况下想要整齐的柱子。至少有好的选择。 :) –