代码之家  ›  专栏  ›  技术社区  ›  user64675

如何使用CSS网格将垂直菜单拆分为两个自动宽度列?[副本]

  •  0
  • user64675  · 技术社区  · 5 年前

    我的菜单中有很多我不知道的元素:

    <ul>
      <li>Link with long text 1</li>
      <li>Link 2</li>
      <li>Link 3</li>
      <li>Link 4</li>
      <li>Link 5</li>
      <li>Link 6</li>
      <li>Link 7</li>
    </ul>
    

    我尝试将其拆分为两列,每列具有自动宽度和相等的元素数量:

    下面的CSS完成了这项工作,但它需要我手动指定行数。

    ul {
      display: grid;
      gap: 10px 40px;
      grid-auto-flow: column;
      grid-template-rows: repeat(4, 1fr);
    }
    

    有没有办法“告诉”CSS“行应该是元素计数的一半”?或者也许有更好的方法来解决这个问题?

    1 回复  |  直到 5 年前
        1
  •  -1
  •   Trailblazer17    5 年前

    在JS的帮助下,我想这会对你有用

    <style>
    
    ul {
        display: flex;
        flex-direction: column;
        flex-wrap: wrap;
        gap: 10px;
        height: 300px;
    }
    
    </style>
    
    <ul class="ul-element">
        <li>Link with long text 1</li>
        <li>Link 2</li>
        <li>Link 3</li>
        <li>Link 4</li>
        <li>Link 5</li>
        <li>Link 6</li>
    </ul>
    
    <script>
    
    const ul = document.querySelector(".ul-element");
    const li = ul.getElementsByTagName("li");
    const amount = li.length;
    const row = Math.ceil(amount / 2);
    const height = 100 / row;
    
    for(element of ul.getElementsByTagName("li")){
        element.style = 'height: calc(' + height + '% - 10px);';
    }
    
    </script>