CSS Normalization

2025年2月26日 | 4 分钟阅读

引言

全局 CSS 规则的集合是设计系统的一部分,其目标是规范化(消除)浏览器默认设置的差异。团队无需自带 CSS 规范化,并且当设计系统 CSS 集成到系统中时,它不需要额外的防御性 CSS 来解释产品之间规范化代码的差异。我们的全局规范化规则通过将元素的基本样式设置为适当的默认值,而不是完全重置元素样式,来遵循当前的最佳实践。

为什么我们需要规范化 CSS?

每个浏览器根据其默认设置以不同的方式渲染不同的 HTML 组件。没有自定义 CSS 的网站在不同浏览器中查看时会显得不同,因为不同的浏览器具有不同的默认样式,也称为用户代理样式。Web 开发人员需要考虑这些许多默认样式,并确保它们被有效覆盖,即使在生成自定义 CSS 时也是如此。由于这可能既耗时又容易出错,因此开发人员通常会在应用任何设置网站风格的 CSS 之前,使用一组基本 CSS 规则删除或规范化(消除差异)这些用户代理样式。

全局默认设置

在我们规范化规则中包含的一些全局定义的默认设置将在 CSS 导入后影响整个应用程序。这些默认设置包括(但不限于)以下内容:

  • Box-sizing: border-box 已为所有元素启用,包括 *::before 和 *::after。这确保了填充或边框永远不会导致元素的定义宽度超出。
    • 尽管团队已经在使用这种常见的 CSS 重置,但有些团队可能会遇到意想不到的结果。要恢复元素的先前行为,如果其周围空间发生变化,可能需要将其明确设置为 box-sizing: content-box(浏览器默认值)。
  • 通过其字体系列、字体大小、行高和颜色定义,<body> 元素取代了 .ds-base 类。
    • 此外,主题提供的背景现在是 <body> 设置的 background-color。
  • 在定义了 tabindex="-1" 的元素上,轮廓被消除。例如,当跳过链接被激活时,焦点会转移到 <main> 或标题元素,并且非交互式组件的焦点环被移除。
  • 为了尊重启用 prefers-reduced motion 的用户的偏好,所有元素(包括 *::before 和 *::after)的动画、过渡和平滑滚动都被禁用。

排版

标题

font inherit 规则将把其父元素指定的字体样式应用于所有标题元素。

font 是一个速记属性,包含许多字体样式。重要的是要记住,标题现在将继承其父元素(即 <body>)的字体系列和字体大小。此规则确保标题元素的语义和外观相互分离。如果您需要样式化标题的帮助,请参阅我们的标题或实用程序类文档。

链接

链接的功能与以前一样,但有一个变化:text-decoration-color 现在设置为 currentColor。此更改假定所有链接下划线,无论它们链接到的文本状态如何,都将与文本具有相同的颜色。

列表

<ol> 和 <ul> 元素的样式已与它们的 .ds-c-list 兄弟元素类似,但有一个显著例外:它们利用 flex 来帮助常用内联列表模式,并提供对列表项间距的更多控制。如果您需要内联列表,可以在项目中本地包含 flex-direction: row。同样,如果列表项之间的距离与您的喜好不同,可以将 gap 调整为项目的理想值。总的来说,与浏览器的默认设置相比,使用 Flexbox 您应该对列表间距有更大的灵活性。

如果您希望特定列表未样式化,请为其添加 role="list" 属性。此功能允许您移除设计系统的默认规范化样式,并应用额外的 CSS 来移除默认的浏览器样式。

表单元素

为了简化基本样式,某些表单元素已重新设计。以下是一些更显著的调整:

  • 使用 font: inherit 规则,其父元素提供的字体样式应用于 <input>、<button>、<textarea> 和 <select> 组件。
  • 复选框和单选按钮使用强调色(配置为主题指定的“选中”颜色)进行着色。这确保了,即使您不使用我们的选择组件,这些输入的选中状态也与您网站的主题相符。
  • 由于 <fieldset> 没有边框、外边距和内边距,因此可以轻松地将它们用作单个或多个输入的包装器。

结论

CSS 规范化涉及为特定元素设置默认样式,是一种实现浏览器之间一致性的方法,因为不同浏览器渲染方式可能不同。它是一个统一元素,因此确保布局没有间隙,并且外观在任何地方都是统一的。使用规范化可以纠正浏览器不一致性,从而为开发人员创建一个平等的开发环境。因此,CSS 规范化提供了更好的跨浏览器一致性和网络统一性,因为它能带来卓越的用户体验和 Web 开发人员的维护便利性。


下一个主题Freecodecamp-html-css