再起動
Rebootは、単一ファイルに要素固有のCSS変更を集めたもので、Bootstrapをキックスタートして、エレガントで一貫性のあるシンプルなベースラインを提供します。
アプローチ
RebootはNormalizeをベースに構築されており、要素セレクタのみを使用して、多くのHTML要素にやや意見の分かれるスタイルを提供します。追加のスタイリングはクラスのみを使用して行われます。たとえば、よりシンプルなベースラインのために<table>
スタイルを再起動し、後で.table
、.table-bordered
などを提供します。
Rebootで何をオーバーライドするかを選択するためのガイドラインと理由をご紹介します
- スケーラブルなコンポーネントのスペーシングを実現するために、一部のブラウザのデフォルト値を
em
の代わりにrem
を使用するように更新します。 margin-top
は避けてください。垂直方向のマージンは折りたたまれ、予期しない結果が生じる可能性があります。さらに重要なのは、単一方向のmargin
の方が単純なメンタルモデルであるということです。- デバイスサイズ全体で簡単にスケーリングできるように、ブロック要素は
margin
にrem
を使用する必要があります。 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では、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
と想定されています(ブラウザのデフォルト)。ユーザー設定を尊重し、よりアクセスしやすいアプローチを確保しながら、メディアクエリを介して簡単にレスポンシブなタイプスケーリングを行うために、font-size: 1rem
が<body>
に適用されます。このブラウザのデフォルトは、$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;
フォントスタックには絵文字フォントが含まれているため、多くの一般的な記号/装飾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
が設定されている場合を含め、color
を介してborder-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
もリセットしました。
- すべてのリストの上マージンが削除されました
- そして、下マージンが正規化されました
- ネストされたリストには下マージンがありません
- このように、より均一な外観になります
- 特に、さらに多くのリスト項目が続く場合
- 左パディングもリセットされました
- これは順序付きリストです
- いくつかのリスト項目があります
- 全体的な外観は同じです
- 前の順序なしリストと同様に
よりシンプルなスタイリング、明確な階層、より適切なスペーシングのために、説明リストのマージンが更新されました。 <dd>
はmargin-left
を0
にリセットし、margin-bottom: .5rem
を追加します。 <dt>
は**太字**です。
- 説明リスト
- 説明リストは用語を定義するのに最適です。
- 用語
- 用語の定義。
- 同じ用語の2番目の定義。
- 別の用語
- この別の用語の定義。
インラインコード
インラインのコード片は<code>
で囲みます。HTMLの角括弧は必ずエスケープしてください。
<section>
はインラインとして囲む必要があります。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>
を使用します。
設定を編集するには、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>
は、margin
を適用できるようにdisplay: inline-block
に設定されています。<input>
、<select>
、<textarea>
、<button>
は、主にNormalizeによって対処されますが、Rebootはそれらのmargin
を削除し、line-height: inherit
も設定します。<textarea>
は、水平方向のサイズ変更はしばしばページレイアウトを「壊す」ため、垂直方向にのみサイズ変更できるように変更されています。<button>
と<input>
ボタン要素は、:not(:disabled)
の場合、cursor: pointer
になります。
これらの変更点などは、以下に示されています。
ボタンのポインタ
Rebootには、デフォルトのカーソルをpointer
に変更するためのrole="button"
の拡張機能が含まれています。要素がインタラクティブであることを示すために、この属性を要素に追加します。この役割は、独自のcursor
変更を取得する<button>
要素には必要ありません。
<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>
要素は、段落テキストの中で目立つようにするための基本的なスタイル設定を受け取ります。
概要
summaryのデフォルトの`cursor`は`text`なので、要素をクリックして操作できることを伝えるために、それを`pointer`にリセットします。
詳細
詳細についての詳細
さらに詳細
詳細についてのさらに詳細な情報です。
HTML5 [hidden]
属性
HTML5は、デフォルトでdisplay: none
としてスタイル設定される[hidden]
という新しいグローバル属性を追加します。PureCSSからアイデアを借りて、[hidden] { display: none !important; }
にすることで、このデフォルトを改善し、そのdisplay
が誤って上書きされるのを防ぎます。
<input type="text" hidden>
[hidden]
はjQueryの$(...).hide()
および$(...).show()
メソッドと互換性がないため、要素のdisplay
を管理するための他の手法よりも[hidden]
を特に推奨しているわけではありません。要素の表示/非表示を切り替えるだけで、つまりその`display`は変更されず、要素はドキュメントのフローに影響を与えることができる場合は、代わりに`.invisible`クラスを使用してください。