ユーティリティ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-varv5.1.0追加 | オプション | false | CSSルールの代わりにCSS変数を生成するブール値。 | 
| css-variable-namev5.2.0追加 | オプション | null | ルールセット内のCSS変数のカスタムのプレフィックスなしの名前。 | 
| local-varsv5.1.0追加 | オプション | null | CSSルールに加えて生成するローカルCSS変数のマップ。 | 
| statev5.0.0-beta1追加 | オプション | null | ユーティリティ用に生成する :hoverや:focusなどの疑似クラスバリアントのリスト。 | 
| responsive | オプション | false | レスポンシブクラスを生成する必要があるかどうかを示すブール値。 | 
| rfs | オプション | false | 拡大縮小を可能にするための変数。これがどのように機能するかはRFSの項目に記載。 | 
| print | オプション | false | 印刷クラスを生成する必要があるかどうかを示すブール値。 | 
| rtlv5.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-throughopacity ユーティリティのようにマップとして:
設定例
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時に何も出力しない。
ページ移動
ページがありません