重新啟動
Reboot 是將特定元素的 CSS 變更收集在單一檔案中的集合,它啟動 Bootstrap,提供優雅、一致且簡單的基礎供後續建置。
方法
Reboot 建立在 Normalize 之上,使用僅限元素選擇器的有點主觀的樣式提供許多 HTML 元素。其他樣式僅使用類別完成。例如,我們重新啟動一些 <table> 樣式以取得更簡單的基準線,並在稍後提供 .table、.table-bordered 等。
以下是我們在 Reboot 中選擇覆寫內容的準則和原因
- 更新一些瀏覽器預設值,改用
rem而非em,以獲得可擴充元件間距。 - 避免使用
margin-top。垂直邊距可能會合併,造成意外結果。更重要的是,單一方向的margin是較為簡單的心智模型。 - 為了在不同裝置尺寸間更輕鬆地擴充,區塊元素應使用
rem作為margin。 - 將
font相關屬性的宣告降至最低,盡可能使用inherit。
CSS 變數
在 v5.2.0 中新增在 v5.1.1 中,我們標準化了所有 CSS 捆綁包(包括 bootstrap.css、bootstrap-reboot.css 和 bootstrap-grid.css)中所需的 @import,以包含 _root.scss。這會將 :root 層級 CSS 變數新增至所有捆綁包,不論該捆綁包中使用了多少個變數。最終,Bootstrap 5 將持續新增更多 CSS 變數,以提供更多即時自訂功能,而無需總是重新編譯 Sass。我們的做法是採用我們的 Sass 來源變數,並將它們轉換為 CSS 變數。這樣,即使您不使用 CSS 變數,您仍然擁有 Sass 的所有功能。這仍在進行中,需要時間才能完全實作。
例如,考慮這些用於常見 <body> 樣式的 :root CSS 變數
@if $font-size-root != null {
--#{$prefix}root-font-size: #{$font-size-root};
}
--#{$prefix}body-font-family: #{inspect($font-family-base)};
@include rfs($font-size-base, --#{$prefix}body-font-size);
--#{$prefix}body-font-weight: #{$font-weight-base};
--#{$prefix}body-line-height: #{$line-height-base};
@if $body-text-align != null {
--#{$prefix}body-text-align: #{$body-text-align};
}
--#{$prefix}body-color: #{$body-color};
--#{$prefix}body-color-rgb: #{to-rgb($body-color)};
--#{$prefix}body-bg: #{$body-bg};
--#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};
--#{$prefix}emphasis-color: #{$body-emphasis-color};
--#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};
--#{$prefix}secondary-color: #{$body-secondary-color};
--#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};
--#{$prefix}secondary-bg: #{$body-secondary-bg};
--#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};
--#{$prefix}tertiary-color: #{$body-tertiary-color};
--#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};
--#{$prefix}tertiary-bg: #{$body-tertiary-bg};
--#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};實際上,這些變數會在 Reboot 中套用如下所示
body {
margin: 0; // 1
font-family: var(--#{$prefix}body-font-family);
@include font-size(var(--#{$prefix}body-font-size));
font-weight: var(--#{$prefix}body-font-weight);
line-height: var(--#{$prefix}body-line-height);
color: var(--#{$prefix}body-color);
text-align: var(--#{$prefix}body-text-align);
background-color: var(--#{$prefix}body-bg); // 2
-webkit-text-size-adjust: 100%; // 3
-webkit-tap-highlight-color: rgba($black, 0); // 4
}
這允許您隨意進行即時自訂
<body style="--bs-body-color: #333;">
<!-- ... -->
</body>
頁面預設
<html> 和 <body> 元素已更新,以提供更好的頁面預設。更具體來說
box-sizing全域設定在每個元素上,包括*::before和*::after,設定為border-box。這可確保元素的宣告寬度絕不會因為內距或邊框而超出。- 在
<html>上未宣告基本font-size,但假設為16px(瀏覽器預設)。font-size: 1rem套用在<body>上,以便透過媒體查詢輕鬆調整字型大小,同時尊重使用者的偏好並確保更易於存取。這個瀏覽器預設可透過修改$font-size-root變數來覆寫。
- 在
<body>也設定了全域font-family、font-weight、line-height和color。這會在稍後由某些表單元素繼承,以防止字型不一致。- 為了安全,
<body>已宣告background-color,預設為#fff。
原生字型堆疊
Bootstrap 利用「原生字型堆疊」或「系統字型堆疊」,以便在每個裝置和作業系統上最佳呈現文字。這些系統字型特別針對現今的裝置而設計,並改善螢幕顯示效果、可變字型支援等。在 這篇Smashing Magazine 文章中,進一步了解原生字型堆疊。
$font-family-sans-serif:
// Cross-platform generic font family (default user interface font)
system-ui,
// Safari for macOS and iOS (San Francisco)
-apple-system,
// Windows
"Segoe UI",
// Android
Roboto,
// older macOS and iOS
"Helvetica Neue",
// Linux
"Noto Sans",
"Liberation Sans",
// Basic web fallback
Arial,
// Sans serif fallback
sans-serif,
// Emoji fonts
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
請注意,由於字型堆疊包含表情符號字型,許多常見的符號/裝飾 Unicode 字元將會呈現為多色象形文字。它們的外觀會有所不同,具體取決於瀏覽器/平台原生表情符號字型中使用的樣式,而且不會受到任何 CSS color 樣式影響。
這個 font-family 套用在 <body> 上,並在 Bootstrap 中自動全域繼承。若要切換全域 font-family,請更新 $font-family-base 並重新編譯 Bootstrap。
標題
所有標題元素(<h1> 到 <h6>)都移除了 margin-top,設定 margin-bottom: .5rem,並縮小 line-height。雖然標題預設會繼承其 color,但您也可以透過選用的 CSS 變數 --bs-heading-color 來覆寫它。
| 標題 | 範例 |
|---|---|
<h1></h1> |
h1. Bootstrap 標題 |
<h2></h2> |
h2. Bootstrap 標題 |
<h3></h3> |
h3. Bootstrap 標題 |
<h4></h4> |
h4. Bootstrap 標題 |
<h5></h5> |
h5. Bootstrap 標題 |
<h6></h6> |
h6. Bootstrap 標題 |
段落
所有 <p> 元素都移除了其 margin-top,並設定 margin-bottom: 1rem 以便於間距。
這是一個範例段落。
<p>This is an example paragraph.</p>連結
連結預設套用 color 和底線。雖然連結會在 :hover 時變更,但不會根據某人是否 :visited 連結而變更。它們也不會收到任何特殊 :focus 樣式。
<a href="#">This is an example link</a>從 v5.3.x 開始,連結 color 會使用 rgba() 和新的 -rgb CSS 變數設定,讓您能輕鬆自訂連結顏色不透明度。使用 --bs-link-opacity CSS 變數變更連結顏色不透明度
<a href="#" style="--bs-link-opacity: .5">This is an example link</a>沒有 href 的佔位符連結會使用更特定的選擇器,並將其 color 和 text-decoration 重設為預設值。
<a>This is a placeholder link</a>水平線
<hr> 元素已簡化。與瀏覽器預設值類似,<hr> 會透過 border-top 設定樣式,預設 opacity: .25,並會自動透過 color 繼承其 border-color,包括透過父層設定 color 的情況。它們可以使用文字、邊框和不透明度工具進行修改。
<hr>
<div class="text-success">
<hr>
</div>
<hr class="border border-danger border-2 opacity-50">
<hr class="border border-primary border-3 opacity-75">清單
所有清單—<ul>、<ol> 和 <dl>—都移除了其 margin-top,並新增 margin-bottom: 1rem。巢狀清單沒有 margin-bottom。我們也重設了 <ul> 和 <ol> 元素的 padding-left。
- 所有清單都移除了其頂端邊界
- 並將其底端邊界標準化
- 巢狀清單沒有底端邊界
- 這樣它們的外觀會更均勻
- 特別是在後接更多清單項目時
- 左邊距也已重設
- 以下是順序清單
- 包含幾個清單項目
- 它具有相同的整體外觀
- 與前一個未排序清單相同
為了更簡單的樣式、更清晰的階層和更好的間距,說明清單已更新 margin。<dd> 重設 margin-left 為 0,並新增 margin-bottom: .5rem。<dt> 會加粗。
- 說明清單
- 說明清單非常適合定義術語。
- 術語
- 術語的定義。
- 同一個術語的第二個定義。
- 另一個術語
- 此另一個術語的定義。
內嵌程式碼
使用 <code> 包裹程式碼的內嵌片段。務必跳脫 HTML 尖括號。
<section> 應當以內嵌方式包裹。
For example, <code><section></code> should be wrapped as inline.程式碼區塊
對於多行程式碼,請使用 <pre>。再次強調,務必跳脫程式碼中的任何尖括號,以正確呈現。<pre> 元素已重設,以移除其 margin-top,並使用 rem 單位作為其 margin-bottom。
<p>Sample text here...</p>
<p>And another line of sample text here...</p>
<pre><code><p>Sample text here...</p>
<p>And another line of sample text here...</p>
</code></pre>變數
對於表示變數,請使用 <var> 標籤。
<var>y</var> = <var>m</var><var>x</var> + <var>b</var>使用者輸入
使用 <kbd> 標示通常透過鍵盤輸入的輸入內容。
若要編輯設定,請按 Ctrl + ,
To switch directories, type <kbd>cd</kbd> followed by the name of the directory.<br>
To edit settings, press <kbd><kbd>Ctrl</kbd> + <kbd>,</kbd></kbd>範例輸出
若要標示程式範例輸出,請使用 <samp> 標籤。
<samp>This text is meant to be treated as sample output from a computer program.</samp>表格
表格略微調整為 <caption> 樣式,摺疊邊框,並確保整個 text-align 一致。邊框、填補等其他變更會套用 .table 類別。
| 表格標題 | 表格標題 | 表格標題 | 表格標題 |
|---|---|---|---|
| 表格儲存格 | 表格儲存格 | 表格儲存格 | 表格儲存格 |
| 表格儲存格 | 表格儲存格 | 表格儲存格 | 表格儲存格 |
| 表格儲存格 | 表格儲存格 | 表格儲存格 | 表格儲存格 |
<table>
<caption>
This is an example table, and this is its caption to describe the contents.
</caption>
<thead>
<tr>
<th>Table heading</th>
<th>Table heading</th>
<th>Table heading</th>
<th>Table heading</th>
</tr>
</thead>
<tbody>
<tr>
<td>Table cell</td>
<td>Table cell</td>
<td>Table cell</td>
<td>Table cell</td>
</tr>
<tr>
<td>Table cell</td>
<td>Table cell</td>
<td>Table cell</td>
<td>Table cell</td>
</tr>
<tr>
<td>Table cell</td>
<td>Table cell</td>
<td>Table cell</td>
<td>Table cell</td>
</tr>
</tbody>
</table>表單
各種表單元素已重新啟動,以簡化基本樣式。以下是部分最顯著的變更
<fieldset>沒有邊框、填補或外框,因此可輕鬆用作個別輸入或輸入群組的包裝器。<legend>和欄位集一樣,也已重新設定樣式,以顯示為標題類型。<label>設定為display: inline-block,以套用margin。<input>、<select>、<textarea>和<button>大多由正規化處理,但重新啟動會移除其margin,並設定line-height: inherit。<textarea>修改為僅能垂直調整大小,因為水平調整大小常常會「中斷」頁面配置。<button>和<input>按鈕元素在:not(:disabled)時有cursor: pointer。
這些變更,以及更多變更,如下所示。
按鈕指標
Reboot 包含對 role="button" 的加強,將預設游標變更為 pointer。將此屬性新增至元素,以幫助指出元素具有互動性。<button> 元素不需要此角色,因為它們會取得自己的 cursor 變更。
<span role="button" tabindex="0">Non-button element button</span>雜項元素
地址
<address> 元素已更新,將瀏覽器預設 font-style 從 italic 重設為 normal。line-height 現在也已繼承,且已新增 margin-bottom: 1rem。<address> 用於呈現最近祖先(或整個作品)的聯絡資訊。透過以 <br> 結束列來保留格式。
區塊引用
區塊引用的預設 margin 為 1em 40px,因此我們將其重設為 0 0 1rem,以與其他元素更一致。
包含在區塊引用元素中的知名引言。
某位名人在 來源標題 中說過
內嵌元素
<abbr> 元素接收基本樣式,使其在段落文字中脫穎而出。
摘要
摘要的預設 cursor 為 text,因此我們將其重設為 pointer,以傳達可透過按一下元素與之互動。
一些詳細資訊
關於詳細資訊的更多資訊。
更多詳細資訊
以下是關於詳細資訊的更多詳細資訊。
HTML5 [hidden] 屬性
HTML5 新增 一個名為 [hidden] 的新全域屬性,預設樣式為 display: none。借用 PureCSS 的一個想法,我們透過將 [hidden] { display: none !important; } 改善此預設,以協助防止其 display 意外被覆寫。
<input type="text" hidden>
[hidden] 與 jQuery 的 $(...).hide() 和 $(...).show() 方法不相容,因此我們不會特別推薦 [hidden] 優於其他用於管理元素 display 的技術。
若要僅切換元素的可見性,表示其 display 未修改,且元素仍可影響文件流程,請改用 .invisible 類別。