Layout modules are more complex than utilities and are tied to markup structure. They are designed to be highly reusable and to inter-operate with other styles.
The utility-based grid allows a lot of flexibility in creating complex layouts.
Start by using a .clearfix
container.
Optionally use a .container
to set a max-width.
Adjust the container width with the --container-width
variable.
<div class="container">
<div class="clearfix">
</div>
</div>
Add columns using the .col
and grid width .col-N
classes.
.col
floats elements left and sets box-sizing to border-box.
.col-N
sets width according to a 12 column grid.
The total number of columns in a row should add up to 12.
<div class="clearfix outline-blue">
<div class="col col-6">.col.col-6</div>
<div class="col col-6">.col.col-6</div>
</div>
Use breakpoint-prefixed column utilities to change the grid at different screen widths. Each breakpoint applies to that screen width and up. Unprefixed styles apply to all screen widths.
Start the grid from the small breakpoint and up with the .sm-col
and .sm-col-6
utilities.
<div class="clearfix outline-blue">
<div class="sm-col sm-col-6">.sm-col.sm-col-6</div>
<div class="sm-col sm-col-6">.sm-col.sm-col-6</div>
</div>
Add grid width adjustments for larger breakpoints.
<div class="clearfix outline-blue">
<div class="sm-col sm-col-6 md-col-5 lg-col-4">.sm-col.sm-col-6.md-col-5.lg-col-4</div>
<div class="sm-col sm-col-6 md-col-7 lg-col-8">.sm-col.sm-col-6.md-col-7.lg-col-8</div>
</div>
Use padding and negative margin utilities to create gutters based on the white space scale. When using negative margin, be sure to compensate for the extra width created with a padded parent element or by using overflow hidden. Otherwise, horizontal scrolling may occur.
Create gutters with a width of 2 on the white space scale using mxn2
and px2
.
<div class="clearfix mxn2 outline-blue">
<div class="sm-col sm-col-6 md-col-5 lg-col-4 px2"><div>.px2</div></div>
<div class="sm-col sm-col-6 md-col-7 lg-col-8 px2"><div>.px2</div></div>
</div>
For larger or smaller gutters, use any of the white space utilities.
<div class="clearfix mxn1 outline-blue">
<div class="col col-6 px1"><div>.px1</div></div>
<div class="col col-6 px1"><div>.px1</div></div>
</div>
<div class="clearfix mxn3 outline-blue">
<div class="col col-6 px3"><div>.px3</div></div>
<div class="col col-6 px3"><div>.px3</div></div>
</div>
Nest whole grid structures within columns to created nested grids.
<div class="clearfix mxn2 outline-blue">
<div class="sm-col sm-col-6 md-col-5 lg-col-4 px2"><div>Unnested</div></div>
<div class="sm-col sm-col-6 md-col-7 lg-col-8 px2">
<div class="clearfix mxn2">
<div class="col col-6 px2"><div>Nested</div></div>
<div class="col col-6 px2"><div>Nested</div></div>
</div>
</div>
</div>
To reverse the order of columns, use the .col-right
class to float right
<div class="clearfix outline-blue">
<div class="col-right col-6">.col-right.col-6</div>
<div class="col col-6">.col.col-6</div>
</div>
Use the .mx-auto
class to center columns within their containers.
<div class="clearfix mxn2 outline-blue">
<div class="col-8 px2 mx-auto">
<div>Centered Column</div>
</div>
</div>
Column float utilities can be used independently of width utilities.
<div class="clearfix border border-blue">
<div class="sm-col p2 border border-blue">.sm-col</div>
<div class="overflow-hidden border border-blue">.overflow-hidden</div>
</div>
Column width utilities can also be used independently to add percentage based widths to any block or inline-block element.
Bacon ipsum dolor sit amet chuck prosciutto landjaeger ham hock filet mignon shoulder hamburger pig venison. Ham bacon corned beef, sausage kielbasa flank tongue pig drumstick capicola swine short loin ham hock kevin.
<div class="border border-blue">
<div class="right sm-col-6 md-col-4 p2 border border-blue">.sm-col-6.md-col-4</div>
<p>Bacon ipsum dolor sit amet chuck prosciutto landjaeger ham hock filet mignon shoulder hamburger pig venison. Ham bacon corned beef, sausage kielbasa flank tongue pig drumstick capicola swine short loin ham hock kevin.</p>
</div>
The flex-object is a powerful suite of utilities based on the flexible box layout module. These utilities can replace the need for a grid system in many instances, but can also be combined with the Basscss grid for even more possibilities.
Note: browser support for the flexible box layout module is limited. See http://caniuse.com/#feat=flexbox
To begin, add the .flex
class to a parent element.
This sets the element to display: flex
and enables a flex context for all direct child elements.
<div class="flex">
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="px2 py1 border border-blue">Hamburger</div>
</div>
To wrap elements, use the .flex-wrap
utility.
<div class="flex flex-wrap">
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="px2 py1 border border-blue">Hamburger</div>
</div>
To arrange items vertically, use the .flex-column
utility.
<div class="flex flex-column">
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="px2 py1 border border-blue">Hamburger</div>
</div>
Use these utilities to control vertical alignment of child elements.
To vertically center child elements, add the .flex-center
class to the parent element.
<div class="flex flex-center">
<div class="flex-auto px2 py4 blue border border-blue">
<h1 class="m0">Hamburger</h1>
</div>
<div class="px2 blue border border-blue">Hot dog</div>
</div>
To stretch all elements to fill the height of the parent, use the .flex-stretch
utility.
<div class="flex flex-stretch">
<div class="flex-auto px2 py4 blue border border-blue">
<h1 class="m0">Hamburger</h1>
</div>
<div class="px2 blue border border-blue">Hot dog</div>
</div>
To ensure nested elements stretch as well, add the .flex
class to relevant elements.
<div class="flex flex-stretch">
<div class="flex-auto px2 py4 blue border border-blue">
<h1 class="m0">Hamburger</h1>
</div>
<div class="flex blue border border-blue">
<div class="px2 white bg-blue">
Hot dog
</div>
</div>
</div>
To align child elements to their baseline, use the .flex-baseline
utility.
<div class="flex flex-baseline blue border-bottom border-blue">
<div class="flex-auto px2">
<h1 class="m0">Hamburger</h1>
</div>
<div class="px2">Hot dog</div>
</div>
To align child elements to the top, use the .flex-start
utility.
<div class="flex flex-start blue border-top border-blue">
<div class="flex-auto px2">
<h1 class="m0">Hamburger</h1>
</div>
<div class="px2">Hot dog</div>
</div>
To align child elements to the bottom, use the .flex-end
utility.
<div class="flex flex-end blue border-bottom border-blue">
<div class="flex-auto px2">
<h1 class="m0">Hamburger</h1>
</div>
<div class="px2">Hot dog</div>
</div>
To set display flex only at certain breakpoints and up,
use the breakpoint-prefixed versions of .flex
.
All other utilities will only work at the set breakpoint.
<div class="sm-flex flex-center mb2 blue">
<div class="p1 border border-blue">
<h2 class="m0">.sm-flex</h2>
</div>
<div class="flex-auto p1 border border-blue">Hamburger</div>
<div class="p1 border border-blue">Hamburger</div>
</div>
<div class="md-flex flex-center mb2 blue">
<div class="p1 border border-blue">
<h2 class="m0">.md-flex</h2>
</div>
<div class="flex-auto p1 border border-blue">Hamburger</div>
<div class="p1 border border-blue">Hamburger</div>
</div>
<div class="lg-flex flex-center mb2 blue">
<div class="p1 border border-blue">
<h2 class="m0">.lg-flex</h2>
</div>
<div class="flex-auto p1 border border-blue">Hamburger</div>
<div class="p1 border border-blue">Hamburger</div>
</div>
To control the size and behavior of child elements, use these utilities.
To make an element grow or shrink as needed, use the .flex-auto
utility.
<div class="flex">
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="flex-auto blue border border-blue"></div>
<div class="px2 py1 border border-blue">Hamburger</div>
</div>
To make an element grow, but not shrink, use the .flex-grow
utility.
<div class="flex">
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="flex-grow blue border border-blue"></div>
<div class="px2 py1 border border-blue">Hamburger</div>
</div>
To prevent an element from growing or shrinking, use the .flex-none
utility.
<div class="flex">
<div class="flex-auto px2 py1 border border-blue">Hamburger</div>
<div class="flex-auto px2 py1 border border-blue">Hamburger</div>
<div class="flex-none px2 py1 border border-blue">Hamburger</div>
</div>
To change the order of child elements, use the .flex-first
and .flex-last
utilities.
<div class="flex">
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="flex-first px2 py1 border border-blue">First Hamburger</div>
<div class="px2 py1 border border-blue">Hamburger</div>
</div>
<div class="flex">
<div class="px2 py1 border border-blue">Hamburger</div>
<div class="flex-last px2 py1 border border-blue">Last Hamburger</div>
<div class="px2 py1 border border-blue">Hamburger</div>
</div>
.flex { display: flex }
.flex-column { flex-direction: column }
.flex-wrap { flex-wrap: wrap }
.flex-center { align-items: center }
.flex-baseline { align-items: baseline }
.flex-stretch { align-items: stretch }
.flex-start { align-items: flex-start }
.flex-end { align-items: flex-end }
.flex-first { order: -1 }
.flex-last { order: 1024 }
.flex-auto { flex: 1 1 auto }
.flex-grow { flex: 1 0 auto }
.flex-none { flex: none }