I always use a css framework I made out of a few basic stylesheets.
A reset.css to make sure all margins, paddings, borders etc are the same in all browsers. Then a typography.css to set a few rules for all fonts, sizes, colors etc for all standard elements like paragraphs, lists, headings, etc. Then a forms.css to take care of the forms, and finally a wireframe.css that lets me build a page based on A List Apart's Holy Grail: http://www.alistapart.com/articles/holygrail/
In my case the wireframe consists of a header, subheader, container and footer. In the container I can specify one, two of three columns by giving it the appropriate class.
With this basic set-up I start writing the HTML very globally. Of course the divs for the wireframe sections, and then the divisions within those divs. Usually I fill the header with a h1 and a list with main navigational elements (depending on the design), the sidebars with one or more blocks of lists and/or paragraphs, and the main column with just some paragraphs. This is just to fill the page up a bit, even if the content's still gibberish.
Then I start taking each element (for instance the navigation menu), first writing the HTML for it as if it were shown in a browser without stylesheets. Make sure the semantics are okay, use h1 for headers, p for paragraph, ul/ol for lists, etc. Then when that specific element's HTML is ready and looks good in a style-less browser I start applying the css.
All the style that I add after having configured the framework's stylesheets go into a separate stylesheet, being main.css. I usually divide this stylesheet in the same way as the page, first a block with the classes that are used throughout the entire page (like recurring blocks that serve multiple purposes), and then one by one blocks with style for the header and it's contents, the subheader and it's contents, the main column, the left and right sidebar, and the footer.
This process makes me think about each html element before even applying style to it, so that the underlying html is semantically correct, but by defining the main css framework beforehand I at least have something to work in.
(an example in progress can be seen at pkr.nl/template/, where the forum tab in the topmost menu is clickable for another page with less columns).