• Stars
    star
    122
  • Rank 292,031 (Top 6 %)
  • Language
    CSS
  • Created about 12 years ago
  • Updated over 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Bearded Responsive Grid Example

Bearded Responsive Grid Example

This is a simple demo page using the responsive grid I developed for the Pittsburgh Children's Museum website. Since then, we've continued using variations of it on our client sites at Bearded. It's a 12-column grid that uses percentages for everything. The values I used for gutter and column widths are calculated to never be more granular than an eighth of a percent, to avoid rounding issues.

Here are the major points:

Infinitely Nest-able

You can nest grids to your heart's content. Put a 6 column layout in side a 4-column layout. To do this I decided to forgo the split-the-gutters approach, and went with right margin gutters instead. That means we need to know what the last column is so we can remove the gutter on it. I made some handy mixins to help with this (more details below).

Compass-y and Sass-y

The grid is for use with Sass, and the Compass framework in specific. All the useable parts are mixins, of which there are two categories: column settings and last settings. Column settings apply column-based widths. Last settings calculate a pattern for which columns get the last setting (and thus no right margin).

Column Settings

When determining what to use, remember that the width of an area is calculated in the number of columns (out of a possible 12) that make up that width. So an area that you want to be 50% of the possible width it could be (ie. 6 columns wide) should get @include column(6).

Last Settings

On the other hand, last settings are trying to determine which column will get the last class (and thus no right margin). If you want to do a two-column layout, you'd use @include last-col2.

Example

So if you want a 4 column grid, you'll want to combine @include column(3) (3 x 4 = 12) with @include last-col4. Cool? Cool.

Browser Support

The grid relies heavily on the nth-child pseudo-class, which isn't supported in IE7 or 8 "When Can I Use CSS3 Selectors". For the Children's Museum site we added classes with Javascript. But since then we've realized that it's generally more efficient to add classes into our markup, and then make sure the grid CSS uses those selectors as a fall-back to nth-child.

Having an nth-child-based grid is great during the wireframing and design process because of all the speed and flexibility it provides in achieving layouts. With a finished site design, though, there often won't be that many layouts to account for, so this seems like a fairly sane approach to get IE working.

12 or 16?

The grid file also has variables for a 16-column layout commented out. Feel free to exchange those for the 12-column variables. The advantage of 12-column is, of course, that you you can easily achieve equal-width 3 or 4 column layouts. With a 16-column grid you lose the equal width 3-column option, but your grid is a little more granular. With a little more work, a well-implemented 16-column grid can lead to some really cool asymmetrical layouts.

Enjoy!

======

Bearded Grid Gem

If you're using Ruby on Rails or want to use the Bearded Grid on your own project, we've created a Ruby Gem!

Rails folks, you'll probably want to add the gem to your Gemfile.

If you're using Compass without Rails, you'll first want to install the gem: gem install bearded_grid

And then in your config.rb file, add this line: require 'bearded_grid'

Of course, you'll need to re-compile your project, and then you should be able to access the grid styles.

Pro-tip(s):

You may want to configure your containers' max-widths. You can do so by doing the following:

.my-container {
  @include container;
}

By default, your container will get a max-width of 81.25em (1300px). If you want to customize this, simply do:

.my-container {
  @include container(68.75em);
}

Container will accept both em and px values, but will not convert from one to the other. If you're not yet using em-based media queries, please consider doing so! You can get more info on why it's a good idea here: The EMs have it: Proportional Media Queries FTW!