ユーティリティAPI(Utility API) v5.0.0新設
ユーティリティAPIは、ユーティリティクラスを生成するためのSassベースのツール。
※"v5.0.0"での変更はv5.0.0-alpha版、v5.0.0-beta版での変更も含みます。
※"v5.3.0"での変更はv5.3.0-alpha版での変更も含みます。
Bootstrapユーティリティは、ユーティリティAPIを使用して生成され、Sassを経由してユーティリティクラスのデフォルトセットの変更や拡張に使用できる。このユーティリティAPIは、さまざまなオプションを備えたクラスのファミリーを生成するための一連のSassマップと関数に基づく。Sassマップに慣れていない場合は、公式のSassドキュメントを参照。
scss/_utilities.scss
ファイルにある $utilities
マップにはすべてのBootstrapユーティリティが集約されており、カスタムした $utilities
マップがある場合は後からマージされる。ユーティリティマップには、以下のオプションを受け入れるユーティリティグループのキー付きリストが集約されている。
オプション名 | タイプ | デフォルト値 | 説明 |
---|---|---|---|
property |
必須 | – | プロパティの名前。これは文字列か文字列の配列(水平方向のパディングやマージンなどに必要)。 |
values |
必須 | – | クラス名を値と同じにしたくない場合は、値のリストかマップにできる。マップキーとして null が使用されている場合、クラス名の前に class は追加されない。 |
class |
オプション | null | 生成されたクラス名。キーを指定せず property が文字列の配列である場合、class 名はデフォルトで property 配列の最初の要素になる。キーを指定せず property が文字列の場合、values キーが class 名に使用される。 |
css-var v5.1.0追加 |
オプション | false |
CSSルールの代わりにCSS変数を生成するブール値。 |
css-variable-name v5.2.0追加 |
オプション | null | ルールセット内のCSS変数のカスタムのプレフィックスなしの名前。 |
local-vars v5.1.0追加 |
オプション | null | CSSルールに加えて生成するローカルCSS変数のマップ。 |
state v5.0.0-beta1追加 |
オプション | null | ユーティリティ用に生成する :hover や :focus などの疑似クラスバリアントのリスト。 |
responsive |
オプション | false |
レスポンシブクラスを生成する必要があるかどうかを示すブール値。 |
rfs |
オプション | false |
拡大縮小を可能にするための変数。これがどのように機能するかはRFSの項目に記載。 |
print |
オプション | false |
印刷クラスを生成する必要があるかどうかを示すブール値。 |
rtl v5.0.0-beta1追加 |
オプション | true |
ユーティリティをRTL(右書き)に保持する必要があるかどうかを示すブール値。 |
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}
が作成される)
プロパティ(Property)v5.1.0追加
すべてのユーティリティに必要なプロパティキーを設定する必要があり、有効なCSSプロパティが含まれている必要がある。このプロパティは、生成されたユーティリティのルールセットで使用される。クラスキーを省略するとデフォルトのクラス名としても機能。text-decoration
ユーティリティについて考察:
$utilities: (
"text-decoration": (
property: text-decoration,
values: none underline line-through
)
);
出力:
CSS.text-decoration-none { text-decoration: none !important; }
.text-decoration-underline { text-decoration: underline !important; }
.text-decoration-line-through { text-decoration: line-through !important; }
値(Values)v5.1.0追加
values
キーを使用して、生成されたクラス名とルールで指定された property
のどの値を使用するかを指定。リストかマップにすることができる(ユーティリティかSass変数で設定)。
text-decoration
ユーティリティのようにリストとして:
設定例
values: none underline line-through
opacity
ユーティリティのようにマップとして:
設定例
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
position
ユーティリティのようにリストかマップを設定するSass変数として:
設定例
values: $position-values
クラス(Class)v5.1.0「カスタム・クラスプレフィックス」から変更
コンパイルされたCSSで使用されるクラスプレフィックスを変更するには、class
オプションを使用。例えば、.opacity-*
から .o-*
に変更:
設定例
$utilities: (
"opacity": (
property: opacity,
class: o,
values: (
0: 0,
25: .25,
50: .5,
75: .75,
100: 1,
)
)
);
出力:
CSS.o-0 { opacity: 0 !important; }
.o-25 { opacity: .25 !important; }
.o-50 { opacity: .5 !important; }
.o-75 { opacity: .75 !important; }
.o-100 { opacity: 1 !important; }
class: null
の場合、values
キーごとにクラスを生成。v5.2.0追加
設定例
$utilities: (
"visibility": (
property: visibility,
class: null,
values: (
visible: visible,
invisible: hidden,
)
)
);
出力:
CSS.visible { visibility: visible !important; }
.invisible { visibility: hidden !important; }
【設定】
- 新たなユーティリティクラス名に接頭辞を設定する場合、
$utilities
変数に、class
オプションの設定を追加(.{class}-{values}
が作成される)
設定がない場合は、.{values}
が作成される
CSS変数ユーティリティ(CSS variable utilities)v5.1.0追加、v5.2.0オプション追加
css-var
ブール値オプションを true
に設定すると、APIは、通常の property: value
ルールの代わりに、指定されたセレクターのローカルCSS変数を生成。css-variable-name
オプションを追加して、クラス名とは異なるCSS変数名を設定。
.text-opacity-*
ユーティリティについて考察する。css-variable-name
オプションを追加すると、カスタムの出力が得られる。
設定例
$utilities: (
"text-opacity": (
css-var: true,
css-variable-name: text-alpha,
class: text-opacity,
values: (
25: .25,
50: .5,
75: .75,
100: 1
)
),
);
出力:
CSS.text-opacity-25 { --bs-text-alpha: .25; }
.text-opacity-50 { --bs-text-alpha: .5; }
.text-opacity-75 { --bs-text-alpha: .75; }
.text-opacity-100 { --bs-text-alpha: 1; }
【変更履歴】
- 【v5.2.0】
css-variable-name
オプションを追加して、出力されるCSS変数名の変更ができる
ローカルCSS変数(Local CSS variables)v5.1.0追加
local-vars
オプションを使用して、ユーティリティクラスのルールセット内でローカルCSS変数を生成するSassマップを指定。生成されたCSSルールでこれらのローカルCSS変数を使用するには、追加の作業が必要になる場合があるので注意。例として、.bg-*
ユーティリティについて考察:
$utilities: (
"background-color": (
property: background-color,
class: bg,
local-vars: (
"bg-opacity": 1
),
values: map-merge(
$utilities-bg-colors,
(
"transparent": transparent
)
)
)
);
出力:
CSS.bg-primary {
--bs-bg-opacity: 1;
background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;
}
状態(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 !important; }
.opacity-25-hover:hover { opacity: .25 !important; }
.opacity-50-hover:hover { opacity: .5 !important; }
.opacity-75-hover:hover { opacity: .75 !important; }
.opacity-100-hover:hover { opacity: 1 !important; }
レスポンシブ(Responsive)v5.1.0「レスポンシブ・ユーティリティ」から変更
レスポンシブブール値を追加して、すべてのブレークポイントにわたってレスポンシブユーティリティ(.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 !important; }
.opacity-50 { opacity: .5 !important; }
.opacity-75 { opacity: .75 !important; }
.opacity-100 { opacity: 1 !important; }
@media (min-width: 576px) {
.opacity-sm-0 { opacity: 0 !important; }
.opacity-sm-25 { opacity: .25 !important; }
.opacity-sm-50 { opacity: .5 !important; }
.opacity-sm-75 { opacity: .75 !important; }
.opacity-sm-100 { opacity: 1 !important; }
}
@media (min-width: 768px) {
.opacity-md-0 { opacity: 0 !important; }
.opacity-md-25 { opacity: .25 !important; }
.opacity-md-50 { opacity: .5 !important; }
.opacity-md-75 { opacity: .75 !important; }
.opacity-md-100 { opacity: 1 !important; }
}
@media (min-width: 992px) {
.opacity-lg-0 { opacity: 0 !important; }
.opacity-lg-25 { opacity: .25 !important; }
.opacity-lg-50 { opacity: .5 !important; }
.opacity-lg-75 { opacity: .75 !important; }
.opacity-lg-100 { opacity: 1 !important; }
}
@media (min-width: 1200px) {
.opacity-xl-0 { opacity: 0 !important; }
.opacity-xl-25 { opacity: .25 !important; }
.opacity-xl-50 { opacity: .5 !important; }
.opacity-xl-75 { opacity: .75 !important; }
.opacity-xl-100 { opacity: 1 !important; }
}
@media (min-width: 1400px) {
.opacity-xxl-0 { opacity: 0 !important; }
.opacity-xxl-25 { opacity: .25 !important; }
.opacity-xxl-50 { opacity: .5 !important; }
.opacity-xxl-75 { opacity: .75 !important; }
.opacity-xxl-100 { opacity: 1 !important; }
}
【設定】
- ユーティリティクラスにレスポンシブ設定をする場合、
$utilities
変数に、responsive: true,
を追加(.{property}-{breakpoint}-{value}
が作成される){breakpoint}
(sm
(小),md
(中),lg
(大),xl
(特大),xxl
(超特大))は、Bootstrapのブレークポイントに準ずる
印刷時(Print)v5.1.0「印刷ユーティリティ」から変更
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}
が作成される)
優先度(Importance)v5.0.2追加
APIによって生成されるすべてのユーティリティには、意図したとおりにコンポーネントと修飾子クラスを再定義するために !important
を組み込んでいる。scss/_variables.scss
内の $enable-important-utilities
変数(デフォルトは true
)を使用して、この設定をグローバルで切り替えられる。
APIの使用(Using the API)v5.0.0-alpha3追加、v5.0.0-beta2変更
ユーティリティAPIの仕組みを理解したところで、独自のカスタムクラスを追加し、デフォルトのユーティリティを変更する方法を学習。
ユーティリティを再定義(Override utilities)v5.1.0APIの説明の「ユーティリティの変更」から移動
同じキーを使用して、既存のユーティリティを再定義。例えば、追加のレスポンシブはみ出しユーティリティクラスが必要な場合は、次のように実行できる:
設定例
custom.scss$utilities: (
"overflow": (
responsive: true,
property: overflow,
values: visible hidden scroll auto,
),
);
ユーティリティを追加(Add utilities)v5.3.0設定変更
新しいユーティリティは、map-merge
を使用してデフォルトの $utilities
マップに追加できる。必要なSassファイルと _utilities.scss
が最初にインポートされていることを確認してから、map-merge
を使用してユーティリティを追加。例えば、3つの値を持つレスポンシブ cursor
ユーティリティを追加する方法は以下のとおり。
Bootstrap5.3.0の設定例 緑背景が5.2.0以降の変更箇所
custom.scss@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/variables-dark";
@import "bootstrap/scss/maps";
@import "bootstrap/scss/mixins";
@import "bootstrap/scss/utilities";
$utilities: map-merge(
$utilities,
(
"cursor": (
property: cursor,
class: cursor,
responsive: true,
values: auto pointer grab,
)
)
);
@import "bootstrap/scss/utilities/api";
【変更履歴】
- 【v5.0.0-beta2】
- インポートするSassファイルに
bootstrap/scss/functions
,bootstrap/scss/variables
を追加
- インポートするSassファイルに
- 【v5.2.0】
- インポートするSassファイルに
bootstrap/scss/maps
,bootstrap/scss/mixins
,bootstrap/scss/utilities/api
を追加
- インポートするSassファイルに
- 【v5.3.0】
- ダークモードを新設したので、インポートするSassファイルに
bootstrap/scss/variables-dark
を追加
- ダークモードを新設したので、インポートするSassファイルに
ユーティリティを変更(Modify utilities)v5.3.0設定変更
map-get
関数と map-merge
関数を使用して、デフォルトの $utilities
マップの既存のユーティリティを変更。以下の例では、width
ユーティリティに値を追加。最初の map-merge
から始めて、変更するユーティリティを指定。そこから、map-get
を使用して入れ子になった "width"
マップをフェッチし、ユーティリティのオプションと値にアクセスして変更。
Bootstrap5.3.0の設定例 緑背景が5.2.0以降の変更箇所
custom.scss@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/variables-dark";
@import "bootstrap/scss/maps";
@import "bootstrap/scss/mixins";
@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%),
),
),
),
)
);
@import "bootstrap/scss/utilities/api";
【変更履歴】
- 【v5.0.0-beta2】
- インポートするSassファイルに
bootstrap/scss/functions
,bootstrap/scss/variables
を追加
- インポートするSassファイルに
- 【v5.2.0】
- インポートするSassファイルに
bootstrap/scss/maps
,bootstrap/scss/mixins
,bootstrap/scss/utilities/api
を追加
- インポートするSassファイルに
- 【v5.3.0】
- ダークモードを新設したので、インポートするSassファイルに
bootstrap/scss/variables-dark
を追加
- ダークモードを新設したので、インポートするSassファイルに
レスポンシブを有効にする(Enable responsive)v5.0.2追加、v5.3.0設定変更
デフォルトで現在レスポンシブではない既存のユーティリティセットのレスポンシブクラスを有効にする。例えば、border
クラスをレスポンシブにするには:
Bootstrap5.3.0の設定例 緑背景が5.2.0以降の変更箇所
custom.scss@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/variables-dark";
@import "bootstrap/scss/maps";
@import "bootstrap/scss/mixins";
@import "bootstrap/scss/utilities";
$utilities: map-merge(
$utilities, (
"border": map-merge(
map-get($utilities, "border"),
( responsive: true ),
),
)
);
@import "bootstrap/scss/utilities/api";
これにより、ブレークポイントごとに .border
と .border-0
のレスポンシブのバリエーションが生成される。生成されたCSSは次のようになる:
CSS.border { ... }
.border-0 { ... }
@media (min-width: 576px) {
.border-sm { ... }
.border-sm-0 { ... }
}
@media (min-width: 768px) {
.border-md { ... }
.border-md-0 { ... }
}
@media (min-width: 992px) {
.border-lg { ... }
.border-lg-0 { ... }
}
@media (min-width: 1200px) {
.border-xl { ... }
.border-xl-0 { ... }
}
@media (min-width: 1400px) {
.border-xxl { ... }
.border-xxl-0 { ... }
}
ユーティリティの名前を変更(Rename utilities)v5.0.0-beta2追加、v5.3.0設定変更
v4のユーティリティがないとか別の命名規則に慣れているのなら、ユーティリティAPIを使用して、特定のユーティリティの結果のクラスが再定義できる。例えば、.ms-*
ユーティリティの名前を古い .ml-*
に変更:
Bootstrap5.3.0の設定例 緑背景が5.2.0以降の変更箇所
custom.scss@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/variables-dark";
@import "bootstrap/scss/maps";
@import "bootstrap/scss/mixins";
@import "bootstrap/scss/utilities";
$utilities: map-merge(
$utilities, (
"margin-start": map-merge(
map-get($utilities, "margin-start"),
( class: ml ),
),
)
);
@import "bootstrap/scss/utilities/api";
【変更履歴】
- 【v5.2.0】
- インポートするSassファイルに
bootstrap/scss/maps
,bootstrap/scss/mixins
,bootstrap/scss/utilities/api
を追加
- インポートするSassファイルに
- 【v5.3.0】
- ダークモードを新設したので、インポートするSassファイルに
bootstrap/scss/variables-dark
を追加
- ダークモードを新設したので、インポートするSassファイルに
ユーティリティを削除(Remove utilities)v5.3.0設定変更
map-remove()
Sass関数を使用してデフォルトのユーティリティを削除。
Bootstrap5.3.0の設定例 緑背景が5.3.0での変更箇所
custom.scss@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/variables-dark";
@import "bootstrap/scss/maps";
@import "bootstrap/scss/mixins";
@import "bootstrap/scss/utilities";
// カンマ区切りのリストで複数のユーティリティを削除
$utilities: map-remove($utilities, "width", "float");
@import "bootstrap/scss/utilities/api";
map-merge()
Sass関数を使用し、グループキーを null
に設定して、ユーティリティを削除することもできる。
Bootstrap5.3.0の設定例 緑背景が5.2.0以降の変更箇所
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/variables-dark";
@import "bootstrap/scss/maps";
@import "bootstrap/scss/mixins";
@import "bootstrap/scss/utilities";
$utilities: map-merge(
$utilities,
(
"width": null
)
);
@import "bootstrap/scss/utilities/api";
【変更履歴】
- 【v5.0.0-beta2】
- インポートするSassファイルに
bootstrap/scss/functions
,bootstrap/scss/variables
を追加
- インポートするSassファイルに
- 【v5.2.0】
map-remove()
Sass関数を使用する方法を追加map-merge()
Sass関数を使用する方法では、インポートするSassファイルにbootstrap/scss/maps
,bootstrap/scss/mixins
,bootstrap/scss/utilities/api
を追加
- 【v5.3.0】
- ダークモードを新設したので、インポートするSassファイルに
bootstrap/scss/variables-dark
を追加
- ダークモードを新設したので、インポートするSassファイルに
ユーティリティを一度に追加、削除、変更(Add, remove, modify)v5.2.0新設、v5.3.0設定変更
map-merge()
Sass関数を使用して、複数のユーティリティを一度に追加、削除、変更できる。前の例を1つの大きなマップに組み合わせる方法は次のとおり。
Bootstrap5.3.0の設定例 緑背景が5.3.0での変更箇所
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/variables-dark";
@import "bootstrap/scss/maps";
@import "bootstrap/scss/mixins";
@import "bootstrap/scss/utilities";
$utilities: map-merge(
$utilities,
(
// `width`ユーティリティを削除
"width": null,
// 既存のユーティリティをレスポンシブにする
"border": map-merge(
map-get($utilities, "border"),
( responsive: true ),
),
// 新しいユーティリティを追加
"cursor": (
property: cursor,
class: cursor,
responsive: true,
values: auto pointer grab,
)
)
);
@import "bootstrap/scss/utilities/api";
【変更履歴】
- 【v5.3.0】
- ダークモードを新設したので、インポートするSassファイルに
bootstrap/scss/variables-dark
を追加
- ダークモードを新設したので、インポートする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時に何も出力しない。
ページ移動
ページがありません