什么是 global.css

global.css(或 reset.css, base.css, normalize.css)是 Web 项目中的全局样式表,它的核心作用是为整个网站或应用提供一个统一、可预测的基础样式层,它不包含特定于某个页面的样式,而是定义了所有 HTML 元素在所有浏览器中的默认表现。

global.css公共样式模板与介绍
(图片来源网络,侵删)

global.css 的目标是:

  1. 重置默认样式:消除不同浏览器(如 Chrome, Firefox, Safari, Edge)对 HTML 元素(如 <h1>, <p>, <ul>, <a> 等)的默认渲染差异,实现跨浏览器的一致性。
  2. 定义基础变量:设置网站的全局设计系统,如颜色、字体、间距等,方便在整个项目中复用。
  3. 设置通用布局规则:定义盒模型、滚动行为等全局性布局规则。
  4. 提升可维护性:将通用样式集中管理,避免在各个组件中重复编写相同的代码。

global.css 最佳实践

在编写 global.css 之前,了解一些最佳实践至关重要:

  1. 使用 CSS 预处理器:强烈推荐使用 Sass/Less 等预处理器,它们提供了变量、嵌套、混合(Mixins)等功能,能极大地提升样式表的组织性和可维护性,本模板将以 Sass (SCSS) 语法为例。
  2. 采用 BEM 命名规范:虽然 global.css 本身不包含复杂组件,但它定义的类名可能会被组件继承,使用 BEM(Block, Element, Modifier)等命名约定可以避免样式冲突,使 CSS 结构更清晰。
  3. 模块化思维:即使是全局样式,也可以尝试模块化组织,将颜色、字体、布局等分别放在不同的文件中,最后通过 @import 合并到一个 global.css 文件中。
  4. 避免过度重置:不要把所有元素的 marginpadding 都设为 0,使用像 normalize.css 这样的现代重置方案,它在移除默认样式的同事,会保留有用的默认值(如 <input><button> 的基本样式)。
  5. 使用 CSS 自定义属性:CSS 变量是实现设计系统现代化的最佳方式,它们允许你定义一次值,然后在任何地方引用,并且可以在 JavaScript 中动态修改。

global.css 公共样式模板 (SCSS 版本)

这是一个功能全面、注释清晰的 global.scss 模板,你可以根据自己项目的需求进行修改和删减。

