样式初始化(CSS Reset)

学习

样式初始化(CSS Reset)

2026-02-23/0/ 编辑


样式初始化(CSS Reset)

概述

样式初始化(也称为 CSS Reset)是在网页开发开始时,重置浏览器默认样式的技术。不同浏览器对 HTML 元素的默认样式有所不同,通过样式初始化可以确保在所有浏览器中获得一致的显示效果。

为什么需要样式初始化

1. 浏览器默认样式不一致

不同浏览器对相同元素有不同的默认样式:

  • marginpadding 大小不同
  • 字体大小和行高不同
  • 列表标记样式不同
  • 表格边框样式不同

2. 默认样式干扰设计

  • body 有默认的 margin: 8px
  • ulol 有默认的 padding-left: 40px
  • a 标签有下划线和蓝色
  • h1-h6 有默认的外边距和字体大小

常见的初始化方法

1. 通配符选择器(最简单)

/* 使用通配符选择器重置所有元素 */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

优点: 简单直接,一行代码搞定

缺点:

  • 性能较差(选择所有元素)
  • 可能影响伪元素(::before, ::after)
/* 改进版本: 使用通配符 + 伪元素 */
*,
*::before,
*::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

2. 基础元素重置(推荐)

/* 重置常用元素的默认样式 */
* {
  margin: 0;
  padding: 0;
}

body,
h1, h2, h3, h4, h5, h6,
p, ul, ol, li,
dl, dt, dd,
figure, figcaption,
blockquote, pre,
code, kbd, samp {
  margin: 0;
  padding: 0;
}

/* 重置列表样式 */
ul, ol {
  list-style: none;
}

/* 重置链接样式 */
a {
  text-decoration: none;
  color: inherit;
}

/* 重置图片 */
img {
  border: none;
  vertical-align: middle;
}

/* 重置表格 */
table {
  border-collapse: collapse;
  border-spacing: 0;
}

/* 重置表单元素 */
input, textarea, select, button {
  font: inherit;
  color: inherit;
}

3. 完整的 CSS Reset

/* ===================================
   CSS Reset 完整版本
   =================================== */

/* 1. 设置 box-sizing */
*,
*::before,
*::after {
  box-sizing: border-box;
}

/* 2. 重置基础样式 */
html,
body {
  margin: 0;
  padding: 0;
  width: 100%;
  height: 100%;
}

