Bootstrap

Bootstrapとは

Bootstrap は、あらかじめデザインされたUI部品(ボタン・カード・モーダル・ナビゲーション)とグリッドシステムをまとめたCSSフレームワークです。クラス名を当てるだけで、CSSをほとんど書かずに整った画面が組めます。

<div class="card">
  <div class="card-body">
    <h5 class="card-title">在庫アラート</h5>
    <button class="btn btn-primary">確認</button>
  </div>
</div>

btn btn-primary のように部品の名前を指定するのが特徴です。何が出るかは名前を見れば分かり、デザインの判断は Bootstrap 側が済ませています。

Tailwind CSSとの対比

同じ「CSSを書かずに組む」でも、[[Tailwind CSS]] とは考え方が逆向きです。

BootstrapTailwind CSS
クラスの単位部品(card・btn)性質(p-4・rounded・bg-blue-500)
見た目の既定完成済みのデザインが付いてくるデザインは自分で組み立てる
早さの出どころ部品がそのまま使える命名やファイル往復が要らない
独自デザイン上書きが必要で、量が増えると衝突する最初から自由

「Bootstrapらしい見た目」で構わないなら Bootstrap が速いです。管理画面・社内ツール・プロトタイプのように、独自性より速度が要る場面に向きます。逆にデザインを作り込むほど上書きが増え、Bootstrap の既定と自分のCSSが競り合う状態になります。そこまで行くなら最初から Tailwind を選ぶほうが素直です。

グリッドシステム

12分割を基本とし、画面幅ごとに何列分を占めるかをクラスで指定します。

<div class="row">
  <div class="col-12 col-md-8">本文</div>
  <div class="col-12 col-md-4">サイドバー</div>
</div>

col-12 は狭い画面で全幅、col-md-8 は中程度以上の幅で12分割中8列という意味です。[[レスポンシブデザイン]] のブレークポイントがクラス名に埋め込まれており、メディアクエリを書かずに出し分けられます。内部の仕組みは [[FlexboxとGrid]] で、Bootstrap はその上に命名規則を被せたものと捉えると理解が早いです。

カスタマイズ

見た目の調整は、完成後のCSSを上書きするのではなく [[CSSプリプロセッサ(Sass)]] の変数を差し替えてビルドし直すのが正攻法です。

$primary: #2563eb;      // 既定の色を差し替える
@import 'bootstrap/scss/bootstrap';

上書き方式だと詳細度の勝負になり、!important が増えていきます。変数から作り直せば出力そのものが変わるため、衝突が起きません。使う部品だけを個別に読み込めば、出力サイズも削れます。

初学者向けポイント

  • モーダルやドロップダウンなど動きのある部品はJavaScriptも必要です。CSSだけ読み込んで「開かない」となるのはよくある詰まりどころです
  • クラス名の意味を都度調べるより、使う部品のページを開いたまま写すほうが速く進みます
  • [[React]] などと組み合わせるときは、DOMを直接操作するBootstrapのJSと競合することがあります。フレームワーク向けに作り直された部品ライブラリを使うのが安全です

関連技術とのつながり

  • [[CSS]] — Bootstrap が生成しているものの正体
  • [[Tailwind CSS]] — 部品単位か性質単位かで対照的な、同じ目的のフレームワーク
  • [[CSSプリプロセッサ(Sass)]] — 変数を差し替えてビルドし直すのが正攻法のカスタマイズ
  • [[レスポンシブデザイン]] — ブレークポイントがクラス名に埋め込まれている
  • [[FlexboxとGrid]] — グリッドシステムの内部で使われている仕組み
Q: Bootstrapのクラス指定の考え方はどれ?
- [x] `btn` や `card` のように部品の名前を指定する
- [ ] `p-4` や `bg-blue-500` のように性質を積み上げる
- [ ] 要素ごとにインラインスタイルを書く
解説: 部品単位のクラスを当てます。性質を積み上げるTailwind CSSとは逆向きの考え方です。

Q: `col-12 col-md-8` の意味はどれ?
- [ ] 常に12列中8列を占める
- [x] 狭い画面では全幅、中程度以上の幅では12分割中8列を占める
- [ ] 12個の要素を8列に並べる
解説: ブレークポイントがクラス名に含まれており、メディアクエリを書かずに幅ごとの出し分けができます。

Q: Bootstrapの見た目を変えるときの正攻法はどれ?
- [ ] 生成済みCSSを `!important` で上書きする
- [x] Sassの変数を差し替えてビルドし直す
- [ ] クラス名を自分のものに書き換える
解説: 上書きは詳細度の勝負になり衝突が増えます。変数から作り直せば出力そのものが変わります。