メインコンテンツへスキップ

ユーティリティAPI(Utility API) v5.0.0-alpha1新設

ユーティリティAPIは、ユーティリティクラスを生成するためのSassベースのツール。

目次

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 変数に、"グループキー"propertyvalues の設定を追加(.{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} が作成される)

ユーティリティの変更(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 オプションを有効にすると、印刷用のユーティリティクラスも生成可能。これは、 @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に何も出力しない。