Update! Check out CSSresetr for an easy way to test and download the best reset styles for your next design.

Using CSS to style semantically meaningful (X)HTML markup is an important key to modern web design practices. In a perfect world, every browser would interpret and apply all CSS rules in exactly the same way. However, in the imperfect world in which we live, quite the opposite frequently happens to be the case: many CSS styles are displayed differently in virtually every browser.

Many, if not all, major modern browsers (e.g., Firefox, Opera, Internet Explorer, Netscape, et al) implement their own generalized CSS rules, which often conflict with designer-applied styles. Other browsers fail to implement properly various CSS rules, making a mess of pages that happen to display perfectly in other browsers. Even worse, some browsers completely ignore specific aspects of CSS altogether, entirely ignoring widely accepted CSS attributes and properties.

Needless to say, the unpredictable manner in which browsers implement CSS requires us to seek realistic browser equalization strategies. Without relying on JavaScript to synthetically embellish default browser functionality, we focus our browser neutralization efforts entirely on CSS itself. By using an appropriately defined set of CSS “reset” rules, it is possible to override default browser styles and effectively neutralize behavior, allowing us to build our CSS on a uniform foundation.

Using a well-crafted set of global CSS reset styles enables designers to make assumptions about the defualt behavior of browsers. These presentational assumptions greatly simplify the process of creating a “universally” consistent CSS design using only one set of CSS rules. Such process simplification results in great savings of time and money. Many of the industry’s top designers have been using CSS reset styles for years, reaping the rewards and sharing the results.

In this article, I have rounded up a hand-selected collection of freely available global CSS reset styles. I have used each of these resets on various occasions with great success, and have even managed to scrape together a customized hybrid that cannibalizes key aspects of various others. For each reset, I provide as much information as possible concerning the source of the reset, key effects, and other essential information. Also, as I do not know the orignal author for some of these resets, please drop a comment if you happen to know. And so, without further ado, I present a killer collection of global CSS reset styles..

Minimalistic Reset — Version 1

As basic as it gets, this global reset employs a wildcard selector to reset the padding and margins on all elements to zero. In my experience snooping around the source code of other designers, this is the most commonly used CSS reset. I see it everywhere..

* {
padding: 0;
margin: 0;
}

Minimalistic Reset — Version 2

This reset is identical to the previous one, but also takes into account all default border treatments, which are effectively neutralized to zero as well..

* {
padding: 0;
margin: 0;
border: 0;
}

Minimalistic Reset — Version 3

This last version of the “minimalistic” reset is similar to the previous two, but also kills the default outline style..

* {
outline: 0;
padding: 0;
margin: 0;
border: 0;
}

Condensed Universal Reset

This is my current favorite CSS reset. It handles all the essentials, and ensures relatively universal default browser-style uniformity.

Poor Man’s Reset

I have no idea what to call some of these CSS reset rules. I named this one as I did because it seems to focus on a minimal collection of default browser styles. The CSS resets padding and margins on only the html and body elements; ensures that all font-sizes are reset; and removes the border from image links. These are all important aspects of any CSS design, and this reset takes care of all of them. If you happen to know the source of this ruleset, please drop us a comment. Otherwise, check it out..

Siolon’s Global Reset

Chris Poteet along with “various influences” created this remarkable technique for resetting default browser styles. Chris recommends placing the reset at the top of your style sheet for optimal cascading results. This method omits reset styles involving inline and block display elements. Also, remember to explicitly set margin and padding styles after implementing the reset. Note the unique margin-left40px; declaration for lists and blockquotes, and the margin20px0; for headings, forms, and other elements:

Shaun Inman’s Global Reset

Although I am not sure if Shaun actually wrote this particular CSS ruleset (although it is likely he did), it happens to be the CSS reset used to neutralize styles for his current, Helvetica/monochrome site. Although I have taken the liberty of restructuring the presentation of this reset for the sake of clarity (I have made no functional changes), this is some pretty tight CSS, implementing a choice set of rules to reset many critical default browser CSS styles.

