Bootstrapユーティリティは、ユーティリティAPIを使用して生成され、Sassを経由してユーティリティクラスのデフォルトセットの変更や拡張に使用可能。このユーティリティAPIは、さまざまなオプションを備えたクラスのファミリーを生成するための一連のSassマップと関数に基づく。Sassマップに慣れていない場合は、公式のSassドキュメントを参照。
scss/_utilities.scss
ファイルにある $utilities
マップにはすべてのBootstrapユーティリティが集約されており、カスタムした $utilities
マップが存在する場合は後からマージされる。ユーティリティマップには、以下のオプションを受け入れるユーティリティグループのキー付きリストが集約されている。
オプション名 | タイプ | 説明 |
---|---|---|
property |
必須 | プロパティの名前。これは文字列か文字列の配列(水平方向のパディングやマージンなどに必要)。 |
values |
必須 | クラス名を値と同じにしたくない場合は、値のリストかマップにすることが可能。マップキーとして null が使用されている場合は、レンダリングされない。 |
class |
オプション | プロパティと同じ名前にしたくない場合に、クラス名を変更するための変数。class キーを指定せず、property キーが文字列の配列の場合、クラス名は property 配列の最初の要素になる。 |
state v5.0.0-beta1追加 |
オプション | ユーティリティ用に生成する :hover や :focus などの疑似クラスバリアントのリスト。デフォルト値は存在しない。 |
responsive |
オプション | レスポンシブクラスを生成する必要があるかどうかを示すブール値。デフォルトでは false 。 |
rfs |
オプション | 拡大縮小を可能にするための変数。これがどのように機能するかはRFSの項目に記載。デフォルトでは false 。 |
print |
オプション | 印刷クラスを生成する必要があるかどうかを示すブール値。デフォルトでは false 。 |
rtl v5.0.0-beta1追加 |
オプション | ユーティリティをRTL(右書き)に保持する必要があるかどうかを示すブール値。デフォルトでは true 。 |
APIの説明(API explained)
すべてのユーティリティ変数は、_utilities.scss
スタイルシート内の $utilities
変数に追加される。ユーティリティの各グループは以下のようになる:
設定例
$utilities: (
"opacity": (
property: opacity,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
以下を出力:
css.opacity-0 { opacity: 0; }
.opacity-25 { opacity: .25; }
.opacity-50 { opacity: .5; }
.opacity-75 { opacity: .75; }
.opacity-100 { opacity: 1; }
【設定】
- 新たにユーティリティクラスを作成する場合、
$utilities
変数に、"グループキー"
、property
、values
の設定を追加(.{property}-{value}
が作成される)
カスタム・クラスプレフィックス(Custom class prefix)
コンパイルされたCSSで使用されるクラスプレフィックスを変更するには、class
オプションを使用:
設定例
$utilities: (
"opacity": (
property: opacity,
class: o,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
出力:
css.o-0 { opacity: 0; }
.o-25 { opacity: .25; }
.o-50 { opacity: .5; }
.o-75 { opacity: .75; }
.o-100 { opacity: 1; }
【設定】
- 新たなユーティリティクラス名に接頭辞を設定する場合、
$utilities
変数に、class
オプションの設定を追加(.{class}-{value}
が作成される)
状態(States)v5.0.0-beta1追加
state
オプションを使用して、疑似クラスのバリエーションを生成。疑似クラスの例は、:hover
と :focus
。状態のリストが提供されると、その疑似クラスのクラス名が作成される。例えば、hoverの不透明度を変更するには、state: hover
を追加すると、コンパイルされたCSSに .opacity-hover:hoverr
が組み込まれる。
複数の疑似クラスが必要なら、状態のリストをスペースで区切って使用する: state: hover focus
設定例
$utilities: (
"opacity": (
property: opacity,
class: opacity,
state: hover,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
出力:
css.opacity-0-hover:hover { opacity: 0; }
.opacity-25-hover:hover { opacity: .25; }
.opacity-50-hover:hover { opacity: .5; }
.opacity-75-hover:hover { opacity: .75; }
.opacity-100-hover:hover { opacity: 1; }
レスポンシブ・ユーティリティ(Responsive utilities)
レスポンシブブール値を追加して、すべてのブレークポイントにわたってレスポンシブユーティリティ(.opacity-md-25
など)を生成。
設定例
$utilities: (
"opacity": (
property: opacity,
responsive: true,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
出力:
css.opacity-0 { opacity: 0; }
.opacity-25 { opacity: .25; }
.opacity-50 { opacity: .5; }
.opacity-75 { opacity: .75; }
.opacity-100 { opacity: 1; }
@media (min-width: 576px) {
.opacity-sm-0 { opacity: 0; }
.opacity-sm-25 { opacity: .25; }
.opacity-sm-50 { opacity: .5; }
.opacity-sm-75 { opacity: .75; }
.opacity-sm-100 { opacity: 1; }
}
@media (min-width: 768px) {
.opacity-md-0 { opacity: 0; }
.opacity-md-25 { opacity: .25; }
.opacity-md-50 { opacity: .5; }
.opacity-md-75 { opacity: .75; }
.opacity-md-100 { opacity: 1; }
}
@media (min-width: 992px) {
.opacity-lg-0 { opacity: 0; }
.opacity-lg-25 { opacity: .25; }
.opacity-lg-50 { opacity: .5; }
.opacity-lg-75 { opacity: .75; }
.opacity-lg-100 { opacity: 1; }
}
@media (min-width: 1200px) {
.opacity-xl-0 { opacity: 0; }
.opacity-xl-25 { opacity: .25; }
.opacity-xl-50 { opacity: .5; }
.opacity-xl-75 { opacity: .75; }
.opacity-xl-100 { opacity: 1; }
}
@media (min-width: 1400px) {
.opacity-xxl-0 { opacity: 0; }
.opacity-xxl-25 { opacity: .25; }
.opacity-xxl-50 { opacity: .5; }
.opacity-xxl-75 { opacity: .75; }
.opacity-xxl-100 { opacity: 1; }
}
【設定】
- ユーティリティクラスにレスポンシブ設定をする場合、
$utilities
変数に、responsive: true,
を追加(.{property}-{breakpoint}-{value}
が作成される){breakpoint}
(sm
(小),md
(中),lg
(大),xl
(特大),xxl
(超特大))は、Bootstrapのブレークポイントに準ずる
ユーティリティの変更(Changing utilities)
同じキーを使用して既存のユーティリティを上書き。例えば、追加のレスポンシブオーバーフローユーティリティクラスが必要な場合は、次のように実行可能:
設定例
$utilities: (
"overflow": (
responsive: true,
property: overflow,
values: visible hidden scroll auto,
),
);
出力:
css.overflow-visible {
overflow: visible;
}
.overflow-hidden {
overflow: hidden;
}
.overflow-scroll {
overflow: scroll;
}
.overflow-auto {
overflow: auto;
}
@media (min-width: 576px) {
.overflow-sm-visible {
overflow: visible;
}
.overflow-sm-hidden {
overflow: hidden;
}
.overflow-sm-scroll {
overflow: scroll;
}
.overflow-sm-auto {
overflow: auto;
}
}
@media (min-width: 768px) {
.overflow-md-visible {
overflow: visible;
}
.overflow-md-hidden {
overflow: hidden;
}
.overflow-md-scroll {
overflow: scroll;
}
.overflow-md-auto {
overflow: auto;
}
}
@media (min-width: 992px) {
.overflow-lg-visible {
overflow: visible;
}
.overflow-lg-hidden {
overflow: hidden;
}
.overflow-lg-scroll {
overflow: scroll;
}
.overflow-lg-auto {
overflow: auto;
}
}
@media (min-width: 1200px) {
.overflow-xl-visible {
overflow: visible;
}
.overflow-xl-hidden {
overflow: hidden;
}
.overflow-xl-scroll {
overflow: scroll;
}
.overflow-xl-auto {
overflow: auto;
}
@media (min-width: 1400px) {
.overflow-xxl-visible {
overflow: visible;
}
.overflow-xxl-hidden {
overflow: hidden;
}
.overflow-xxl-scroll {
overflow: scroll;
}
.overflow-xxl-auto {
overflow: auto;
}
}
【設定】
- 既存のユーティリティクラスの設定に独自の設定が上書き可能(同一のグループキーに設定すれば可能)
印刷ユーティリティ(Print utilities)
print
オプションを有効にすると、印刷用のユーティリティクラスも生成可能。これは、 @media print { ... }
メディアクエリ内でのみ適用される。
設定例
$utilities: (
"opacity": (
property: opacity,
class: o,
print: true,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
出力:
css.opacity-0 { opacity: 0; }
.opacity-25 { opacity: .25; }
.opacity-50 { opacity: .5; }
.opacity-75 { opacity: .75; }
.opacity-100 { opacity: 1; }
@media print {
.opacity-print-0 { opacity: 0; }
.opacity-print-25 { opacity: .25; }
.opacity-print-50 { opacity: .5; }
.opacity-print-75 { opacity: .75; }
.opacity-print-100 { opacity: 1; }
}
【設定】
- ユーティリティクラスに印刷時の設定を追加する場合、
$utilities
変数に、print: true,
を追加(.{class}-print-{value}
が作成される)
APIの使用(Using the API)v5.0.0-alpha3追加、v5.0.0-beta2変更
ユーティリティAPIの仕組みを理解したところで、独自のカスタムクラスを追加し、デフォルトのユーティリティを変更する方法を学習。
ユーティリティを追加(Add utilities)
新しいユーティリティは、map-merge
を使用してデフォルトの $utilities
マップに追加可能。必要なSassファイルと _utilities.scss
が最初にインポートされていることを確認してから、map-merge
を使用してユーティリティを追加。例えば、3つの値を持つレスポンシブ cursor
ユーティリティを追加する方法は以下のとおり。
設定例 緑背景がv5.0.0-beta2での変更箇所
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/utilities";
$utilities: map-merge(
$utilities,
(
"cursor": (
property: cursor,
class: cursor,
responsive: true,
values: auto pointer grab,
)
)
);
【変更履歴】
- 【v5.0.0-beta2】
@import "bootstrap/scss/functions";
,@import "bootstrap/scss/variables";
(インポートするSassファイル)を追加
ユーティリティを変更(Modify utilities)
map-get
関数と map-merge
関数を使用して、デフォルトの $utilities
マップの既存のユーティリティを変更。以下の例では、width
ユーティリティに値を追加。最初の map-merge
から始めて、変更するユーティリティを指定。そこから、map-get
を使用して入れ子になった "width"
マップをフェッチし、ユーティリティのオプションと値にアクセスして変更。
設定例 緑背景がv5.0.0-beta2での変更箇所
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/utilities";
$utilities: map-merge(
$utilities,
(
"width": map-merge(
map-get($utilities, "width"),
(
values: map-merge(
map-get(map-get($utilities, "width"), "values"),
(10: 10%),
),
),
),
)
);
【変更履歴】
- 【v5.0.0-beta2】
@import "bootstrap/scss/functions";
,@import "bootstrap/scss/variables";
(インポートするSassファイル)を追加
ユーティリティの名前を変更(Rename utilities)v5.0.0-beta2追加
v4ユーティリティがないとか別の命名規則に慣れているのなら、ユーティリティAPIを使用して、特定のユーティリティの結果のクラスが上書き可能。例えば、.ms-*
ユーティリティの名前を古い .ml-*
に変更:
設定例
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/utilities";
$utilities: map-merge(
$utilities, (
"margin-start": map-merge(
map-get($utilities, "margin-start"),
( class: ml ),
),
)
);
ユーティリティを削除(Remove utilities)
グループキーを null
に設定して、デフォルトのユーティリティをすべて削除。例えば、すべての width
ユーティリティを削除するには、$utilities map-merge
を作成し、その中に "width": null
を追加。
設定例 緑背景がv5.0.0-beta2での変更箇所
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/utilities";
$utilities: map-merge(
$utilities,
(
"width": null
)
);
【変更履歴】
- 【v5.0.0-beta2】
@import "bootstrap/scss/functions";
,@import "bootstrap/scss/variables";
(インポートするSassファイル)を追加
RTLのユーティリティを削除(Remove utility in RTL)v5.0.0-beta1追加
一部のエッジケースでは、アラビア語の改行など、RTLのスタイルが困難になる。従って、rtl
オプションを false
に設定することにより、出力時にRTLのユーティリティを削除可能。
設定例
$utilities: (
"word-wrap": (
property: word-wrap word-break,
class: text,
values: (break: break-word),
rtl: false
),
);
出力:
css/* rtl:begin:remove */
.text-break {
word-wrap: break-word !important;
word-break: break-word !important;
}
/* rtl:end:remove */
RTLCSS削除制御ディレクティブのおかげで、これはRTLに何も出力しない。
ページ移動
ページがありません次のページ
背景ユーティリティ