The previous grid article dealt with how to come up with a CSS strategy when you're working with another visual designer's comps. Now I'd like to discuss doing grid-based theme design for open source content management systems, e.g. Drupal and WordPress. The purpose of this article is to give you an idea of how to approach blog theme design using a grid system. After reading this, you should be able to create a fully-functional grid-based design and HTML prototype that can be coverted into a theme template.
Creating the design grid
I recently redesigned this site because I wanted a layout that provided larger areas for my content. I needed a system that provided me the flexibility to get creative with the layout, but I also wanted to be sure not to lose control of the order and balance of page elements. While the spare layout of my previous design worked well, the new design would be a little more information dense.
For the new layout I used a grid with a simple division of thirds at a fixed width of 801 px. To get to this width, I played around with different sizes that could be centered within a 1024px x 768px browser window with ample white space on the sides. I targetted my maximum width around 800px.
I started by dividing up 800px into thirds and had an approximate width of 267px per third to play with. I borrowed the idea from the MIG design of using a 3 pixel border to separate each division. This odd-sized gutter makes room for 1px vertical border lines with 1px of padding at each side if I need it. I kept sub-dividing the thirds and after a bit of tweaking came up with the grid below. Each little pink box is 1/12 the width of the page (64px wide). 4 of these side to side make up a third of the width, which I would use for normal column of text. 2 or 3 of these side to side would be nice for a narrow column.

Screen shot of the grid (shrunken to fit)
So now I have a grid that could easily be divided into the thirds I needed to make a multi-column layout. This gives me a very simple grid to work with and I don't think I'd need to have smaller grid divisions for blog themes. Next step is to start looking at layout sketches I had in mind and think about how to turn them into XHTML & CSS. The visual design I'm basing this demo on is an old theme I once used on my blog, with a little modification of the graphics and color palette. You can see a screenshot of the old theme (it's the one in the upper left hand corner).
Turning boxes into content areas
To get started, I think about the page elements I want to use. I want the page to have these parts:
- header
- logo
- graphic element
- body
- weblog content
- blog entry
- entry metadata
- comments
- blog entry
- local navigation
- advertisements
- weblog content
- footer
I have some hierarchy of elements established in this list. You probably won't need to jot down a list of elements like this to do a weblog layout, but it helps to show where we're going.
Using the list as a starting point, I start to think about where I want these elements to go on the grid. You can use the grid like a wireframe (page schematic) by selecting areas of content and blocking them out, labeling them as you go.

Wireframe of content areas
Above, I took each of the page elements and blocked them out. We're going to take the wireframe and create the visual design elements for the page and design the layout of the content blocks.

Visual design comprehensive sketch over grid
As I'm doing this design, I realize that I don't actually need 3 grid blocks for the ads, so I use 2 instead. The layout is looking good to me so far, so now I start thinking about how to turn the blocks into CSS.
Turning content areas into CSS elements
Working with grids makes it easier to visualize a strategy for the CSS layout. I start by thinking of the hierarchy of divs that will make up my page wrapper and all of the child divs nested within it. I'll label those in the wireframe to show what I'm thinking.

As you can see, I'm going to enclose the entire page in div#wrapper. The rest is a bit like a sandwich. On the top, I put the #logo and #graphic in div#header. On the bottom, I have div#footer with my copyright info. And sandwiched in the middle is div#main which encloses the 3 column layout of #localnav, #content and #ads.
Next I go about measuring each content block and recording it's dimensions. I'm mainly looking for widths here except for the header, where I actually want the height as well. Heights will, of course, stretch vertically in the div#main. I measure the #header out to be 801px wide by 131px high. In the screenshot below, I show how I get the dimensions of #logo using the Info panel in Photoshop. I do this to each content area, getting fixed widths for all the areas.

