Reboot 是一个单文件中特定元素 CSS 更改的集合,它启动 Bootstrap,提供一个优雅、一致且简单的基准以供构建。

方法

Reboot 以 Normalize 为基础,仅使用元素选择器为许多 HTML 元素提供了一些自以为是的样式。其他样式仅使用类来完成。例如,我们重启了一些 <table> 样式以获得更简单的基准,并随后提供 .table.table-bordered 等。

以下是我们在 Reboot 中选择覆盖内容的准则和原因

  • 更新一些浏览器默认值,以使用 rem 代替 em,以实现可扩展组件间距。
  • 避免使用 margin-top。垂直边距可能会折叠,产生意外结果。但更重要的是,单向 margin 是一种更简单的思维模型。
  • 为了更轻松地在不同设备尺寸之间进行缩放,块元素应使用 rem 作为 margin
  • 尽可能使用 inheritfont 相关属性的声明保持在最小值。

页面默认值

更新 <html><body> 元素,以提供更好的全页面默认值。更具体地说

  • box-sizing 在每个元素上全局设置——包括 *::before*::after,设置为 border-box。这可确保元素的声明宽度绝不会因填充或边框而超出。
  • <html> 上未声明基本 font-size,但假设为 16px(浏览器默认值)。font-size: 1rem 应用于 <body>,以便通过媒体查询轻松响应式地缩放字体,同时尊重用户偏好并确保更易于访问。
  • <body> 还设置了全局 font-familyline-heighttext-align。这后来被一些表单元素继承,以防止字体不一致。
  • 为了安全,<body> 已声明 background-color,默认为 #fff

原生字体栈

Bootstrap 4 中已删除默认网络字体(Helvetica Neue、Helvetica 和 Arial),并替换为“本机字体堆栈”,以便在每台设备和操作系统上实现最佳文本渲染。阅读更多有关 Smashing Magazine 文章中的本机字体堆栈 的信息。

$font-family-sans-serif:
  // Safari for macOS and iOS (San Francisco)
  -apple-system,
  // Chrome < 56 for macOS (San Francisco)
  BlinkMacSystemFont,
  // Windows
  "Segoe UI",
  // Android
  Roboto,
  // Basic web fallback
  "Helvetica Neue", Arial,
  // Linux
  "Noto Sans",
  "Liberation Sans",
  // Sans serif fallback
  sans-serif,
  // Emoji fonts
  "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;

请注意,由于字体堆栈包括表情符号字体,许多常见的符号/dingbat Unicode 字符将被渲染为多色象形文字。它们的外观将根据浏览器/平台的本机表情符号字体中使用的样式而有所不同,并且不会受到任何 CSS color 样式的影响。

font-family 应用于 <body>,并在整个 Bootstrap 中自动全局继承。要切换全局 font-family,请更新 $font-family-base 并重新编译 Bootstrap。

标题和段落

所有标题元素——例如 <h1>——和 <p> 都被重置为删除其 margin-top。标题添加了 margin-bottom: .5rem,段落添加了 margin-bottom: 1rem,以便于间距。

标题 示例
<h1></h1> h1. Bootstrap 标题
<h2></h2> h2. Bootstrap 标题
<h3></h3> h3. Bootstrap 标题
<h4></h4> h4. Bootstrap 标题
<h5></h5> h5. Bootstrap 标题
<h6></h6> h6. Bootstrap 标题

列表

所有列表——<ul><ol><dl>——都删除了其 margin-top,并添加了 margin-bottom: 1rem。嵌套列表没有 margin-bottom

  • 所有列表都删除了其顶部边距
  • 并使它们的底部边距标准化
  • 嵌套列表没有底部边距
    • 这样它们的外观更均匀
    • 尤其是在后面紧跟更多列表项时
  • 左填充也已重置
  1. 这是一个有序列表
  2. 其中有几个列表项
  3. 它具有与前一个无序列表
  4. 相同的整体外观

为了实现更简单的样式、更清晰的层级结构和更好的间距,描述列表更新了margin<dd>margin-left重置为0,并添加margin-bottom: .5rem<dt>加粗

描述列表
描述列表非常适合定义术语。
术语
术语的定义。
同一术语的第二个定义。
另一个术语
此另一个术语的定义。

预格式文本

<pre>元素被重置为移除其margin-top,并为其margin-bottom使用rem单位。

.example-element {
  margin-bottom: 1rem;
}

表格

表格经过轻微调整,以设置<caption>样式、折叠边框并确保整个表格的text-align一致。有关边框、填充等的其他更改,请参阅.table

这是一个示例表格,这是其标题,用于描述内容。
表格标题 表格标题 表格标题 表格标题
表格单元格 表格单元格 表格单元格 表格单元格
表格单元格 表格单元格 表格单元格 表格单元格
表格单元格 表格单元格 表格单元格 表格单元格

表单

各种表单元素已重新启动,以实现更简单的基本样式。以下是其中一些最显着的更改

  • <fieldset>没有边框、填充或边距,因此它们可以轻松用作单个输入或输入组的包装器。
  • <legend>(如字段组)也已重新设置样式,以显示为一种标题。
  • <label>设置为display: inline-block,以允许应用margin
  • <input><select><textarea><button>主要由 Normalize 处理,但 Reboot 会移除其margin并同时设置line-height: inherit
  • <textarea>被修改为仅可垂直调整大小,因为水平调整大小通常会“破坏”页面布局。
  • :not(:disabled)时,<button><input>按钮元素具有cursor: pointer

这些更改以及更多更改如下所示。

示例图例

100

按钮指针

Reboot 包含对 role="button" 的增强,将默认光标更改为 pointer。将此属性添加到元素中,以帮助指示元素是交互式的。对于 <button> 元素,此角色不是必需的,这些元素会获得自己的 cursor 更改。

非按钮元素按钮
<span role="button" tabindex="0">Non-button element button</span>

杂项元素

地址

<address> 元素已更新,将浏览器的默认 font-styleitalic 重置为 normalline-height 现在也已继承,并且已添加 margin-bottom: 1rem<address> 用于显示最近祖先(或整个作品)的联系信息。通过使用 <br> 结束行来保留格式。

Twitter, Inc.
1355 Market St, Suite 900
San Francisco, CA 94103
P (123) 456-7890
全名
first.last@example.com

引用块

块引用的默认 margin1em 40px,因此我们将它重置为 0 0 1rem,使其与其他元素更一致。

一个众所周知的引用,包含在块引用元素中。

某位名人,载于 来源标题

内联元素

<abbr> 元素接收基本样式,使其在段落文本中脱颖而出。

Nulla attr vitae elit libero, a pharetra augue.

摘要

摘要的默认 cursortext,因此我们将它重置为 pointer,以传达可以通过单击元素与之交互。

一些详细信息

有关详细信息的更多信息。

更多详细信息

以下是有关详细信息的更多详细信息。

HTML5 [hidden] 属性

HTML5 添加了 一个名为 [hidden] 的新全局属性,默认情况下样式为 display: none。借鉴 PureCSS 的一个想法,我们通过使 [hidden] { display: none !important; } 来改进此默认设置,以帮助防止其 display 被意外覆盖。虽然 [hidden] 不受 IE10 原生支持,但我们 CSS 中的显式声明解决了该问题。

<input type="text" hidden>
jQuery 不兼容

[hidden] 与 jQuery 的 $(...).hide()$(...).show() 方法不兼容。因此,我们目前不特别认可 [hidden] 优于其他用于管理元素 display 的技术。

要仅切换元素的可见性,这意味着其 display 未修改,并且元素仍可以影响文档流,请使用 .invisible