Search code examples
htmlcssresponsive-designcss-multicolumn-layout

List in columns layout depending on viewport width


How can I make several columns from one list with CSS?
The number of columns must change depending on the screen width with media queries as shown here :

lage screen:

Row1 Row6  Row11
Row2 Row7  Row12
Row3 Row8  Row13
Row4 Row9  Row14
Row5 Row10

middle screen:

Row1 Row8
Row2 Row9
Row3 Row10
Row4 Row11
Row5 Row12
Row6 Row13
Row7 Row14

small screen:

Row1
Row2
Row3
Row4
Row5
Row6
Row7
Row8
Row9
Row10
Row11
Row12
Row13
Row14

Here is my HTML code :

<ul>
  <li>Row1</li>
  <li>Row2</li>
  <li>Row3</li>
  <li>Row4</li>
  <li>Row5</li>
  <li>Row6</li>
  <li>Row7</li>
  <li>Row8</li>
  <li>Row9</li>
  <li>Row10</li>
  <li>Row11</li>
  <li>Row12</li>
  <li>Row13</li>
  <li>Row14</li>
</ul>

Solution

  • You can do this with CSS multi-column layout. Just to add support isn't the best.

    Or if you can set fixed height on ul you could use Flexbox and flex-direction: column; like this DEMO but its not really "flexible" solution.

    ul {
      -webkit-column-count: 3; /* Chrome, Safari, Opera */
      -moz-column-count: 3; /* Firefox */
       column-count: 3;
       list-style-type: none;
    }
    
    @media(max-width: 992px) {
      ul {
        -webkit-column-count: 2; /* Chrome, Safari, Opera */
        -moz-column-count: 2; /* Firefox */
         column-count: 2;
      }
    }
    
    @media(max-width: 480px) {
      ul {
        -webkit-column-count: 1; /* Chrome, Safari, Opera */
        -moz-column-count: 1; /* Firefox */
         column-count: 1;
      }
    }
    <ul>
      <li>Row1</li>
      <li>Row2</li>
      <li>Row3</li>
      <li>Row4</li>
      <li>Row5</li>
      <li>Row6</li>
      <li>Row7</li>
      <li>Row8</li>
      <li>Row9</li>
      <li>Row10</li>
      <li>Row11</li>
      <li>Row12</li>
      <li>Row13</li>
      <li>Row14</li>
    </ul>