Flex-box: Align last row to grid

后端 未结 29 2477
不知归路
不知归路 2020-11-22 02:54

I have a simple flex-box layout with a container like:

.grid {
  display: flex;
  flex-flow: row wrap;
  justify-content: space-between;
}

相关标签:
29条回答
  • 2020-11-22 03:11

    I was able to do it with justify-content: space-between on the container

    0 讨论(0)
  • 2020-11-22 03:14

    A possible solution is to use justify-content: flex-start; on the .grid container, size restrictions on its children, and margins on the appropriate child elements -- depending on the desired number of columns.

    For a 3-column grid, the basic CSS would look like this:

    .grid {
        display: flex;
        flex-flow: row wrap;
        justify-content: flex-start;
    }
    
    .grid > * {
        flex: 0 0 32%;
        margin: 1% 0;
    }
    
    .grid > :nth-child(3n-1) {
        margin-left: 2%;
        margin-right: 2%;
    }
    

    It's another imperfect solution, but it works.

    http://codepen.io/tuxsudo/pen/VYERQJ

    0 讨论(0)
  • 2020-11-22 03:14

    Using flexbox and a few media queries, I made this little work-around: http://codepen.io/una/pen/yNEGjv (its a bit hacky but works):

    .container {
      display: flex;
      flex-flow: row wrap;
      justify-content: flex-start;
      max-width: 1200px;
      margin: 0 auto;
    }
    
    .item {
      background-color: gray;
      height: 300px;
      flex: 0 30%;
      margin: 10px;
    
      @media (max-width: 700px) {
         flex: 0 45%;
      }
    
      @media (max-width: 420px) {
        flex: 0 100%;
      }
    
      &:nth-child(3n-1) {
        margin-left: 10px;
        margin-right: 10px;
      }
    }
    
    0 讨论(0)
  • 2020-11-22 03:15

    This version is best way for blocks with fixed width:

    http://codepen.io/7iomka/pen/oxxeNE

    In other cases - version of dalgard

    http://codepen.io/dalgard/pen/Dbnus

    body {
      padding: 5%;
    }
    
    div {
      overflow: hidden;
      background-color: yellow;
    }
    
    ul {
      display: flex;
      flex-wrap: wrap;
    justify-content:center;
      margin: 0 -4px -4px 0;
      list-style: none;
      padding: 0;
    }
    
    li {
      flex: 1 0 200px;
      height: 200px;
      max-width:200px;
      min-width:200px;
      border-right: 4px solid black;
      border-bottom: 4px solid black;
      background-color: deeppink;
    }
    li:empty {
      height: 0;
      border: none;
    }
    
    *,
    :before,
    :after {
      box-sizing: border-box;
    }
    <div>
      <ul>
        <li>a</li>
        <li>b</li>
        <li>c</li>
        <li>d</li>
        <li>e</li>
        <li>f</li>
        <li>g</li>
        <li>h</li>
        <li>i</li>
        <li>j</li>
        <li>k</li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
      </ul>
    </div>

    0 讨论(0)
  • 2020-11-22 03:15

    you want to align

    use align-content: flex-start; instead of justify-content: space-between;

    this pulls the items last row to left , and also distributes space evenly,

    .container {
      display: flex;
      flex-flow: row wrap;
      align-content: flex-start;
      /*justify-content: space-between; remove this line!!!! */ 
    }
    

    https://codepen.io/anon/pen/aQggBW?editors=1100


    danAnderson solution is NOT DYNAMIC .PERİOD!!

    when item width changed from 25 to 28 dan anderson fails space between images

    danAnderson: https://codepen.io/anon/pen/ZwYPmB?editors=1100

    dynamic: https://codepen.io/anon/pen/aQggBW?editors=1100

    thats what ive been trying to say . dans is hacky.....

    0 讨论(0)
  • 2020-11-22 03:16

    Seems like no one proposed the flex-grow solution on last item. The idea is to have your last flex item to take all the place it can using flex-grow: 1.

    .grid {
      display: flex;
      flex-flow: row wrap;
      justify-content: space-between;
    }
    
    .grid > *:last-child {
      flex-grow: 1;
    }
    

    Note: This solution is not perfect, especially if you have centered elements inside your flex items as it will center on the possibly huge last flex item.

    0 讨论(0)
提交回复
热议问题