代码之家  ›  专栏  ›  技术社区  ›  Mateja Petrovic

CSS网格:将网格列调整到最宽的列

  •  0
  • Mateja Petrovic  · 技术社区  · 6 年前

    const items = Array.from(column.children)
    
    const widths = items.map(item => item.offsetWidth)
    
    const widest = widths.reduce((widest, current) => widest > current ? widest : current, 0)
    
    items.map(item => item.style.width = `${widest}px`)
    body {
      margin: 0;
    }
    
    body * {
      font-family: Helvetica;
    }
    
    ul {
      margin: 0;
      padding: 0;
      list-style: none;
      display: grid;
    }
    
    #column {
      grid-auto-columns: max-content;
      grid-auto-flow: column;
    }
    
    li {
      text-align: center;
      padding: 10px 10px;
      color: lightcyan;
      background: lightseagreen;
      border-right: 2px solid lightcyan;
    }
    <ul id="column">
      <li>S</li>
      <li>Med</li>
      <li>Widest Item</li>
    </ul>

    我用一点javascript使列表项适合列表中最大的项。我怎样才能只用CSS来完成这个任务呢?

    这也可以从网格中行的角度来看待。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Keith    6 年前

    只需将UL的显示设置为 inline-block ..

    更新了,对于水平的你可以混合(flex,inline flex)和css网格,。使用flex或inline flex类型创建包装div,。

    body {
      margin: 0;
    }
    
    body * {
      font-family: Helvetica;
    }
    
    
    div {
      display: inline-flex;
    }
    
    ul {
      margin: 0;
      padding: 0;
      list-style: none;
      display: grid;
      grid-template-columns: repeat(3, 1fr);
    }
    
    
    li {
      text-align: center;
      padding: 10px 10px;
      color: lightcyan;
      background: lightseagreen;
      border-right: 2px solid lightcyan;
    }
    <div>
      <ul id="column">
        <li>S</li>
        <li>Med</li>
        <li>Widest Item</li>
      </ul>
    </div>