代码之家  ›  专栏  ›  技术社区  ›  Gregor Albert

在flex布局中用对齐间距换行最后一行的项目

  •  -1
  • Gregor Albert  · 技术社区  · 6 年前

    <div fxFlex="row wrap" fxLayoutAlign="space-around">
        <my-item *ngFor="let item of items"></my-item>
    </div>
    

    实际行为:

    enter image description here

    和其他行相比,最后一行需要相同的“间距”。 enter image description here

    3 回复  |  直到 6 年前
        1
  •  1
  •   Sander Moolin    6 年前

    获取所需内容的最快方法是在最后一个可见元素之后添加一个空元素:

    <!-- your last 3 boxes -->
    <div class="gray-box">
      (your content)
    </div>
    
    <div class="gray-box">
      (your content)
    </div>
    
    <div class="gray-box">
      (your content)
    </div>
    
    <!-- an empty box - make sure .transparent has opacity: 0-->
    <div class="gray-box transparent"></div>
    

    如果你不使用flexbox, display: grid 更符合您所要查找的内容,您可以更严格地定义网格大小:

    display: grid;
    grid-template-columns: repeat(4, 25%);
    grid-gap: /* gap between your items */
    
        2
  •  1
  •   d-h-e    6 年前

    const addbutton = document.getElementsByClassName('add');
    
    // referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
    
    const addEl = () => {
      const newli = document.createElement('li');
      newli.textContent = 'new flex child';
      const pos = document.querySelector('li.filler');
      pos.parentNode.insertBefore(newli, pos.previousElementSibling.nextSibling);
    }
    
    addbutton[0].addEventListener('click', addEl);
    body {
      display: flex;
    }
    
    ul {
      display: flex;
      flex-flow: row wrap;
      justify-content: space-between;
      padding: 0;
      flex: 1;
    }
    
    ul>li {
      flex: 0 1 24%;
      background: #ccc;
      display: block;
      height: 40px;
      margin-bottom: 20px;
    }
    
    ul>li.filler {
      height: 0;
      padding: 0;
    }
    
    button {
      background: #333;
      color: white;
      border: none;
      padding: 5px;
      flex: 0 0 100px;
      height: 100px;
      margin: 10px;
    }
    <button class="add">click here to add childs</button>
    <ul>
      <li>lorem</li>
      <li>lorem</li>
      <li>lorem</li>
      <li>lorem</li>
      <li>lorem</li>
      <li>lorem</li>
      <li class="filler"></li>
      <li class="filler"></li>
      <li class="filler"></li>
    </ul>
        3
  •  1
  •   lfitzgibbons    6 年前

    我只是猜测一下你的html和css结构,但我假设你有这样的东西:

    .wrapper {
      width: 1000px;
      display: flex;
      flex-wrap: wrap;
      justify-content: space-between;
    }
    
    .item {
      background: gray;
      width: 200px;
      height: 100px;
      border: 1px solid black;
    }
    <div class="wrapper">
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
    </div>

    通过使用简单的边距并设置 justify-content 属性 center flex-start 根据你的需要。

    .wrapper {
      width: 1000px;
      display: flex;
      flex-wrap: wrap;
      justify-content: flex-start;
    }
    
    .item {
      background: gray;
      width: 200px;
      height: 100px;
      border: 1px solid black;
      margin: 0 20px;
    }
    <div class=“wrapper”>
    <div class=“item”></div>
    <div class=“item”></div>
    <div class=“item”></div>
    <div class=“item”></div>
    <div class=“item”></div>
    </div>
    推荐文章