Example of a responsive grid using element queries instead of media queries.
A Pen by Tyson Matanich on CodePen.
| <h1>Responsive grid using elementQuery</h1> | |
| <p>Try changing the: viewport width, width of <code>div.row</code> elements, base font-size, or zoom. Items with borders set are part of a nested grid which uses the same breakpoints.</p> | |
| <p>The following <a href="https://github.com/tysonmatanich/elementQuery">elementQuery</a> breakpoints are set:</p> | |
| <ul> | |
| <li><code>min-width: 25em /* 400px */</code></li> | |
| <li><code>min-width: 40em /* 640px */</code></li> | |
| <li><code>min-width: 50em /* 800px */</code></li> | |
| </ul> | |
| <div class="grid"> | |
| <div class="row"> | |
| <div class="col"> | |
| <div class="item">1</div> | |
| </div> | |
| <div style="clear:both"></div> | |
| </div> | |
| <div class="row row--2"> | |
| <div class="col"> | |
| <div class="item">1</div> | |
| </div> | |
| <div class="col"> | |
| <div class="item">2</div> | |
| </div> | |
| <div style="clear:both"></div> | |
| </div> | |
| <div class="row row--3"> | |
| <div class="col"> | |
| <div class="item">1</div> | |
| </div> | |
| <div class="col"> | |
| <div class="item">2</div> | |
| </div> | |
| <div class="col"> | |
| <div class="item">3</div> | |
| </div> | |
| <div style="clear:both"></div> | |
| </div> | |
| <div class="row row--3"> | |
| <div class="col"> | |
| <div class="item">1</div> | |
| </div> | |
| <div class="col col--2"> | |
| <div class="item">2</div> | |
| </div> | |
| <div style="clear:both"></div> | |
| </div> | |
| <div class="row row--3"> | |
| <div class="col"> | |
| <div class="item">1</div> | |
| </div> | |
| <div class="col col--2"> | |
| <div class="row row--2"> | |
| <div class="col"> | |
| <div class="item">One</div> | |
| </div> | |
| <div class="col"> | |
| <div class="item">Two</div> | |
| </div> | |
| <div style="clear:both"></div> | |
| </div> | |
| </div> | |
| <div style="clear:both"></div> | |
| </div> | |
| <div class="row row--4"> | |
| <div class="col"> | |
| <div class="item">1</div> | |
| </div> | |
| <div class="col"> | |
| <div class="item">2</div> | |
| </div> | |
| <div class="col"> | |
| <div class="item">3</div> | |
| </div> | |
| <div class="col"> | |
| <div class="item">4</div> | |
| </div> | |
| <div style="clear:both"></div> | |
| </div> | |
| <div class="row row--4"> | |
| <div class="col"> | |
| <div class="item">1</div> | |
| </div> | |
| <div class="col"> | |
| <div class="item">2</div> | |
| </div> | |
| <div class="col col--2"> | |
| <div class="item">3</div> | |
| </div> | |
| <div style="clear:both"></div> | |
| </div> | |
| <div class="row row--4"> | |
| <div class="col"> | |
| <div class="item">1</div> | |
| </div> | |
| <div class="col"> | |
| <div class="item">2</div> | |
| </div> | |
| <div class="col col--2"> | |
| <div class="row row--2"> | |
| <div class="col"> | |
| <div class="item">One</div> | |
| </div> | |
| <div class="col"> | |
| <div class="item">Two</div> | |
| </div> | |
| <div style="clear:both"></div> | |
| </div> | |
| </div> | |
| <div style="clear:both"></div> | |
| </div> | |
| <div class="row row--4"> | |
| <div class="col"> | |
| <div class="item">1</div> | |
| </div> | |
| <div class="col col--3"> | |
| <div class="item">2</div> | |
| </div> | |
| <div style="clear:both"></div> | |
| </div> | |
| <div class="row row--4"> | |
| <div class="col"> | |
| <div class="item">1</div> | |
| </div> | |
| <div class="col col--3"> | |
| <div class="row row--3"> | |
| <div class="col"> | |
| <div class="item">One</div> | |
| </div> | |
| <div class="col"> | |
| <div class="item">Two</div> | |
| </div> | |
| <div class="col"> | |
| <div class="item">Three</div> | |
| </div> | |
| <div style="clear:both"></div> | |
| </div> | |
| </div> | |
| <div style="clear:both"></div> | |
| </div> | |
| </div> |
Example of a responsive grid using element queries instead of media queries.
A Pen by Tyson Matanich on CodePen.
| body { | |
| font-family: sans-serif; | |
| } | |
| .grid { | |
| font-size: 100%; | |
| max-width: 1600px; | |
| } | |
| .row { | |
| margin: 0.5em 0; | |
| padding: 0.25em; | |
| text-align: center; | |
| background: #eee; | |
| border-radius: 0.25em; | |
| } | |
| .row .row { | |
| margin: 0; | |
| padding: 0; | |
| } | |
| .col { | |
| float: left; | |
| width: 100%; | |
| } | |
| .row--2[min-width~="25em"] > .col, | |
| .row--4[min-width~="25em"] > .col { | |
| width: 50%; | |
| } | |
| .row--4[min-width~="25em"] > .col--2 { | |
| width: 100%; | |
| } | |
| .row--3[min-width~="40em"] > .col { | |
| width: 33.3333333%; | |
| } | |
| .row--3[min-width~="40em"] > .col--2 { | |
| width: 66.6666667%; | |
| } | |
| .row--4[min-width~="50em"] > .col { | |
| width: 25%; | |
| } | |
| .row--4[min-width~="50em"] > .col--2 { | |
| width: 50%; | |
| } | |
| .row--4[min-width~="50em"] > .col--3 { | |
| width: 75%; | |
| } | |
| .item { | |
| margin: 0.25em; | |
| padding: 0.5em 0; | |
| color: #fff; | |
| background: #ffbb00; | |
| font-weight: bold; | |
| line-height: 1em; | |
| border: solid 1px transparent; | |
| border-radius: 0.25em; | |
| } | |
| .row .row .item { | |
| border: solid 1px rgba(0, 0, 0, 0.6); | |
| } | |
| .row--2 > .col > .item { | |
| background: #74bd0a; | |
| } | |
| .row--3 > .col > .item { | |
| background: #0094ff; | |
| } | |
| .row--4 > .col > .item { | |
| background: #ff2f00; | |
| } | |
| h1 { | |
| font-size: 1.25em; | |
| } | |
| p { | |
| margin: 0 0 1em;; | |
| } | |
| code { | |
| padding: 0.25em 0.5em; | |
| color: #000; | |
| background-color: #f9f9f9; | |
| } | |
| a { | |
| color: #3a97c4; | |
| } |