Skip to the content.

The New CSS Reset

This new CSS reset is using the new CSS features:

What the-new-css-reset is resetting?

This CSS reset is built from the understanding we don’t want to use the default style we are getting from the browsers, except the ‘display’ property.

This CSS reset removes all the default styles which we are getting on specific HTML elements except the ‘display’ property, as I already mention, and except special HTML elements like iframe, canvas, img, svg, video.

In case you want the default style of the browser of a specific HTML element back, you can revert back to the default styles of the browser. For example:

input[type="radio"] {
    all: revert;

or all input elements:

 select {
    all: revert;

Start use the-new-css-reset

How it Looks and Works

@charset "utf-8";
    The new CSS reset - version 1.8.5 (last updated 14.6.2023)
    GitHub page:

    Remove all the styles of the "User-Agent-Stylesheet", except for the 'display' property
    - The "symbol *" part is to solve Firefox SVG sprite bug
    - The "html" attribute is exclud, because otherwise a bug in Chrome breaks the CSS hyphens property (
*:where(:not(html, iframe, canvas, img, svg, video, audio):not(svg *, symbol *)) {
    all: unset;
    display: revert;

/* Preferred box-sizing value */
*::after {
    box-sizing: border-box;

/* Reapply the pointer cursor for anchor tags */
a, button {
    cursor: revert;

/* Remove list styles (bullets/numbers) */
ol, ul, menu {
    list-style: none;

/* For images to not be able to exceed their container */
img {
    max-inline-size: 100%;
    max-block-size: 100%;

/* removes spacing between cells in tables */
table {
    border-collapse: collapse;

/* Safari - solving issue when using user-select:none on the <body> text input doesn't working */
input, textarea {
    -webkit-user-select: auto;

/* revert the 'white-space' property for textarea elements on Safari */
textarea {
    white-space: revert;

/* minimum style to allow to style meter element */
meter {
    -webkit-appearance: revert;
    appearance: revert;

/* preformatted text - use only for this feature */
:where(pre) {
    all: revert;

/* reset default text opacity of input placeholder */
::placeholder {
    color: unset;

/* remove default dot (•) sign */
::marker {
    content: initial;

/* fix the feature of 'hidden' attribute.
   display:revert; revert to element instead of attribute */
:where([hidden]) {
    display: none;

/* revert for bug in Chromium browsers
   - fix for the content editable attribute will work properly.
   - webkit-user-select: auto; added for Safari in case of using user-select:none on wrapper element */
:where([contenteditable]:not([contenteditable="false"])) {
    -moz-user-modify: read-write;
    -webkit-user-modify: read-write;
    overflow-wrap: break-word;
    -webkit-line-break: after-white-space;
    -webkit-user-select: auto;

/* apply back the draggable feature - exist only in Chromium and Safari */
:where([draggable="true"]) {
    -webkit-user-drag: element;

/* Revert Modal native behavior */
:where(dialog:modal) {
    all: revert;

Browser Support

All evergreen browsers

Chrome Edge Firefox Safari Opera Samsung Internet
88+ ✔ 88+ ✔ 84+ ✔ 14+ ✔ 75+ ✔ 15+ ✔

Extensive Reading and Watching

Made by Elad Shechter (twitter)