// ==========================================================================
// 1. 全局变量与配置
// ==========================================================================
// 在这里定义整个项目的设计系统变量,方便全局统一管理和修改。
// 颜色系统
:root {
  // 主色调
  --color-primary: #007bff;
  --color-primary-light: #5a9fd4;
  --color-primary-dark: #0056b3;
  // 中性色
  --color-text-primary: #333;
  --color-text-secondary: #666;
  --color-text-light: #999;
  --color-bg-primary: #ffffff;
  --color-bg-secondary: #f8f9fa;
  --color-bg-tertiary: #e9ecef;
  --color-border: #dee2e6;
  // 状态色
  --color-success: #28a745;
  --color-warning: #ffc107;
  --color-danger: #dc3545;
  --color-info: #17a2b8;
}
// 字体系统
:root {
  --font-family-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --font-family-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
  --font-size-base: 16px; // 基准字号
  --line-height-base: 1.5;
}
// 间距系统
:root {
  --spacing-xs: 0.25rem;  // 4px
  --spacing-sm: 0.5rem;   // 8px
  --spacing-md: 1rem;     // 16px
  --spacing-lg: 1.5rem;   // 24px
  --spacing-xl: 2rem;     // 32px
  --spacing-xxl: 3rem;    // 48px
}
// 布局与断点
:root {
  --container-max-width: 1200px;
  --border-radius: 0.375rem; // 6px
  --box-shadow-sm: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
  --box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23);
  --transition-base: all 0.3s ease-in-out;
}
// ==========================================================================
// 2. 基础重置与标准化
// ==========================================================================
// 基于 Eric Meyer's Reset 和 Normalize.css 的思想,提供一个干净、一致的起点。
// 移除所有元素的内外边距
*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}
// 设置 HTML 和 Body 的基础样式
html {
  // 禁用 iOS 上的文本大小调整,确保 1rem = 16px
  -webkit-text-size-adjust: 100%;
  // 确保页面始终从顶部开始渲染
  scroll-behavior: smooth;
}
body {
  font-family: var(--font-family-sans);
  font-size: var(--font-size-base);
  line-height: var(--line-height-base);
  color: var(--color-text-primary);
  background-color: var(--color-bg-primary);
  -webkit-font-smoothing: antialiased; // Mac OS 字体平滑
  -moz-osx-font-smoothing: grayscale; // Linux 字体平滑
}
// ==========================================================================
// 3. 链接样式
// ==========================================================================
a {
  color: var(--color-primary);
  text-decoration: none;
  transition: var(--transition-base);
  &:hover,
  &:focus {
    color: var(--color-primary-dark);
    text-decoration: underline;
    outline: 2px solid var(--color-primary);
    outline-offset: 2px;
  }
  &:focus-visible {
    // 使用 :focus-visible 替代 :focus,避免鼠标点击时出现轮廓
    outline: 2px solid var(--color-primary);
    outline-offset: 2px;
  }
}
// ==========================================================================
// 4. 标题与文本格式
// ==========================================================================和段落的样式,移除浏览器默认样式。
h1, h2, h3, h4, h5, h6 {
  font-weight: 600;
  line-height: 1.2;
  margin-bottom: var(--spacing-md);
  color: var(--color-text-primary);
}
h1 { font-size: 2.5rem; } /* 40px */
h2 { font-size: 2rem; }   /* 32px */
h3 { font-size: 1.75rem; } /* 28px */
h4 { font-size: 1.5rem; }  /* 24px */
h5 { font-size: 1.25rem; } /* 20px */
h6 { font-size: 1rem; }   /* 16px */
p {
  margin-bottom: var(--spacing-md);
}
// 强调文本
strong, b {
  font-weight: 600;
}
em, i {
  font-style: italic;
}
// ==========================================================================
// 5. 列表样式
// ==========================================================================
ul, ol {
  margin-bottom: var(--spacing-md);
  padding-left: var(--spacing-lg); // 为列表项提供缩进
}
li {
  margin-bottom: var(--spacing-xs);
}
// ==========================================================================
// 6. 表单元素
// ==========================================================================
// 统一表单元素的视觉表现。
input,
textarea,
select {
  width: 100%;
  padding: var(--spacing-sm) var(--spacing-md);
  font-family: inherit;
  font-size: 1rem;
  line-height: inherit;
  color: inherit;
  background-color: var(--color-bg-secondary);
  border: 1px solid var(--color-border);
  border-radius: var(--border-radius);
  transition: var(--transition-base);
  &:focus {
    border-color: var(--color-primary);
    outline: none;
    box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);
  }
  &:disabled {
    background-color: var(--color-bg-tertiary);
    cursor: not-allowed;
    opacity: 0.7;
  }
}
button {
  cursor: pointer;
  border: none;
  font-family: inherit;
  font-size: 1rem;
  font-weight: 500;
  line-height: inherit;
  padding: var(--spacing-sm) var(--spacing-md);
  border-radius: var(--border-radius);
  transition: var(--transition-base);
  &:focus {
    outline: none;
    box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);
  }
  &:disabled {
    cursor: not-allowed;
    opacity: 0.7;
  }
}
// ==========================================================================
// 7. 通用工具类
// ==========================================================================
// 提供一些常用的、无语义的工具类,快速实现特定效果。
// 文本对齐
.text-left   { text-align: left; }
.text-center { text-align: center; }
.text-right  { text-align: right; }
// 文本颜色
.text-primary   { color: var(--color-text-primary); }
.text-secondary { color: var(--color-text-secondary); }
.text-light     { color: var(--color-text-light); }
// 背景颜色
.bg-primary   { background-color: var(--color-bg-primary); }
.bg-secondary { background-color: var(--color-bg-secondary); }
.bg-tertiary  { background-color: var(--color-bg-tertiary); }
// 间距工具类
.m-0  { margin: 0; }
.mt-0 { margin-top: 0; }
.mb-0 { margin-bottom: 0; }
.p-0  { padding: 0; }
.pt-0 { padding-top: 0; }
.pb-0 { padding-bottom: 0; }
// 可以根据需要继续添加更多工具类...
// ==========================================================================
// 8. 辅助功能
// ==========================================================================对辅助技术(如屏幕阅读器)是可访问的。
// 隐藏元素,但保留屏幕阅读器可读性
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}
// ==========================================================================
// 9. 清除浮动
// ==========================================================================
// 当需要清除内部浮动时使用。
.clearfix::after {
  content: "";
  display: table;
  clear: both;
}

