设计配色 · 排版打印

CSS Reset/Normalize

主流 reset 库对比/一键引用

✓本地处理 · 不上传 ✓免费 · 无需登录 ✓无次数限制 累计 121 次使用
CSS Reset / Normalize 7 套主流方案 · 全程本地

—

就绪 · 选方案查看代码与设计哲学,可对比 2 套差异,或自定义构建专属 reset · 全程浏览器本地
第一节

关于本工具

About

手写 CSS Reset 时,最怕的不是代码多,是不同浏览器对 `html`、`body` 默认内外边距的解读不一致,导致页面在 Chrome 和 Safari 上直接错位。这个页面把 Eric Meyer、Normalize.css、Sanitize.css 等主流方案的源码和覆盖率差异列在一起,点一下就能复制整段代码。所有内容静态输出,不请求任何后端,复制即用。

使用场景

壹

接手遗留项目

程序员接手一个三年前的老项目,打开页面发现按钮和输入框在不同浏览器里歪七扭八。原团队用的是古老 reset 方案,把 h1 到 h6 的字体大小全抹平了。在工具里对比 Normalize.css 和 Sanitize.css 的差异,发现 Normalize 保留了合理的标题层级,而 Sanitize 额外修正了表单元素的 bug。最终选择 Sanitize.css 直接引用,省去逐行排查旧 reset 文件的四小时。

贰

移动端H5适配

前端在写一个微信内的 H5 活动页,发现 iOS 和 Android 上 button 的默认内边距差了 6px。翻出工具里的 Meyer Reset 和 Normalize 对比:前者把所有内边距归零,后者保留了合理的默认值。考虑到活动页有大量点击按钮,选择 Normalize 并额外用一行 `button { padding: 0 }` 覆盖,iOS 和 Android 的按钮视觉终于对齐,测试时没再被 QA 退回。

叁

团队统一规范

团队五人各自写页面,有人用 * { margin: 0 } 暴力清除,有人用 Normalize.css v8,导致不同模块的列表缩进和表单字号不一致。在工具里把四种主流 reset 方案的关键差异列成表格:Meyer Reset 清空所有列表样式,Normalize 保留有序列表编号但去掉无序列表圆点,Sanitize 额外处理了 `details` 和 `summary` 的显示。打印出对比表贴在工位旁,新人入职直接按规范引用,不再出现因 reset 不一致导致的样式冲突。

肆

旧版浏览器兼容

产品要求兼容到 IE11 和 UC 浏览器,但 Normalize.css 的最新版已放弃对 IE 的支持。在工具里筛选出支持旧浏览器的方案:发现 Reboot(Bootstrap 的 reset)在 IE11 上表现稳定,而 sanitize.css 的旧版 v11 仍保留 IE 兼容分支。最终选择 sanitize.css v11,并复制工具提供的 CDN 链接直接引入,避免了手动翻 GitHub release 找旧版本的半小时。

伍

组件库样式隔离

在做一个 Vue 组件库,组件内部的样式需要不受宿主页面 reset 影响。用工具对比发现:Normalize.css 会修改 `html` 和 `body` 的字体大小,而 CSS Remedy(Reboot 的轻量版)只调整了 `box-sizing` 和边距,不碰字体继承。组件库选择 CSS Remedy 作为基础,再通过 scoped 样式覆盖,组件在任意宿主页面下都能保持统一间距和盒模型,不再因外部 reset 导致布局错乱。

第二节

使用指南

Getting Started

使用步骤

  1. 1在「选择 Reset 库」下拉栏点选 Normalize.css、Sanitize.css 或自定义组合,预览区同步显示对应 CSS 源码
  2. 2勾选「移除列表样式」「盒模型修正」等附加规则,右侧代码块实时高亮新增或删除的行
  3. 3点代码块右上角「复制」图标,剪贴板写入当前选中的 Reset 代码,底部弹出「已复制」提示条
  4. 4切换「压缩」开关,代码块自动在格式化与单行 minified 版本间切换,字符计数同步更新

输入输出示例

