Grid of responsive squares

前端 未结 4 509
一生所求
一生所求 2020-11-22 03:35

I\'m wondering how I would go about creating a layout with responsive squares. Each square would have vertically and horizontally aligned c

4条回答
  •  青春惊慌失措
    2020-11-22 03:57

    The accepted answer is great, however this can be done with flexbox.

    Here's a grid system written with BEM syntax that allows for 1-10 columns to be displayed per row.

    If there the last row is incomplete (for example you choose to show 5 cells per row and there are 7 items), the trailing items will be centered horizontally. To control the horizontal alignment of the trailing items, simply change the justify-content property under the .square-grid class.

    .square-grid {
      display: flex;
      flex-wrap: wrap;
      justify-content: center;
    }
    
    .square-grid__cell {
      background-color: rgba(0, 0, 0, 0.03);
      box-shadow: 0 0 0 1px black;
      overflow: hidden;
      position: relative;
    }
    
    .square-grid__content {
      left: 0;
      position: absolute;
      top: 0;
    }
    
    .square-grid__cell:after {
      content: '';
      display: block;
      padding-bottom: 100%;
    }
    
    // Sizes – Number of cells per row
    
    .square-grid__cell--10 {
      flex-basis: 10%;
    }
    
    .square-grid__cell--9 {
      flex-basis: 11.1111111%;
    }
    
    .square-grid__cell--8 {
      flex-basis: 12.5%;
    }
    
    .square-grid__cell--7 {
      flex-basis: 14.2857143%;
    }
    
    .square-grid__cell--6 {
      flex-basis: 16.6666667%;
    }
    
    .square-grid__cell--5 {
      flex-basis: 20%;
    }
    
    .square-grid__cell--4 {
      flex-basis: 25%;
    }
    
    .square-grid__cell--3 {
      flex-basis: 33.333%;
    }
    
    .square-grid__cell--2 {
      flex-basis: 50%;
    }
    
    .square-grid__cell--1 {
      flex-basis: 100%;
    }
    

    .square-grid {
      display: flex;
      flex-wrap: wrap;
      justify-content: center;
    }
    
    .square-grid__cell {
      background-color: rgba(0, 0, 0, 0.03);
      box-shadow: 0 0 0 1px black;
      overflow: hidden;
      position: relative;
    }
    
    .square-grid__content {
      left: 0;
      position: absolute;
      top: 0;
    }
    
    .square-grid__cell:after {
      content: '';
      display: block;
      padding-bottom: 100%;
    }
    
    // Sizes – Number of cells per row
    
    .square-grid__cell--10 {
      flex-basis: 10%;
    }
    
    .square-grid__cell--9 {
      flex-basis: 11.1111111%;
    }
    
    .square-grid__cell--8 {
      flex-basis: 12.5%;
    }
    
    .square-grid__cell--7 {
      flex-basis: 14.2857143%;
    }
    
    .square-grid__cell--6 {
      flex-basis: 16.6666667%;
    }
    
    .square-grid__cell--5 {
      flex-basis: 20%;
    }
    
    .square-grid__cell--4 {
      flex-basis: 25%;
    }
    
    .square-grid__cell--3 {
      flex-basis: 33.333%;
    }
    
    .square-grid__cell--2 {
      flex-basis: 50%;
    }
    
    .square-grid__cell--1 {
      flex-basis: 100%;
    }
    Some content
    Some content
    Some content
    Some content
    Some content
    Some content
    Some content
    Some content

    Fiddle: https://jsfiddle.net/patrickberkeley/noLm1r45/3/

    This is tested in FF and Chrome.

提交回复
热议问题