sanitize.css
sanitize.css is a CSS library that provides consistent, cross-browser
default styling of HTML elements alongside useful defaults.
It is developed alongside normalize.css, which means every normalization
is included, and every normalization and opinion are clearly marked and
documented.
Usage
<link href="https://unpkg.com/sanitize.css" rel="stylesheet" />
Or to exclusively support evergreen browsers.
<link href="https://unpkg.com/sanitize.css/evergreen.css" rel="stylesheet" />
Learn more about sanitize.css
.
Forms CSS
A separate stylesheet that normalizes form controls without side effects.
<link href="https://unpkg.com/sanitize.css/forms.css" rel="stylesheet" />
Or to exclusively support evergreen browsers.
<link href="https://unpkg.com/sanitize.css/forms.evergreen.css" rel="stylesheet" />
Learn more about forms.css
.
Assets CSS
A separate stylesheet that applies a comfortable measure to plain documents.
<link href="https://unpkg.com/sanitize.css/assets.css" rel="stylesheet" />
Learn more about assets.css
.
Typography CSS
A separate stylesheet that normalizes typography using system interface fonts.
<link href="https://unpkg.com/sanitize.css/typography.css" rel="stylesheet" />
Learn more about typography.css
.
Reduce Motion CSS
A separate stylesheet that normalizes typography using system interface fonts.
<link href="https://unpkg.com/sanitize.css/reduce-motion.css" rel="stylesheet" />
Learn more about reduce-motion.css
.
Page CSS
A separate stylesheet that applies a comfortable measure to plain documents.
<link href="https://unpkg.com/sanitize.css/page.css" rel="stylesheet" />
Install
npm install sanitize.css --save
Webpack Usage
Import sanitize.css in CSS:
@import '~sanitize.css';
@import '~sanitize.css/forms.css';
@import '~sanitize.css/typography.css';
Alternatively, import sanitize.css in JS:
import 'sanitize.css';
import 'sanitize.css/forms.css';
import 'sanitize.css/typography.css';
In webpack.config.js
, be sure to use the appropriate loaders:
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: [ 'style-loader', 'css-loader' ]
}
]
}
}
Download
See https://csstools.github.io/sanitize.css/latest/sanitize.css
What does it do?
- Normalizes styles for a wide range of elements.
- Corrects bugs and common browser inconsistencies.
- Provides common, useful defaults.
- Explains what code does using detailed comments.
Browser support
- Chrome (last 3)
- Edge (last 3)
- Firefox (last 3)
- Firefox ESR
- Opera (last 3)
- Safari (last 3)
- iOS Safari (last 2)
- Internet Explorer 9+
Differences
normalize.css and sanitize.css correct browser bugs while carefully testing
and documenting changes. normalize.css styles adhere to css specifications.
sanitize.css styles adhere to common developer expectations and preferences.
reset.css unstyles all elements. Both sanitize.css and normalize.css are
maintained in sync.
Features
Box sizing defaults to border-box
*, ::before, ::after {
box-sizing: border-box;
}
Backgrounds do not repeat by default
*, ::before, ::after {
background-repeat: no-repeat;
}
Pseudo-elements inherit text decoration and vertical alignment
::before,
::after {
text-decoration: inherit;
vertical-align: inherit;
}
Cursors only change to hint non-obvious interfaces
html {
cursor: default;
}
Text has a comfortable line height in all browsers
html {
line-height: 1.5;
}
Tabs appear the same on the web as in a typical editor
html {
tab-size: 4;
}
Words break to prevent overflow
html {
word-break: break-all;
}
Documents do not use a margin for outer padding
body {
margin: 0;
}
Navigation lists do not include a marker style
nav ol, nav ul {
list-style: none;
padding: 0;
}
Media elements align to the text center of other content
audio, canvas, iframe, img, svg, video {
vertical-align: middle;
}
SVGs fallback to the current text color
svg:not([fill]) {
fill: currentColor;
}
Tables do not include additional border spacing
table {
border-collapse: collapse;
}
Textareas only resize vertically by default
textarea {
resize: vertical;
}
Single taps are dispatched immediately on clickable elements
a, area, button, input, label, select, summary, textarea, [tabindex] {
-ms-touch-action: manipulation;
touch-action: manipulation;
}
ARIA roles include visual cursor hints
[aria-busy="true"] {
cursor: progress;
}
[aria-controls] {
cursor: pointer;
}
[aria-disabled="true"], [disabled] {
cursor: default;
}
Visually hidden content remains accessible
[aria-hidden="false"][hidden] {
display: initial;
}
[aria-hidden="false"][hidden]:not(:focus) {
clip: rect(0, 0, 0, 0);
position: absolute;
}
Forms
sanitize.css includes a separate stylesheet for normalizing forms using
minimal, standards-like styling.
<link href="https://unpkg.com/sanitize.css" rel="stylesheet" />
<link href="https://unpkg.com/sanitize.css/forms.css" rel="stylesheet" />
Forms Features
Form controls appear visually consistent and restyle consistently
button, input, select, textarea {
background-color: transparent;
border: 1px solid WindowFrame;
color: inherit;
font: inherit;
letter-spacing: inherit;
padding: 0.25em 0.375em;
}
[type="color"],
[type="range"] {
border-width: 0;
padding: 0;
}
Expandable select controls appear visually consistent
select {
-moz-appearance: none;
-webkit-appearance: none;
background: no-repeat right center / 1em;
border-radius: 0;
padding-right: 1em;
}
select:not([multiple]):not([size]) {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='4'%3E%3Cpath d='M4 0h6L7 4'/%3E%3C/svg%3E");
}
::-ms-expand {
display: none;
}
Placeholders appear visually consistent in Internet Explorer
:-ms-input-placeholder {
color: rgba(0, 0, 0, 0.54);
}
Assets
sanitize.css includes a separate stylesheet for normalizing restricting the
size of assets in all browsers.
<link href="https://unpkg.com/sanitize.css" rel="stylesheet" />
<link href="https://unpkg.com/sanitize.css/assets.css" rel="stylesheet" />
Assets Features
Assets use a comfortable measure in all browsers
iframe,
img,
input,
select,
textarea {
height: auto;
max-width: 100%;
}
Typography
sanitize.css includes a separate stylesheet for normalizing typography using
system interface fonts.
<link href="https://unpkg.com/sanitize.css" rel="stylesheet" />
<link href="https://unpkg.com/sanitize.css/typography.css" rel="stylesheet" />
Typography Features
Typography uses the default system font
html {
font-family:
system-ui,
-apple-system,
Segoe UI,
Roboto,
Ubuntu,
Cantarell,
Noto Sans,
sans-serif,
"Apple Color Emoji",
"Segoe UI Emoji",
"Segoe UI Symbol",
"Noto Color Emoji";
}
Pre-formatted and code-formatted text uses the monospace system font
code, kbd, pre, samp {
font-family:
Menlo,
Consolas,
Roboto Mono,
Ubuntu Monospace,
Noto Mono,
Oxygen Mono,
Liberation Mono,
monospace;
}
Reduce Motion
sanitize.css includes a separate stylesheet for restricting motion when the
user has requested this at a system level.
<link href="https://unpkg.com/sanitize.css" rel="stylesheet" />
<link href="https://unpkg.com/sanitize.css/reduce-motion.css" rel="stylesheet" />
Reduce Motion Features
Animations, scrolling effects, and transitions are reduced in all browsers
@media (prefers-reduced-motion: reduce) {
*,
::before,
::after {
animation-delay: -1ms !important;
animation-duration: 1ms !important;
animation-iteration-count: 1 !important;
background-attachment: initial !important;
scroll-behavior: auto !important;
transition-delay: 0s !important;
transition-duration: 0s !important;
}
}
Contributing
Please read the contribution guidelines in order to make the
contribution process easy and effective for everyone involved.
Acknowledgements
sanitize.css is a project by Jonathan Neal,
built upon normalize.css, a project by
Jonathan Neal,
co-created with Nicolas Gallagher.