输入输出说明
选择「Normalize.css」并点击「复制代码」/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ html { line-height: 1.15; -webkit-text-size-adjust: 100%; } body { margin: 0; } main { display: block; } h1 { font-size: 2em; margin: 0.67em 0; } /* ...(完整代码约 400 行)*/常规:Normalize.css 是最主流的选择,输出为完整 CSS 文件,用户可直接粘贴到项目入口。
选择「CSS Reset(Eric Meyer)」并点击「复制代码」/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain) */ 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, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* ...(完整代码约 30 行)*/常规:Eric Meyer 的 Reset 是经典方案,输出较短但会清除所有默认样式,适合需要完全从头构建样式的项目。
选择「Sanitize.css」并点击「复制代码」/*! sanitize.css v13.0.0 | CC0-1.0 License | github.com/csstools/sanitize.css */ *, *::before, *::after { box-sizing: border-box; } html { -webkit-text-size-adjust: 100%; -moz-text-size-adjust: 100%; text-size-adjust: 100%; } body { margin: 0; } /* ...(完整代码约 200 行)*/常规:Sanitize.css 是较新的选择,保留有用默认值(如 h1 字号)同时修复浏览器不一致,输出包含 box-sizing 设置。
选择「Normalize.css」并点击「复制 CDN 链接」<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/normalize.css@8.0.1/normalize.css">边界:工具提供 CDN 引用方式,输出为 HTML link 标签,适合快速引入到页面 head 中。
选择「CSS Reset(Eric Meyer)」并点击「复制 CDN 链接」<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/meyerweb/reset.css@2.0/reset.css">边界:Eric Meyer Reset 的 CDN 链接使用 GitHub raw 路径,需注意某些 CDN 可能不稳定。
选择「Reboot(Bootstrap)」并点击「复制代码」// Reboot v5.3.0 | MIT License | github.com/twbs/bootstrap/blob/main/scss/_reboot.scss *, *::before, *::after { box-sizing: border-box; } @media (prefers-reduced-motion: no-preference) { :root { scroll-behavior: smooth; } } body { margin: 0; font-family: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', 'Liberation Sans', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #212529; background-color: #fff; -webkit-text-size-adjust: 100%; -webkit-tap-highlight-color: transparent; } /* ...(完整代码约 100 行)*/易错:Reboot 是 Bootstrap 的 reset 方案,输出包含字体栈和颜色变量,用户如果只想要纯 reset 可能会误选此库。
选择「Normalize.css」并点击「复制代码」(但浏览器网络离线)(工具页面提示:无法获取代码,请检查网络连接后重试)易错:工具依赖 CDN 获取代码,离线时无法输出内容,页面会给出错误提示而非空白。

常见错误对照

1.把 Normalize 当 Reset 用,以为会清空所有默认样式

✗ 错误引入 Normalize.css 后,发现 h1 还有 margin,以为没生效
✓ 修复Normalize.css 保留有用的默认样式(如 h1 的 margin),只修复跨浏览器不一致;如果需彻底清空,应选 Reset CSS 或两者结合

Normalize 的设计哲学是「保留有用默认值,统一差异」,不是「清零」。Reset 则暴力移除所有默认样式。选错会导致预期偏差。

2.多个 Reset 库同时引入,样式互相覆盖

✗ 错误<link rel="stylesheet" href="reset.css"><link rel="stylesheet" href="normalize.css">
✓ 修复只引入一个库,或明确指定加载顺序并理解覆盖结果

Reset 和 Normalize 都会重置/统一基础样式,同时引入会导致后加载的覆盖前一个,产生不可预测的样式冲突,且增加无意义 HTTP 请求。

3.直接复制 CDN 链接但未检查协议,导致 HTTPS 页面加载 HTTP 资源被浏览器拦截

✗ 错误<link rel="stylesheet" href="http://cdn.jsdelivr.net/npm/reset-css@5.0.2/reset.min.css">
✓ 修复<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reset-css@5.0.2/reset.min.css">

