Normalize.css (50.6k ⭐) has been the most popular CSS reset library for years. It saves you a lot of time matching a duplicate experience for each web browser.
The story of CSS resets has been always controversial – to which one you should use to whether or not they should be used at all. The whole idea of a CSS reset library is to deal with styling inconsistencies across browsers.
Unlike the Meyer reset, normalize.css doesn’t remove any styling from elements that were already consistent across browsers.
Normalize.css is a modern, HTML5-ready alternative to CSS resets.
Instead it preserves useful defaults, normalizes styles for a wide range of elements, correct bugs and common browser inconsistencies, and improves usability with subtle modifications.
There are then 2 main ways to make use of normalize.css:
npm install --save normalize.css
The single source file is heavily documented inline so that you can find out what each line of code is doing, why it was included, what the differences are between browsers, and more easily run your own tests.
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}
body {
margin: 0;
}
main
element consistently in IE.main {
display: block;
}
h1
elements within section
and article
contexts in Chrome, Firefox, and Safari.h1 {
font-size: 2em;
margin: 0.67em 0;
}
hr {
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
}
em
font sizing in all browsers.pre {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
a {
background-color: transparent;
}
abbr[title] {
border-bottom: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}
b,
strong {
font-weight: bolder;
}
em
font sizing in all browsers.code,
kbd,
samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
small {
font-size: 80%;
}
sub
and sup
elements from affecting the line height in all browsers.sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
img {
border-style: none;
}
button,
input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
}
button,
input {
/* 1 */
overflow: visible;
}
button,
select {
/* 1 */
text-transform: none;
}
button,
[type='button'],
[type='reset'],
[type='submit'] {
-webkit-appearance: button;
}
button::-moz-focus-inner,
[type='button']::-moz-focus-inner,
[type='reset']::-moz-focus-inner,
[type='submit']::-moz-focus-inner {
border-style: none;
padding: 0;
}
button:-moz-focusring,
[type='button']:-moz-focusring,
[type='reset']:-moz-focusring,
[type='submit']:-moz-focusring {
outline: 1px dotted ButtonText;
}
fieldset {
padding: 0.35em 0.75em 0.625em;
}
fieldset
elements in IE. Remove the padding so developers are not caught out when they zero out fieldset
elements in all browsers.legend {
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
}
progress {
vertical-align: baseline;
}
textarea {
overflow: auto;
}
[type='checkbox'],
[type='radio'] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
[type='number']::-webkit-inner-spin-button,
[type='number']::-webkit-outer-spin-button {
height: auto;
}
[type='search'] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
[type='search']::-webkit-search-decoration {
-webkit-appearance: none;
}
inherit
in Safari.::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
details {
display: block;
}
summary {
display: list-item;
}
template {
display: none;
}
[hidden] {
display: none;
}