Creating the style sheet for the layout
Constructing a shell
When I'm done gathering my measurements, I can start to construct the stylesheet. I start by creating a barebones shell that will look a bit like our wireframe. First I record the main divisions in my CSS file.
#wrapper {}
#header {}
#header #logo {}
#header #graphic {}
#main {}
#main #navigation {}
#main #content {}
#main #ads {}
#footer {}Then I put in all the dimensions and positioning. To test my sanity and the precision of my measurements, I put the grid into the div#wrapper as a background image. The core CSS for the layout is below.
* {
padding:0;
margin:0;
font-family: Helvetica, Arial, Sans-serif;
}
body {
background: #fff;
text-align: center;
}
#wrapper {
text-align: left;
margin: 20px auto;
width: 801px;
height: 801px;
background: transparent
url(grid-unit-boxes-801px.png) 0 0 repeat-y;
}
#header {
margin-bottom: 3px;
}
#header #logo {
float: left;
margin-right: 3px;
width: 198px;
height: 198px;
background: #ccc;
}
#header #graphic {
float: left;
width: 600px;
height: 198px;
background: #ccc;
}
#main {
margin-bottom: 3px;
}
#main #navigation {
float: left;
margin-right: 3px;
width: 198px;
background: #ccc;
}
#main #content {
float: left;
margin-right: 3px;
width: 466px;
background: #ccc;
}
#main #ads {
float: left;
width: 131px;
background: #ccc;
}
#footer {
background: #ccc;
}
/* PIE easyclearing */
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix {display: inline-table;}
/* Hides from IE-mac \*/
* html .clearfix {height: 1%;}
.clearfix {display: block;}
/* End hide from IE-mac */Next I start putting the widths (and heights for the #header) I recorded into the style sheet, creating a shell for the site. To make the boxes lay out precisely, I use left floats for columns and the Position Is Everything easy clearing method. If you view a demo of the CSS shell
you'll see that the boxes line up precisely against the background grid. Things are looking pretty good. Now we have to add the graphic elements from the comp.
Completing the wrapper
We're almost done now with the wrapper. To finish off the wrapper we have to cut up the background graphics and tweak the the widths just a little so that our border backgrounds fit around the grid. Take a look at the wrapper with header graphics and borders in place
.
Final touches
It's looking nearly finished now. All that's left is to do the style elements for the HTML inside the major divs. I put in all of the HTML for the template areas. I create the site logo and drop that into div#logo. I add some padding to the columns inside div#main. Finally, I add color and sizes to the fonts. Now you can view the final HTML template
.
Conclusion
Grids are very useful for doing even simple blog themes. They give you a solid system you can rely on to lay out your template and evolve it as needs require.
I showed you how I approach layout and site development for a weblog template and gave you an HTML prototype you can convert into a theme. You are free to use the template in this example, I'm releasing it under GPL. I hope this article helps Drupal developers in some way by giving them a process for approaching their theme designs. Have fun theming!
See also: Cutting and sewing grid-based design: Part 1, working with other people's comps
MT-Medic is not actually a plugin but rather a CGI application that allows you to do some useful or emergency tasks on your MovableType installation.
This script takes Jay Allen's Master Blacklist, parses it, and converts it into mod_security rules. This allows you to block various types of spam (comment and trackback spam) before it reaches your website.
Spammers have discovered Trackback and have recently been leaving their trail of unwelcome links all over the blogosphere. Listed here are some defensive measures you can take.
The db_dump utility reads the database file file and writes it to the standard output using a portable flat-text format understood by the db_load utility. The argument file must be a file produced using the Berkeley DB library functions.
Javascript that works with MovableType and Textile comments to show a live preview of how textile formatting will appear when submitted.
Allows visitors to your site to get an email when a new comment is posted to an entry to which they have subscribed.
MT tagging plug in.
Drupal users Morbus Iff and Tim Altman have been working on a robust converter based on Altman's MT to Drupal script, that will convert an MT database to Drupal.
It's been a pretty interesting few days for weblog tools. This week Blogger announced their updated system and web site and met with a lot of favorable reviews. Today, SixApart announces their new license and pricing model for MT, and it meets with some pretty mixed reviews.
I don't know if this means the end for MT, as some are saying. I've been thinking, since they became SixApart and started offering TypePad, that they should be driving towards this model, where they sell MT as a commercial application that people have to pay for and allow people to register a TypePad blog for personal weblog needs. How else could they survive as a business? MT has never been an open source project. It's built on the work of individuals who deserve to get paid for their efforts. The more I look at this pricing scheme, however, the more I think they should have made the personal licenses cheaper and the biggest commercial one more expensive with a bigger number of author seats. But what do I know about that.
If you're using MT for client projects, then why not build in the cost of MT in your pricing. I think Ben and Mena deserve that if MT is being used on for-profit commercial sites. But, if I were a freelancer, I probably wouldn't jump to use MT as a solution immediately if it meant cutting into my fees. I think its nice of them to still offer MT as a free application for single-author, non-commercial blogs, but I do think the new limitation of one author/3 blogs for this free version is pretty ridiculous and I wonder how that will affect their relationship with these designer/developers.
In some respects, I can see how a lot of web designers -- especially those using MT for personal/non-commerical sites -- are peeved by this new development. There's no reason a single individual who creates multiple blogs for personal use should be restricted to 3 blogs. We'll see how this affects that community soon. A lot of people are bitching now and threatening to use a different tool and I'm sure a good amount will leave MT because of that. But the question is, how will that affect their business really, if they weren't getting much money out of those relationships. Will new commercial relationships make up for that loss?