模板详解

全局变量与配置 (root)

这是整个样式表的“大脑”,所有颜色、字体、间距等都在这里定义。

global.css公共样式模板与介绍
(图片来源网络,侵删)
  • 好处:如果你想更换主题色,只需修改 --color-primary 的值,所有使用该变量的地方都会自动更新。
  • var() 函数:用于使用这些变量,如 color: var(--color-primary);

基础重置与标准化

  • box-sizing: border-box;:这是现代 Web 开发的基石,它将元素的 paddingborder 计算进 widthheight 内,使得布局更加直观和可预测。
  • scroll-behavior: smooth;:为页面内锚点跳转添加平滑滚动效果。
  • -webkit-font-smoothing-moz-osx-font-smoothing:用于提升字体在不同操作系统上的渲染清晰度。

链接样式

定义了链接的默认、悬停、焦点状态。focus-visible 是一个重要的伪类,它只在键盘导航时触发焦点样式,改善了可访问性。

标题与文本格式

移除了浏览器默认的标题和段落间距,使用统一的变量(如 var(--spacing-md))来管理间距,保证了视觉节奏的一致性。

列表与表单元素

重置了 <ul>, <ol>, <li> 的默认样式,并对 <input>, <textarea>, <select>, <button> 进行了美化,统一了它们的边框、内边距、焦点状态等,使表单看起来更整洁、更易用。

通用工具类

这是 global.css 中非常实用的一部分,它提供了一些简单的、可复用的类,让你无需编写额外的 CSS 即可实现特定效果。

global.css公共样式模板与介绍
(图片来源网络,侵删)
  • 给一个 <div> 添加 class="text-center",就能快速实现居中对齐。
  • 这类类名通常非常短(如 m-0 代表 margin: 0),在大型项目中可以极大提高开发效率。

辅助功能

  • .sr-only (Screen Reader Only):这是一个非常重要的可访问性类,它将元素从视觉上隐藏(position: absoluteoverflow: hidden),但屏幕阅读器仍然可以读取其内容,适用于那些对视觉用户无用但对屏幕阅读器用户重要的信息(如“当前页面:首页”)。

清除浮动

.clearfix 是一个经典的解决方案,用于清除其内部浮动元素带来的布局影响,在现代 CSS 中,更推荐使用 Flexbox 或 Grid 布局来避免浮动,但在处理遗留代码或特定场景时,它依然很有用。


如何使用这个模板?

  1. 创建项目结构

    /src
      /styles
        _variables.scss    // 变量文件
        _reset.scss       // 重置样式
        _typography.scss  // 文本样式
        _forms.scss       // 表单样式
        _tools.scss       // 工具类
        global.scss       // 主入口文件,通过 @import 引入其他文件
      /...
  2. 编写 global.scss

    // src/styles/global.scss
    // 1. 导入变量文件
    @import './variables';
    // 2. 导入各个模块文件
    @import './reset';
    @import './typography';
    @import './forms';
    @import './tools';
    // ...其他模块
  3. 在 HTML 中引入: 在你的主 HTML 文件(如 index.html)的 <head> 标签内引入编译后的 CSS 文件。

    <link rel="stylesheet" href="dist/css/global.css">

    如果你使用构建工具(如 Vite, Webpack),可以直接引入 .scss 文件,构建工具会自动处理。

一个设计良好的 global.css 是构建可维护、可扩展、风格统一的 Web 项目的基石,它不仅解决了浏览器兼容性问题,更重要的是,它将设计系统代码化,为整个项目提供了稳定的基础,希望这个模板和介绍能帮助你更好地管理你的项目样式。