show 4 divs in a row using flexbox

前端 未结 3 1501
感动是毒
感动是毒 2021-01-22 07:32

I am trying to show 4 boxes in a line using below html. So One row should have 4 boxes. I have total 8 boxes, there will be 2 rows with 4 columns.

相关标签:
3条回答
  • 2021-01-22 07:38

    This is possible with display:contents but support for that property value is poor or buggy at present.

    .parent {
      display: flex;
      flex-wrap: wrap;
    }
    
    .open {
      display: contents;
    }
    
    .box {
      height: 100px;
      width: 25%;
      border: 3px solid red;
      box-sizing: border-box;
    }
    <div class="parent">
      <div class="child box">A Child</div>
      <div class="child open">
        <div class="box">B Child 1</div>
        <div class="box">B Child 2</div>
        <div class="box">B Child 3</div>
        <div class="box">B Child 4</div>
        <div class="box">B Child 5</div>
        <div class="box">B Child 6</div>
      </div>
      <div class="child box">C Child</div>
    </div>

    0 讨论(0)
  • 2021-01-22 07:40

    If you want them all to order based on a single parent, you need to have them all become a child of the parent. Below is an example of how to achieve what you are looking for.

    .parent {
      display: flex;
      flex-direction: row;
      flex-wrap: wrap;
    }
    
    .box {
      height: 100px;
      width: 25%;
      border: 10px solid red;
      box-sizing: border-box;
    }
    <div class="parent">
      <div class="box">A Child</div>
    
      <div class="box">B Child 1</div>
      <div class="box">B Child 2</div>
      <div class="box">B Child 3</div>
      <div class="box">B Child 4</div>
      <div class="box">B Child 5</div>
      <div class="box">B Child 6</div>
    
      <div class="box">C Child</div>
    </div>

    0 讨论(0)
  • 2021-01-22 07:59

    You can do it with some float (yes float!)

    .box {
      height:100px;
      width:25%;
      border:3px solid red;
      box-sizing:border-box;
      float:left;
    }
    
    .parent {
      overflow:hidden; /* Clear float */
    }
    <div class="parent">
      <div class="child box">A Child</div>
      <div class="child">
        <div class="box">B Child 1</div>
        <div class="box">B Child 2</div>
        <div class="box">B Child 3</div>
        <div class="box">B Child 4</div>
        <div class="box">B Child 5</div>
        <div class="box">B Child 6</div>
      </div>
      <div class="child box">C Child</div>
    </div>

    With flexbox you can approximate it like below:

    .parent {
      display:flex;
      flex-wrap:wrap;
    }
    .parent > .box,
    .child >.box {
      height:100px;
      width:25%;
      border:3px solid red;
      box-sizing:border-box;
    }
    .child:nth-child(2) {
      width:100%;
      display:flex;
      flex-wrap:wrap;
      margin:-100px 0; /* same value as height here */
    }
    .child:nth-child(2):before {
      content:"";
      width:25%;
    }
    .child:last-child {
      margin-left:auto;
    }
    <div class="parent">
      <div class="child box">A Child</div>
      <div class="child">
        <div class="box">B Child 1</div>
        <div class="box">B Child 2</div>
        <div class="box">B Child 3</div>
        <div class="box">B Child 4</div>
        <div class="box">B Child 5</div>
        <div class="box">B Child 6</div>
      </div>
      <div class="child box">C Child</div>
    </div>

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