Yahoo CSS Reset

The folks at Yahoo! have also developed their own browser reset styles. As with other reset styles, the Yahoo! Reset CSS eliminates inconsistently applied browser styling for many key (X)HTML elements.

Eric Meyer’s CSS Reset

As discussed in the original article, CSS guru Erik Meyer set forth to create a universal set of reset styles. This is heavy-duty stuff, effectively neutralizing virtually every significant aspect of default, browser-applied CSS rules. This reset ruleset is far-reaching, resetting many different CSS properties. Keep this in mind during subsequent CSS development. If you experience unexpected, unexplainable behavior happening with your styles, begin by investigating and eliminating suspected aspects of this code (or any newly added reset styles) as the possible culprit — you’ll thank yourself later.. ;) In the meantime, I have taken the liberty of reformatting the presentation of Eric’s code. Rest assured, the rules have merely been rearranged. Functionally, the code is identical. Update: Eric’s site now features an official Meyer CSS Reset page, serving as a permanent location for the most current version of the reset code.

Condensed Meyer Reset

Although I am uncertain as to the original source of this particular CSS reset, it appears as if it is a condensed, slightly modified version of the Meyer reset. Many of the same declarations are made, and many of the same styles receive neutralizing treatments. Many attributes are not mentioned, however, resulting in more streamlined, less invasive reset collection. Note the duplicate declarations for the heading attributes (e.g., h1 – h6), which seems to prevent font-weight and font-size normalization from affecting paragraphs, divisions, and the other non-heading attributes addressed in the first declaration.

Tantek’s CSS Reset

Dubbed “undohtml.css”, Tantek’s CSS Reset is a solid choice for removing many of the most obtrusive default browser styles. This reset removes underlines from links and borders from linked images, eliminates padding and margins for the most common block-level elements, and sets the font size to 1em for headings, code, and paragraphs. As an added bonus, Tantek’s reset also “de-italicizes” the infamous address element! Nice :)

The Tripoli Reset

The Tripoli Reset(404 link removed 2012/06/16) by David Hellsing is part of a complete CSS standard for (X)HTML rendering. By neutralizing browser-default CSS styles, Tripoli “forms a stable, cross-browser rendering foundation for your web projects.” After resetting CSS styles, Tripoli’s generic.css(404 link removed 2012/06/16) rules may be used to “rebuild” the browser defaults for content typography. Some of the more prominent reset features include:

Thanks for the feedback, Ant! Btw, I edited your comment to include several instances of missing “c” characters, including the “.co” in your commentator link. Not sure what was up, but you may want to check your keyboard for faulty/missing keys.
Cheers,
Jeff

I have an idea for a CSS reset that I’m pretty sure hasn’t been tried yet. Anytime I’ve used the CSS reset code, I end up specifying all the rules myself anyway explicitly — so when I remove the reset the page display doesn’t change.

I was thinking, what if there was a CSS reset that made everything so ugly and obviously messed up that you had to explicitly set everything to make the page look the way you want it.

The idea with this is that you actually remove the “screwed up” CSS reset before deploying, and if you did it right, then the page should display the same with or without the reset file.

@Dan: not sure if you are joking here or not, but the idea is a great example of “out-of-the-box”, (so to speak) creative-type thinking. One reason why I would not use such a method — especially on complex/preexisting sites — is that, if I happened to miss some hideous selector or element before final presentation, the client and/or users would eventually discover what to them would look like a horrible mistake. This could work against your reputation, depending on the ghastliness of the overlooked item. Another reason that comes to mind after having used resets for quite a few sites, is that many of the items that are reset actually stay that way, requiring no further attention. It would thus be a bit of a waste of time to have to to (re)fix selectors unnecessarily. Just a thought.

Projects

About the site

Perishable Press is the work of Jeff Starr, professional developer, designer, author, and publisher with over 10 years of experience.
Check out some of Jeff's books and projects, follow on Twitter, or learn more »

Fun fact: Perishable Press has been online since 2005, and features over 800 articles and more than 11,000 comments. More stats »