A simple, responsive and customizable grid system for CSS, built with Sass.
- Float based grid system with configurable size classes.
 - Natural language class names rather than decimal numbers.
 - Utility classes for cell alignment and offsets.
 - Configurable optional responsive sizing classes.
 
The easiest way to use sass-grids is to use a package manager like npm or bower. However, cloning the repository and manually compiling is also possible.
npm install sass-gridsbower install sass-gridsYou need to install git, node.js, npm and the sass gem.
git clone https://github.com/nsommer/sass-grids.git
cd sass-grids
npm install
grunt dist
For detailed documentation, visit the demo page. Here's an example:
<div class="grid">
  <div class="cell cell-five-tenths">I'm a cell taking half the width of my parent.       </div>
  <div class="cell cell-four-tenths">I'm a cell taking four tenths the width of my parent.</div>
  <div class="cell cell-one-tenth">  I'm a cell taking one tenths the width of my parent. </div>
</div>To be able to use the grid system with standard values, copy the dist/sass-grids.css into your project folder and include it into the head your HTML like that:
<link rel="stylesheet" href="sass-grids.css">Alternatively, you can overwrite the standard settings and compile your own custom grid system.
All configuration variables are defined in src/_variables.scss. Due to the usage of the !default keyword on all variables, it is very easy to customize those values. Just create a Sass file that resets the variables you want to and import sass-grids after that (of course outsourcing the variable resets into a scss file of its own would be good practice). E.g.:
$cells-per-row: 5;
$gutter: 25px;
$responsive-size-classes: false;
@import "sass-grids";The number of cells per row for which css classes are generated ist set by the $cells-per-row variable. To create human readable class names, two maps - $number-names and $share-names - are used. By default, they include entries for grid systems with up to 20 cells per row. If you want to generate a grid system with more than 20 cells per row possible, you have to overwrite the maps with maps that contain enough entries for your grid system.
Default values:
$cells-per-row: 10;
$number-names: (
  1:  "one",
  2:  "two",
  3:  "three",
  4:  "four",
  5:  "five",
  6:  "six",
  7:  "seven",
  8:  "eight",
  9:  "nine",
  10: "ten",
  11: "eleven",
  12: "twelve",
  13: "thirteen",
  14: "fourteen",
  15: "fifteen",
  16: "sixteen",
  17: "seventeen",
  18: "eighteen",
  19: "nineteen",
  20: "twenty"
) !default;
// Lookup table to get shares as names by numeric value.
$share-names: (
  2:  "half",
  3:  "third",
  4:  "fourth",
  5:  "fifth",
  6:  "sixth",
  7:  "seventh",
  8:  "eighth",
  9:  "ninth",
  10: "tenth",
  11: "eleventh",
  12: "twelfth",
  13: "thirteenth",
  14: "fourteenth",
  15: "fifteenth",
  16: "sixteenth",
  17: "seventeenth",
  18: "eighteenth",
  19: "nineteenth",
  20: "twentieth"
) !default;The gutter between two cells is defined by the $gutter variable.
Default:
$gutter: 1em !default;Sizing classes for specific viewport widths to enable responsive design with a mobile first approach can be toggled at build time by the variable $responsive-size-classes. The width breakpoints are defined in the map $width-breakpoints which contains mapping for width sizes and strings to enable human readable viewport naming in classes.
Defaults:
$responsive-size-classes: true !default;
$width-breakpoints: (
  "tablet":     720px,
  "desktop":    960px,
  "widescreen": 1200px
) !default;Besides floating based grid systems, there do also exist solutions that use flexbox or inline-block and box-sizing. I decided to go for a solution using floats because I already knew how that works. Flexbox would probably be the best solution technically, but aside from very bad support in IE, this is something I want to explore another time.
I needed a grid system for a website I was building so I took the opportunity to improve my Sass skills by writing it from scratch by myself. :-)
Check out the blog post I wrote about it.
- 1.0.0 Completely changed CSS class names.
 - 0.1.2 Eases customization
 - 0.1.1 Bug fixes
 - 0.1.0 Initial release
 
MIT license rocks.