body {
  font-size: 14px;
  line-height: 1.6;
  color: #333;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* 3. 重置标题 */
h1, h2, h3, h4, h5, h6 {
  font-weight: 600;
  line-height: 1.4;
  color: #2c3e50;
}

h1 { font-size: 36px; }
h2 { font-size: 30px; }
h3 { font-size: 24px; }
h4 { font-size: 20px; }
h5 { font-size: 18px; }
h6 { font-size: 16px; }

/* 4. 重置段落和文本 */
p {
  margin-bottom: 1em;
}

/* 5. 重置链接 */
a {
  text-decoration: none;
  color: inherit;
  transition: color 0.3s ease;
}

a:hover {
  color: #3498db;
}

/* 6. 重置列表 */
ul, ol {
  list-style: none;
  margin: 0;
  padding: 0;
}

/* 7. 重置表格 */
table {
  width: 100%;
  border-collapse: collapse;
  border-spacing: 0;
  margin-bottom: 20px;
}

th, td {
  padding: 12px;
  text-align: left;
  border: 1px solid #ddd;
}

th {
  background-color: #f5f5f5;
  font-weight: 600;
}

/* 8. 重置图片 */
img {
  max-width: 100%;
  height: auto;
  display: block;
  border: none;
}

/* 9. 重置表单元素 */
input, textarea, select, button {
  font: inherit;
  color: inherit;
  outline: none;
}

input, textarea, select {
  width: 100%;
  padding: 10px;
  border: 1px solid #ddd;
  border-radius: 4px;
  transition: border-color 0.3s ease;
}

input:focus, textarea:focus, select:focus {
  border-color: #3498db;
}

/* 10. 重置按钮 */
button {
  cursor: pointer;
  background: none;
  border: none;
  padding: 0;
}

/* 11. 清除浮动 */
.clearfix::after {
  content: "";
  display: block;
  clear: both;
}

/* 12. 隐藏元素 */
[hidden] {
  display: none !important;
}

/* 13. 响应式图片 */
img, video, canvas {
  max-width: 100%;
}

现代化 Reset (Normalize.css)

相比传统的 CSS Reset,Normalize.css 采用更温和的方式:

/* Normalize.css 风格 - 保留有用的默认样式 */

/* 设置 box-sizing */
*,
*::before,
*::after {
  box-sizing: border-box;
}

/* HTML5 display 重置 */
article, aside, details, figcaption, figure,
footer, header, hgroup, main, menu, nav, section {
  display: block;
}

/* 移除默认的 margin */
body, h1, h2, h3, h4, h5, h6,
p, blockquote, pre,
dl, dd, figure, figcaption {
  margin: 0;
}

/* 链接 */
a {
  background-color: transparent;
  text-decoration: none;
}

/* 表单元素 */
input, button, select, textarea {
  font-family: inherit;
  font-size: 100%;
  line-height: 1.15;
  margin: 0;
}

button {
  overflow: visible;
}

button, select {
  text-transform: none;
}

/* 图片 */
img {
  max-width: 100%;
  height: auto;
  display: block;
  border: 0;
}

/* 表格 */
table {
  border-collapse: collapse;
  border-spacing: 0;
}

移动端专用 Reset

/* 移动端优化 */
html {
  -webkit-text-size-adjust: 100%;
  -webkit-tap-highlight-color: transparent;
}

body {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* 移除移动端点击高亮 */
* {
  -webkit-tap-highlight-color: transparent;
}

/* 移除移动端输入框的默认样式 */
input, textarea, button {
  -webkit-appearance: none;
  appearance: none;
  border-radius: 0;
}

实战应用

项目基础 Reset

/* ===================================
   项目基础样式重置
   =================================== */

/* 1. 基础设置 */
*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  font-size: 16px;
  scroll-behavior: smooth;
}

body {
  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
  line-height: 1.6;
  color: #333;
  background-color: #f8f8f8;
}

/* 2. 常用元素重置 */
a {
  color: inherit;
  text-decoration: none;
}

ul, ol {
  list-style: none;
}

img {
  max-width: 100%;
  height: auto;
}

table {
  border-collapse: collapse;
}

/* 3. 工具类 */
.clearfix::after {
  content: "";
  display: block;
  clear: both;
}

.text-center { text-align: center; }
.text-left { text-align: left; }
.text-right { text-align: right; }

.pull-left { float: left; }
.pull-right { float: right; }

/* 4. 布局工具 */
.container {
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 15px;
}

.row {
  display: flex;
  flex-wrap: wrap;
  margin: 0 -15px;
}

.col {
  flex: 1;
  padding: 0 15px;
}

最佳实践

1. 按需选择

/* ✅ 推荐: 只重置需要的内容 */
* {
  box-sizing: border-box;
}

body, h1, h2, h3, h4, h5, h6, p, ul, ol, li {
  margin: 0;
  padding: 0;
}

ul, ol {
  list-style: none;
}

a {
  text-decoration: none;
}

2. 保持有用样式

/* ❌ 不推荐: 过度重置 */
h1, h2, h3, h4, h5, h6 {
  font-size: 16px; /* 标题失去层次 */
  font-weight: normal; /* 失去强调 */
}

/* ✅ 推荐: 保留有意义的默认样式 */
h1, h2, h3, h4, h5, h6 {
  margin: 0; /* 只重置 margin */
}
/* 单独设置字体大小和粗细 */

3. 使用 CSS 变量

:root {
  --font-size-base: 16px;
  --line-height-base: 1.6;
  --color-text: #333;
  --color-primary: #3498db;
  --spacing-unit: 8px;
}

body {
  font-size: var(--font-size-base);
  line-height: var(--line-height-base);
  color: var(--color-text);
}

4. 分模块组织

/* ===================================
   0. CSS Reset
   =================================== */

/* 基础重置 */
* { box-sizing: border-box; }
body, h1, h2, h3, h4, h5, h6, p, ul, ol, li { margin: 0; padding: 0; }
ul, ol { list-style: none; }
a { text-decoration: none; }

/* 工具类 */
.clearfix::after { content: ""; display: block; clear: both; }

/* ===================================
   1. 基础样式
   =================================== */

/* ... */

/* ===================================
   2. 组件样式
   =================================== */

/* ... */

注意事项

  1. 不要过度重置: 保留有用的默认样式
  2. 考虑性能: 避免使用过于复杂的全局选择器
  3. 项目需求: 根据项目实际情况调整
  4. 团队协作: 确保团队成员了解 Reset 规则
  5. 响应式: 考虑不同设备的显示需求

总结

样式初始化是 Web 开发的重要环节,能够确保页面在不同浏览器中显示一致。选择合适的 Reset 方法(通配符、基础元素重置或 Normalize.css),根据项目需求进行调整,能够提高开发效率和代码质量。

推荐实践:

  • 小型项目: 使用简单的通配符 + 常用元素重置
  • 中型项目: 使用完整的 CSS Reset
  • 大型项目: 使用 Normalize.css + 项目定制