现代浏览器在 HTTPS 页面中会阻止加载 HTTP 资源(混合内容),导致 CSS 不生效。始终使用 HTTPS 或协议相对链接(//cdn...)。

4.忘记把 Reset 放在自定义样式之前

✗ 错误<link rel="stylesheet" href="custom.css"><link rel="stylesheet" href="reset.css">
✓ 修复<link rel="stylesheet" href="reset.css"><link rel="stylesheet" href="custom.css">

CSS 层叠规则:后加载的样式优先级更高。若 Reset 在自定义样式之后,会覆盖已写好的样式,导致布局崩坏。

5.以为 Reset 能解决所有浏览器兼容问题,不再做任何测试

✗ 错误引入 Reset 后,在 IE11 和 Chrome 中看到按钮样式不同,认为是 Reset 的 bug
✓ 修复Reset 只处理元素默认样式差异,不处理布局、字体渲染、CSS 特性支持等差异;仍需在目标浏览器中测试

Reset 覆盖的是浏览器内置 user-agent stylesheet 的差异,但不同浏览器对 CSS 属性(如 flex、grid)的支持程度不同,Reset 无法修复这些。

6.使用过时的 Reset 库,未适配现代 HTML5 元素

✗ 错误使用 2010 年的 Eric Meyer Reset,未包含 <section> <article> <nav> 等元素
✓ 修复使用最新版 Reset CSS(如 2.0)或 Normalize.css(v8+),它们已覆盖 HTML5 语义元素

旧版 Reset 未针对 HTML5 新增元素设置 display: block 等基础样式,导致这些元素在旧浏览器中显示为内联,布局异常。

7.在 Reset 中误用 !important,导致后续样式难以覆盖

✗ 错误reset.css 里写 * { margin: 0 !important; padding: 0 !important; }
✓ 修复使用普通选择器(如 body, h1, p { margin: 0; padding: 0; }),避免 !important

!important 会破坏 CSS 层叠规则,后续任何样式(包括内联样式)都无法覆盖,除非也加 !important,导致维护噩梦。

第三节

工作原理

How It Works

核心公式

reset = normalize + (opinionated - normalize) × weight

变量说明

  • reset最终生成的 CSS 重置代码
  • normalizeNormalize.css 的基线样式
  • opinionated选定的个性化 reset 库(如 Eric Meyer)
  • weight用户选择的个性化程度(0~1)

示例

用户选择 Eric Meyer 作为 opinionated 库,weight 设为 0.6。normalize 基线为 100 行 CSS,Eric Meyer 为 80 行。最终 reset = 100 + (80 - 100) × 0.6 = 100 - 12 = 88 行 CSS 代码,混合了 Normalize 的兼容性与 Eric Meyer 的激进重置。

选择重置方案Normalize / Reset / 混合解析差异规则浏览器默认样式对照表生成 CSS 代码按需拼接 / 压缩一键复制引用CDN / 本地代码选择输出格式压缩 / 注释 / 独立本地浏览器渲染无服务器请求预览效果实时对比差异
用户选择 本地处理 输出结果
第五节

常见问题

Q & A
问这个工具和直接写 `* { margin: 0; padding: 0; }` 有啥区别?+
答

粗暴的全局重置会干掉所有元素的默认边距,但也会移除 `<ul>` 的项目符号、`<h1>` 的加粗字号等浏览器自带的合理样式。本页对比的 reset 库(如 Normalize.css)会保留这些有用的默认样式,只修复跨浏览器不一致的地方。如果你只是做个简单落地页,`* { margin:0; padding:0 }` 够用;但做多页面产品或需要保留语义样式的项目,用 Normalize.css 能少写很多后补样式。

问我复制出来的代码为什么在手机上样式还是乱?+
答

大概率是缺失 viewport meta 标签。reset 库只处理元素默认样式差异,不控制移动端视口缩放。在 `<head>` 里加上 `<meta name="viewport" content="width=device-width, initial-scale=1.0">` 后再引入 reset 代码,移动端的盒模型和字号才能按预期渲染。本工具生成的代码片段不含该 meta,需手动补上。

问Normalize.css 和 Reset.css 到底该选哪个?+
答

关键看项目类型。Normalize.css 保留浏览器默认语义样式(如 `h1` 字号、`strong` 加粗),只修复跨浏览器差异,适合从零搭建的 UI 组件库或需要保留 HTML 语义的项目。Reset.css 会清除所有浏览器默认样式,让你从完全空白的状态重写,适合设计稿极精细或需要完全自定义视觉的页面。本工具对比表里列出了两者对 `ol`、`table`、`button` 等 8 个常见元素的具体处理差异,可对照选。

问为什么我引用了 reset 后,按钮的边框反而变丑了?+
答

部分 reset 库(如 Eric Meyer's Reset)会移除按钮的默认边框和背景渐变,让按钮变成纯色块,看起来像过时的设计。这其实是重置的预期行为——它把按钮降级为无样式的 `input`,方便你从头写统一的按钮样式。如果不希望按钮被重置,可以在引入 reset 后单独给 `button` 写 `border: inherit; background: ButtonFace;` 恢复系统默认外观。

问这个工具生成的代码可以直接放到生产环境吗?+
答

可以,但建议做两步验证。一是确认你选的库版本(本工具默认使用各库最新的稳定版,页面顶部标注了版本号)。二是检查是否与你项目中已有的第三方 UI 框架(如 Bootstrap、Tailwind)冲突——这些框架自带 normalize,重复引入可能导致覆盖顺序混乱。稳妥做法:只保留一个 reset/normalize 来源,用本工具生成代码后,在浏览器开发者工具里检查 `body` 的 `line-height` 是否为预期值。

问为什么有些 reset 库会把 `img` 的 `display` 改成 `block`?+
答

这是为了解决图片底部 3-5px 的空白间隙问题。默认 `img` 是 `inline` 元素,会受 `line-height` 影响产生额外空隙,改成 `block` 后间隙消失。但不是所有 reset 库都这么做——Normalize.css 保持 `inline`,而部分现代 reset(如 sanitize.css)会改成 `block`。本工具在对比表里标注了每个库对 `img` 的处理方式,如果布局里图片需要并排显示,选保持 `inline` 的库更方便。

问我引用了 reset 但 Chrome 和 Safari 的滚动条粗细不一样,怎么办?+
答

reset 库不处理滚动条样式,这是浏览器自身的渲染差异。Chrome 默认用系统滚动条(较细),Safari 在 iOS 上隐藏滚动条、macOS 上显示较宽。如果想统一,需要额外写 CSS 自定义滚动条:`::-webkit-scrollbar { width: 8px; }`(仅 WebKit 内核支持)。本工具不生成滚动条样式代码,但可以在工具页面的「高级设置」区域手动粘贴这段 CSS。

问这个工具支持自定义选择要保留的 reset 规则吗?+
答

本工具目前提供的是完整库的对比和一键复制,不支持逐条勾选规则。如果你只需要部分重置(比如只清除 `margin` 但保留 `list-style`),建议复制完整代码后手动删除不需要的规则。或者使用 PostCSS 插件(如 postcss-normalize)配合项目构建工具,它允许通过 `@import-normalize` 按需引入 Normalize.css 的特定模块。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

↑↓选择 ↵打开 ⌘+↵新窗口 esc关闭