Reboot
Rebootは、要素ごとに変更されたCSSを1つのファイルにまとめたもので、Bootstrapを起動し、エレガントで一貫性のある、シンプルなベースラインを提供するものです。
アプローチ
RebootはNormalizeの上に構築され、要素セレクタのみを使用して、多くのHTML要素にやや意見の分かれるスタイルを提供します。追加のスタイリングは、クラスを使ってのみ行われます。例えば、よりシンプルなベースラインのためにいくつかの<table>
スタイルをリブートし、後に.table
、.table-bordered
などを提供します。
Rebootで何をオーバーライドするかを選択するためのガイドラインと理由は以下の通りです。:
- いくつかのブラウザのデフォルト値を更新し、スケーラブルなコンポーネントのスペーシングに
em
の代わりにrem
を使用するようにした。 margin-top
は避けてください。垂直方向のマージンが崩れ、予期せぬ結果になることがあります。しかし、より重要なのは、margin
の方向が1つであることが、より単純なメンタルモデルであるということです。- デバイスのサイズに関係なく簡単に拡大縮小できるように、ブロック要素では
margin
にrem
を使用するようにしましょう。 - 可能であれば、
inherit
を使用してfont
関連プロパティの宣言を最小限に抑えます。
CSS変数
Added in v5.2.0v5.1.1では、すべてのCSSバンドル(bootstrap.css
, bootstrap-reboot.css
, bootstrap-grid.css
など)に対して必要な@import
を_root.scss
に標準化しました。これは、そのバンドルでいくつ使用されているかに関係なく、すべてのバンドルに:root
レベルのCSS変数を追加します。最終的にBootstrap 5は、常にSassを再コンパイルする必要なく、よりリアルタイムのカスタマイズを提供するために、より多くのCSS変数を時間と共に追加し続けるでしょう。私たちのアプローチは、ソースの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が想定されています(ブラウザのデフォルト)。<body>
では、ユーザーの好みを尊重しつつ、メディアクエリで簡単にレスポンシブタイプスケーリングができるように、font-size: 1rem
が適用されており、よりアクセスしやすいアプローチになっています。このブラウザのデフォルトは、$font-size-root
変数を変更することで上書きすることができます。<body>
では、グローバルなfont-family
,font-weight
,line-height
,color
も設定されます。これは、フォントの不一致を防ぐために、いくつかのフォーム要素に後で継承されます。- 安全のため、
<body>
はbackground-color
を宣言しており、デフォルトは#fff
です。
ネイティブフォントスタック
Bootstrapは、あらゆるデバイスやOSで最適なテキストを表示するために、「ネイティブフォントスタック」または「システムフォントスタック」を利用しています。これらのシステムフォントは、今日のデバイスを念頭に置いて特別に設計されており、画面上でのレンダリングの向上、可変フォントのサポートなどを備えています。ネイティブフォントスタックについては、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;
フォントスタックには絵文字フォントが含まれているため、多くの一般的な記号/絵文字のユニコード文字はマルチカラーの絵文字としてレンダリングされることに注意してください。それらの外観は、ブラウザ/プラットフォームのネイティブ絵文字フォントで使用されているスタイルによって異なります。また、CSSのcolor
スタイルの影響を受けることはありません。
このfont-family
は<body>
に適用されると、自動的に全体に継承されます。基本のfont-family
を切り替えるには$font-family-base
を変更してコンパイルします。
見出し
すべての見出し要素-<h1>
-<h6>
は、margin-top
が削除され、margin-bottom: .5rem
が設定され、line-height
が強調されます。見出しはデフォルトで color
を継承しますが、オプションのCSS変数 --bs-heading-color
によって上書きすることができます。
Heading | Example |
---|---|
<h1></h1> |
h1. Bootstrap heading |
<h2></h2> |
h2. Bootstrap heading |
<h3></h3> |
h3. Bootstrap heading |
<h4></h4> |
h4. Bootstrap heading |
<h5></h5> |
h5. Bootstrap heading |
<h6></h6> |
h6. Bootstrap heading |
短絡
すべての<p>
要素はmargin-top
が削除され、margin-bottom: 1rem
を設定し、間隔を取りやすくしています。
This is an example paragraph.
<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変数を使って設定され、リンクの色の不透明度を簡単にカスタマイズすることができます。リンクカラーの不透明度は、CSS変数--bs-link-opacity
で変更できます:
<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
もリセットしました。
- All lists have their top margin removed
- And their bottom margin normalized
- Nested lists have no bottom margin
- This way they have a more even appearance
- Particularly when followed by more list items
- The left padding has also been reset
- Here’s an ordered list
- With a few list items
- It has the same overall look
- As the previous unordered list
シンプルで、明確な階層構造、空白の改善のために説明リストのmargin
が更新されました。
<dd>
はmargin-left
を0
にリセットし、margin-bottom: .5rem
を追加した。<dt>
は太字になります。
- Description lists
- A description list is perfect for defining terms.
- Term
- Definition for the term.
- A second definition for the same term.
- Another term
- Definition for this other term.
インラインコード
インラインのスニペットコードは<code>
で囲みます。HTMLの角括弧は必ずエスケープしてください。
<section>
should be wrapped as inline.
For example, <code><section></code> should be wrapped as inline.
コードブロック
複数行のコードには<pre>
を使用します。もう一度言いますが、適切なレンダリングのために、コード内の角括弧を必ずエスケープしてください。<pre>
要素は、margin-top
を削除し、margin-bottom
にrem
単位を使用するようにリセットされます。
<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>
を使用します。
To edit settings, press 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 heading | Table heading | Table heading | Table heading |
---|---|---|---|
Table cell | Table cell | Table cell | Table cell |
Table cell | Table cell | Table cell | Table cell |
Table cell | Table cell | Table cell | Table cell |
<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>
もfieldsetと同様に、見出しのような形で表示されるように変更された。<label>
はdisplay: inline-block
に設定し、margin
を適用できるようにしました。<input>
、<select>
、<textarea>
、<button>
はほとんどNormalizeで対応しますが、Rebootではmargin
を削除し、line-height: inherit
を設定することもできます。<textarea>
は、水平方向のサイズ変更でページレイアウトが「崩れること」が多いため、垂直方向にのみサイズ変更できるように修正しました。<button>
と<input>
ボタン要素は、:not(:disabled)
時にcursor: pointer
を持ちます。
これらの変更点などを以下に示します。
日付・色入力対応
日付入力は、Safariをはじめとするすべてのブラウザで完全にサポートされていないことにご注意ください。
ボタンにポインターを付ける
Rebootには、デフォルトのカーソルを pointer
に変更するためのrole="button"
の機能拡張が含まれています。この属性を要素に追加することで、要素がインタラクティブであることを示すのに役立ちます。このロールは<button>
要素には必要ありません。
<span role="button" tabindex="0">Non-button element button</span>
その他の要素
アドレス
<address>
要素が更新され、ブラウザのデフォルトのfont-style
がitalic
からnormal
にリセットされました。line-height
も継承され、margin-bottom. 1rem
が追加されました。<address>
最も近い祖先(またはbody全体)の連絡先情報を提示するためのものです。 行を<br>
で終了することにより、フォーマットを保持します。
1123 Fictional St,
San Francisco, CA 94103
P: (123) 456-7890 Full Name
first.last@example.com
引用文
引用文のデフォルトのmargin
は1em 40px
なので、これを0 0 1rem
にリセットして、他の要素との整合性をとります。
A well-known quote, contained in a blockquote element.
Someone famous in Source Title
インライン要素
<abbr>
要素は、段落テキストの中で目立つように基本的なスタイリングを受けます。
概要
概要のデフォルトのcursor
はtext
なので、それをpointer
にリセットして、要素をクリックすることでインタラクションができることを伝えています。
Some details
More info about the details.
Even more details
Here are even more details about the details.
HTML5の[hidden]
属性
HTML5では、[hidden]
という新しいグローバル属性が追加され、デフォルトではdisplay: none
というスタイルになっています。PureCSSのアイデアを借りて、このデフォルトを改良し、[hidden] {display: none !important; }
とすることで、誤ってdisplay
が上書きされるのを防いでいます。
<input type="text" hidden>
[hidden]
は、jQueryの$(...).hide()
と$(...).show()
メソッドと互換性がありません。したがって、要素のdisplay
を管理するための他のテクニックに対して、[hidden]
を特に推奨することは現在のところありません。
要素の可視性を切り替えるためdisplay
は変更されず, 文書の流れに影響を与えます。代わりに.invisible
クラスを使ってください。