Table of Contents
- Introduction
- What is a CSS Reset?
- Why Use a CSS Reset?
- Common CSS Reset Techniques
- What is Normalize.css?
- Why Use Normalize.css?
- Key Differences Between CSS Reset and Normalize.css
- Which One Should You Use?
- Conclusion
Introduction
When building web pages, developers quickly realize that different browsers have their own default styles for HTML elements. These inconsistencies can cause layouts to look different across browsers if not properly handled. Two popular approaches to solve this issue are using a CSS Reset or Normalize.css. While they both aim to create a consistent baseline, they do so in fundamentally different ways.
In this guide, we will explore what a CSS Reset is, what Normalize.css is, how they differ, and when to use each.
What is a CSS Reset?
A CSS Reset is a set of rules designed to remove all default styling applied by browsers to HTML elements. The idea is to “reset” the appearance of everything, so developers can apply their own styles consistently from scratch.
The goal of a CSS reset is to eliminate cross-browser inconsistencies caused by:
- Margins and padding
- Borders
- Font sizes
- Heading weights
- List styles
When you apply a reset, most elements are stripped of their natural browser styling, resulting in a very plain, uniform look.
Why Use a CSS Reset?
Using a CSS reset ensures that your design is based entirely on your custom styles, rather than being influenced by browser defaults. Key advantages include:
- Consistency: Start with the same baseline across all browsers.
- Predictability: No unexpected padding or margins causing layout issues.
- Control: Full control over typography, spacing, and component behavior.
However, pure resets can sometimes be too aggressive—you lose useful default behaviors (such as visible buttons or accessible focus outlines) unless you manually reintroduce them.
Common CSS Reset Techniques
Several popular reset stylesheets have been created over time:
Eric Meyer’s Reset
One of the earliest and most widely used resets, designed to zero out almost everything.
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
vertical-align: baseline;
}
Modern Reset Example
Developers today sometimes prefer lightweight resets:
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
What is Normalize.css?
Normalize.css is a modern, nuanced alternative to a pure CSS reset. Instead of removing all styles, Normalize.css preserves useful browser defaults while correcting bugs and inconsistencies across different browsers.
Created by Nicolas Gallagher and Jonathan Neal, Normalize.css aims to:
- Make built-in browser styles consistent.
- Improve usability and accessibility.
- Fix cross-browser inconsistencies rather than erasing all styles.
You can find Normalize.css at necolas.github.io/normalize.css.
Why Use Normalize.css?
Normalize.css is designed with modern best practices in mind. Benefits include:
- Preserving Usability: Important defaults like
button
styles and form elements are left intact for better accessibility. - Improving Consistency: Subtle differences like heading font sizes, superscript positioning, or table border collapses are normalized across browsers.
- Better Maintenance: By not wiping everything, developers spend less time redefining useful browser behaviors.
- Modern Browser Targeting: Normalize.css focuses on modern browsers while providing fallbacks for older ones.
Example of how Normalize.css modifies elements:
button,
input {
overflow: visible;
}
This fixes an IE-specific issue without affecting the styling in other browsers.
Key Differences Between CSS Reset and Normalize.css
Feature | CSS Reset | Normalize.css |
---|---|---|
Strategy | Remove all default styles | Preserve and fix default styles |
Usability | Removes useful defaults (needs redefining) | Keeps accessibility features |
Developer Workload | Higher — must re-style everything | Lower — styles stay usable |
Target Browsers | All, including very old ones | Modern browsers mainly |
Purpose | Consistency by elimination | Consistency by harmonization |
Which One Should You Use?
Choosing between a CSS Reset and Normalize.css depends on your project requirements.
- Use a CSS Reset if:
- You want complete control and are building a highly custom, design-intensive UI.
- You are using a component library that already manages all styling from scratch.
- You are targeting older browsers with strict compatibility requirements.
- Use Normalize.css if:
- You prefer a balanced approach that preserves accessibility.
- You want to speed up development by relying on good native browser behaviors.
- You are building sites with lots of standard elements like forms and buttons.
Many modern frameworks like Bootstrap and Tailwind CSS take inspiration from Normalize.css rather than applying harsh resets.
Conclusion
Handling browser inconsistencies is one of the fundamental steps toward building robust, professional websites. Both CSS Resets and Normalize.css offer viable paths but differ in philosophy and application.
- CSS Reset offers a clean slate but demands more manual work and careful styling for accessibility.
- Normalize.css offers a smart starting point by preserving useful defaults and fixing problematic inconsistencies.
When in doubt, for most modern web projects, starting with Normalize.css is recommended unless you have a very specific reason to use a full reset.
Remember: consistency and accessibility should always be your top priorities, no matter which strategy you choose.