【问题标题】:How to display a list in horizontal groups of li elements? [duplicate]如何在 li 元素的水平组中显示列表? [复制]
【发布时间】:2016-12-24 04:52:36
【问题描述】:

我有一个很长的li 元素列表,超过 30 个项目。当我在ul menu 下拉列表中显示它时,列表会垂直向下延伸,这需要向下滚动浏览器窗口才能查看每个列表元素。

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

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

所以不要这样:

  • 吉姆
  • 杰克
  • 琼斯
  • 杰克逊
  • 乔尼

会这样显示(列表中每三个 li 元素水平分组):

简 约翰 贾里德

吉姆 詹姆士 琼斯

问题:

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

在我当前的设置中,我将这个 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>

【问题讨论】:

    标签: css html html-lists display


    【解决方案1】:

    浮点数可以很简单地做到这一点。

    你只需在每次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,有一个类似的选项,如@phrogzquestion 的回答中所述

    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>

    【讨论】:

    • 我尝试在子菜单的 li 样式上进行编辑,但列表仍然相同,没有分组为三个。任何想法为什么会这样?这是更新后的 css hastebin.com/ijikonawah.css 这是浏览器中元素的屏幕截图..picpaste.com/pics/menu-1M9luEus.1471444731.PNG
    • 不知道,但我不能从代码图像中看出很多。您必须进行适当的演示。
    • 我再次测试通过将.sub-menu属性一一注释掉。将鼠标悬停在列表上时,注释掉 position: absolute; 会以三个一组的形式正确呈现列表项。但是删除这个位置选项会导致其他菜单元素相距很远,而不是内联picpaste.com/menu-9HrKc4NS.PNG。保留此位置属性可正确显示菜单内联但 li 元素悬停在 picpaste.com/pics/menu-9QZGmRkZ.1471447583.PNG 上时未分组
    • 再次,我无法诊断图像中的代码。我建议您通过更完整的演示提出一个新问题。
    • 很公平,增加 ul 父级的宽度允许 li 元素向外扩展。所以在.sub-menu { width: 500px; 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; list-style-type: none; float: left; }之外设置.sub-menu li:nth-child(3n+1) { clear: both; }
    【解决方案2】:

    作为替代方案,如果您不介意使用较新的 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>

    【讨论】:

    • (谁投了反对票——我可以在这里犯错,但请告诉我我忽略了什么。)
    • 我只能认为您的答案要求所有li 都具有相同的宽度,这可能不是必需的或首选的。
    • 很公平。我只是假设在那种情况下他们会想要整齐的列。至少有选择是好事。 :)
    • 是的,但你不需要 flexbox 来做到这一点。浮点数或内联块设置为 33.3% 会做同样的事情。
    • 我想不出一个人不需要整齐列的场景。我们应该使用 flexbox,因为它现在有更好的支持。
    猜你喜欢
    • 2020-12-09
    • 2012-02-08
    • 1970-01-01
    • 2011-07-21
    • 2013-05-02
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多