http://getmobicss.com/docs/flexbox.html
https://github.com/mobi-css/mobi.css/releases
http://getmobicss.com/
Container and units
First of all, let's create a .flex-left container which contains several .units. In this case, .flex-left's width is divided equally between .units.
<div class="flex-left">
<div class="unit">unit</div>
<div class="unit">unit</div>
<div class="unit">unit</div></div><div class="flex-left">
<div class="unit">unit</div>
<div class="unit">unit</div>
<div class="unit">unit</div>
<div class="unit">unit</div>
<div class="unit">unit</div></div>
Secondly, let's see how to achieve a maximum 4# grid.
<div class="flex-left">
<div class="unit-1">.unit-1</div></div><div class="flex-left">
<div class="unit-1-2">.unit-1-2</div>
<div class="unit-1-2">.unit-1-2</div></div><div class="flex-left">
<div class="unit-1-3">.unit-1-3</div>
<div class="unit-2-3">.unit-2-3</div></div><div class="flex-left">
<div class="unit-1-4">.unit-1-4</div>
<div class="unit-3-4">.unit-3-4</div></div><div class="flex-left">
<div class="unit-1-2">.unit-1-2</div>
<div class="unit-1-4">.unit-1-4</div></div>
Finally, we can use .unit-0 as a custom size unit. Set a width to it, or let the content decide the width.
.unit
.unit-0 which has 200px width
.unit
.unit-0 which has no width set
.unit
.unit-1-4
<div class="flex-left">
<div class="unit">.unit</div>
<div class="unit-0" style="width:200px">.unit-0 which has 200px width</div>
<div class="unit">.unit</div></div><div class="flex-left">
<div class="unit-0">.unit-0 which has no width set</div>
<div class="unit">.unit</div>
<div class="unit-1-4">.unit-1-4</div></div>
Flexbox aligning
Forget margin:0 auto. We can align easily with flexbox!
.flex-center.flex-middle > div
<div class="flex-left">
<div>.flex-left > div</div></div><div class="flex-center">
<div>.flex-center > div</div></div><div class="flex-right">
<div>.flex-right > div</div></div><div class="flex-top" style="height:60px;">
<div>.flex-top > div</div></div><div class="flex-middle" style="height:60px;">
<div>.flex-middle > div</div></div><div class="flex-bottom" style="height:60px;">
<div>.flex-bottom > div</div></div><div class="flex-center flex-middle" style="height:60px;">
<div>.flex-center.flex-middle > div</div></div>
Vertical flexbox
We can use .flex-vertical to easily achieve vertical flexbox layout.
<div class="flex-vertical" style="height:200px;">
<div class="unit-0">.unit-0</div>
<div class="unit">.unit</div>
<div class="unit-1-4">.unit-1-4</div></div>
Wrapable flexbox
By default the flex-wrap of flexbox container is set to nowrap, this is to prevent some unexpected wrap. We can set it to wrap using .flex-wrap:
.unit-0 with a lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot of text
.unit
.unit-1-4
.flex-wrap > .unit-0 with a lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot of text
.unit
.unit-1-4
<div class="flex-left">
<div class="unit-0">.unit-0 with a lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot of text</div>
<div class="unit">.unit</div>
<div class="unit-1-4">.unit-1-4</div></div><div class="flex-left flex-wrap">
<div class="unit-0">.flex-wrap > .unit-0 with a lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot lot of text</div>
<div class="unit">.unit</div>
<div class="unit-1-4">.unit-1-4</div></div>
Unit 1 on mobile
Sometimes we need to show .unit-1-3 on desktop, and .unit-1 on mobile. We can use .unit-1-on-mobile inside .flex-wrap to achieve this:
.flex-wrap > .unit-1-3.unit-1-on-mobile
.flex-wrap > .unit-2-3.unit-1-on-mobile
<div class="flex-left flex-wrap">
<div class="unit-1-3 unit-1-on-mobile">.flex-wrap > .unit-1-3.unit-1-on-mobile</div>
<div class="unit-2-3 unit-1-on-mobile">.flex-wrap > .unit-2-3.unit-1-on-mobile</div></div>
Units gap
In all of the above examples, the .unit* has no left and right paddings, it may not convenient sometimes. We can add .units-gap and .units-gap-big to the flexbox container to add gaps between .unit*s:
.units-gap > .unit-0
.units-gap > .unit
.units-gap > .unit-1-4
<div class="flex-left units-gap top-gap text-center">
<div class="unit-0 site-box">.units-gap > .unit-0</div>
<div class="unit site-box">.units-gap > .unit</div>
<div class="unit-1-4 site-box">.units-gap > .unit-1-4</div></div>
.units-gap-big > .unit-0
.units-gap-big > .unit
.units-gap-big > .unit-1-4
<div class="flex-left units-gap-big top-gap text-center">
<div class="unit-0 site-box">.units-gap-big > .unit-0</div>
<div class="unit site-box">.units-gap-big > .unit</div>
<div class="unit-1-4 site-box">.units-gap-big > .unit-1-4</div></div>
AAA
.flex-bottom,
.flex-center,
.flex-left,
.flex-middle,
.flex-right,
.flex-top,
.flex-vertical {
-ms-flex-flow: row nowrap;
-webkit-box-direction: normal;
-webkit-box-orient: horizontal;
-webkit-flex-flow: row nowrap;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
flex-flow: row nowrap;
}
.flex-bottom,
.flex-center,
.flex-left,
.flex-middle,
.flex-right,
.flex-top,
.flex-vertical.flex-bottom,
.flex-vertical.flex-center,
.flex-vertical.flex-left,
.flex-vertical.flex-middle,
.flex-vertical.flex-right,
.flex-vertical.flex-top {
-ms-flex-align: stretch;
-ms-flex-pack: start;
-webkit-align-items: stretch;
-webkit-box-align: stretch;
-webkit-box-pack: start;
-webkit-justify-content: flex-start;
align-items: stretch;
justify-content: flex-start;
}
.flex-center,
.flex-vertical.flex-middle {
-ms-flex-pack: center;
-webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center;
}
.flex-right,
.flex-vertical.flex-bottom {
-ms-flex-pack: end;
-webkit-box-pack: end;
-webkit-justify-content: flex-end;
justify-content: flex-end;
}
.flex-top,
.flex-vertical.flex-left {
-ms-flex-align: start;
-webkit-align-items: flex-start;
-webkit-box-align: start;
align-items: flex-start;
}
.flex-middle,
.flex-vertical.flex-center {
-ms-flex-align: center;
-webkit-align-items: center;
-webkit-box-align: center;
align-items: center;
}
.flex-bottom,
.flex-vertical.flex-right {
-ms-flex-align: end;
-webkit-align-items: flex-end;
-webkit-box-align: end;
align-items: flex-end;
}
.units-gap {
margin-left: -7.5px;
margin-right: -7.5px;
}
.units-gap > .unit,
.units-gap > .unit-0,
.units-gap > .unit-1,
.units-gap > .unit-1-2,
.units-gap > .unit-1-3,
.units-gap > .unit-1-4,
.units-gap > .unit-1-on-mobile,
.units-gap > .unit-2-3,
.units-gap > .unit-3-4 {
padding-left: 7.5px;
padding-right: 7.5px;
}
.units-gap-big {
margin-left: -15px;
margin-right: -15px;
}
.units-gap-big > .unit,
.units-gap-big > .unit-0,
.units-gap-big > .unit-1,
.units-gap-big > .unit-1-2,
.units-gap-big > .unit-1-3,
.units-gap-big > .unit-1-4,
.units-gap-big > .unit-1-on-mobile,
.units-gap-big > .unit-2-3,
.units-gap-big > .unit-3-4 {
padding-left: 15px;
padding-right: 15px;
}
.unit {
-ms-flex-positive: 1;
-ms-flex-preferred-size: 0;
-webkit-box-flex: 1;
-webkit-flex-basis: 0;
-webkit-flex-grow: 1;
flex-basis: 0;
flex-grow: 1;
max-width: 100%;
}
.unit-1,
.unit-1-2,
.unit-1-3,
.unit-1-4,
.unit-1-on-mobile,
.unit-2-3,
.unit-3-4 {
-ms-flex-negative: 0;
-webkit-flex-shrink: 0;
flex-shrink: 0;
}
.unit-1 {
-ms-flex-preferred-size: 100%;
-webkit-flex-basis: 100%;
flex-basis: 100%;
max-width: 100%;
}
.unit-1-2 {
-ms-flex-preferred-size: 50%;
-webkit-flex-basis: 50%;
flex-basis: 50%;
max-width: 50%;
}
.unit-1-3 {
-ms-flex-preferred-size: 33.33%;
-webkit-flex-basis: 33.33%;
flex-basis: 33.33%;
max-width: 33.33%;
}
.unit-2-3 {
-ms-flex-preferred-size: 66.67%;
-webkit-flex-basis: 66.67%;
flex-basis: 66.67%;
max-width: 66.67%;
}
.unit-1-4 {
-ms-flex-preferred-size: 25%;
-webkit-flex-basis: 25%;
flex-basis: 25%;
max-width: 25%;
}
.unit-3-4 {
-ms-flex-preferred-size: 75%;
-webkit-flex-basis: 75%;
flex-basis: 75%;
max-width: 75%;
}
.flex-vertical {
-ms-flex-direction: column;
-webkit-box-direction: normal;
-webkit-box-orient: vertical;
-webkit-flex-direction: column;
flex-direction: column;
}
.flex-vertical > .unit,
.flex-vertical > .unit-0,
.flex-vertical > .unit-1,
.flex-vertical > .unit-1-2,
.flex-vertical > .unit-1-3,
.flex-vertical > .unit-1-4,
.flex-vertical > .unit-1-on-mobile,
.flex-vertical > .unit-2-3,
.flex-vertical > .unit-3-4 {
max-width: none;
}
.flex-vertical > .unit-1 {
max-height: 100%;
}
.flex-vertical > .unit-1-2 {
max-height: 50%;
}
.flex-vertical > .unit-1-3 {
max-height: 33.33%;
}
.flex-vertical > .unit-2-3 {
max-height: 66.67%;
}
.flex-vertical > .unit-1-4 {
max-height: 25%;
}
.flex-vertical > .unit-3-4 {
max-height: 75%;
}
.flex-wrap {
-ms-flex-wrap: wrap;
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
}
@media (max-width: 767px) {
.unit-1-on-mobile {
-ms-flex-preferred-size: 100%;
-webkit-flex-basis: 100%;
flex-basis: 100%;
max-width: 100%;
}
.flex-vertical > .unit-1-on-mobile {
max-height: 100%;
}
}