Only 838 Bytes to create a complete responsive Flex Layout: check the Demo and get the snippets for VSCode or play with it on Codepen!
New (v.2.0): reverse collapsing...
- v.2.1 (17 february 2020): Optimisation (Total: 831 Bytes)
- v.2.0 (11 february 2020): Addition of "reverse Collapse" (Total: 838 Bytes)
- v.1.1 (1 february 2020): Addition of
.acolfinal
(Total: 662 Bytes) - v.1.0 (2 november 2019): First public version (637 Bytes)
/* APG-FLEX : v 2.1 (2020-02-17) - ©Philippe Gouillou (www.gouillou.com) - LGPL 3 */
.acontainer {display:block;max-width:1170px;margin:0 auto!important}
.acolfinal {padding:.5rem}
.arow {display:flex;margin:0;padding:0}
.browsm,
.browlg,
.browmd,
.browxl {display:flex}
@media(min-width:576px) {.arowsm{display:flex}.browsm{display:block}}
@media(min-width:768px) {.arowmd{display:flex}.browmd{display:block}}
@media(min-width:992px) {.arowlg{display:flex}.browlg{display:block}}
@media(min-width:1200px) {.arowxl{display:flex}.browxl{display:block}}
.arow>div,
.arowsm>div,
.arowlg>div,
.arowmd>div,
.arowxl>div,
.browsm>div,
.browlg>div,
.browmd>div,
.browxl>div {flex:1}
.flex2 {flex:2!important}
.flex3 {flex:3!important}
.flex4 {flex:4!important}
.flex5 {flex:5!important}
.flex6 {flex:6!important}
.flex7 {flex:7!important}
.flex8 {flex:8!important}
.flex9 {flex:9!important}
.flex10 {flex:10!important}
.flex11 {flex:11!important}
.flex12 {flex:12!important}
.acontainer{display:block;max-width:1170px;margin:0 auto!important}.acolfinal{padding:.5rem}.arow{display:flex;margin:0;padding:0}.browlg,.browmd,.browsm,.browxl{display:flex}@media(min-width:576px){.arowsm{display:flex}.browsm{display:block}}@media(min-width:768px){.arowmd{display:flex}.browmd{display:block}}@media(min-width:992px){.arowlg{display:flex}.browlg{display:block}}@media(min-width:1200px){.arowxl{display:flex}.browxl{display:block}}.arow>div,.arowlg>div,.arowmd>div,.arowsm>div,.arowxl>div,.browlg>div,.browmd>div,.browsm>div,.browxl>div{flex:1}.flex2{flex:2!important}.flex3{flex:3!important}.flex4{flex:4!important}.flex5{flex:5!important}.flex6{flex:6!important}.flex7{flex:7!important}.flex8{flex:8!important}.flex9{flex:9!important}.flex10{flex:10!important}.flex11{flex:11!important}.flex12{flex:12!important}
- Just copy/paste the code above (regular or minified version) somewhere in your CSS file or download the regular (.css) or minified (.min.css) and link it in the header of your HTML file.
- Create your HTML according the following rules
Rem: The names of the CSS classes have been choosen to allow a perfect compatibility with Bootstrap (you can mix both).
Beware: it works the opposite of Bootstrap: you modify the row, not the column!
-
For each row: indicate at which limit you want the columns to collapse or expand. A row is created by a div with one of the followings classes (example :
<div class="arow">
) :- Collapse (usual behavior):
arow
: never collapsesarowsm
: collapses under 576pxarowmd
: collapses under 768pxarowlg
: collapses under 992pxarowxl
: collapses under 1200px
- reverse Collapse (opposite behavior):
browsm
: collapses over 576pxbrowmd
: collapses over 768pxbrowlg
: collapses over 992pxbrowxl
: collapses over 1200px
- Collapse (usual behavior):
-
Inside the row, add one
<div>
per column (as much as you want: they will be evenly distributed) -
If needed, add to the column div one of the classes
flex2
toflex12
to define its size (default =flex1
; example<div class="flex2">
)
-
For Container (max width: 1070px and centered), add the class "
acontainer
" to a row (ex:<div class="arow acontainer">
) -
A
div
is considered as a Flex Column if and only if it is directly under aarowXX
or abrowXX
. You can change this behavior by using style (<div style="display: block;">
):arow
: rowdiv
: displayed as Flex (column)div
: displayed as Block (default behavior)
div
: displayed as Flex (column)
-
If you need to add a
div
-
For nesting, just remember that a column must exist in each row (see example below)
-
Sizes are respective! (see example below)
-
flex2
...flex12
are optionals: suppress or modify them as needed
See the Demo
4 columns, the second one twice the size of the others (so a total size of 5) and containing 4 nested columns:
<div class="arowsm"> <!-- Row collapsing at 576px -->
<div>flex: 1</div> <!-- Column size 1/5 of the full width -->
<div class="flex2"> <!-- Column size 2/5 of the full width -->
<div class="arowlg"> <!-- Nested row collapsing at 992px-->
<div>flex: 1</div> <!-- Column size 1/4 of 2/5 = 1/10 of the full width -->
<div> <!-- Column size 1/4 of 2/5 = 1/10 of the full width -->
<div>B</div> <!-- Block (not a column!) -->
</div>
<div>flex: 1</div> <!-- Column size 1/4 of 2/5 = 1/10 of the full width -->
<div>flex: 1</div> <!-- Column size 1/4 of 2/5 = 1/10 of the full width -->
</div>
</div>
<div>flex: 1</div> <!-- Column size 1/5 of the full width -->
<div>flex: 1</div> <!-- Column size 1/5 of the full width -->
</div>