Skip to main content Skip to docs navigation

はじめに

Get started with Bootstrap

世界で最も人気のあるフレームワークBootstrapで始めましょう。CDNとテンプレートを使ってモバイルファーストなサイトを構築できます。

すぐに始める

BootstrapのプロダクションレディなCSSとJavaScriptをCDN経由で取り込むことで、ビルドステップを必要とせず、すぐに始められます。Bootstrap CodePenのデモをご覧ください。


  1. プロジェクトの最上位フォルダにindex.htmlファイルを新規作成します。 モバイルデバイスでの適切なレスポンシブ動作のために<meta name="viewport">タグも含めてください。

    <!doctype html>
    <html lang="en">
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Bootstrap demo</title>
      </head>
      <body>
        <h1>Hello, world!</h1>
      </body>
    </html>
    
  2. BootstrapのCSSとJSを入れます。 CSSのための<link>タグを<head>内に、JavaScriptバンドル(ドロップダウン、ポッパー、ツールチップを配置するPopperを含む)のための<script>タグを</body>を閉じる前に配置します。CDNリンクについて詳しくはこちら。

    <!doctype html>
    <html lang="en">
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Bootstrap demo</title>
        <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
      </head>
      <body>
        <h1>Hello, world!</h1>
        <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
      </body>
    </html>
    

また、Popperと私たちのJSを別々に含めることも可能です。ドロップダウン、ポップオーバー、ツールチップを使う予定がない場合は、Popperを含めないことで何キロバイトか節約することができます。

<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js" integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-fbbOQedDUMZZ5KreZpsbe1LCZPVmfTnH7ois6mU1QK+m14rQ1l2bGBq41eYeM/fS" crossorigin="anonymous"></script>
  1. Hello, world! ブラウザでページを開いてBootstrapが適用されたページを確認してみましょう。これで自分だけのレイアウトを作成し、数十個のコンポーネントを追加して公式サンプルを活用してBootstrapでビルドを始めることができます。

CDNリンク

参考までに、当社の主要なCDNリンクはこちらです。

Description URL
CSS https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css
JS https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js

また、CDNを利用して、コンテンツページに記載されている追加ビルドを取得することができます。

次のステップに進む

JSコンポーネント

どのコンポーネントがJavaScriptやPopperを必要とするのか気になりますか? 下記のコンポーネントリンクを押して確認してみてください。一般的なページ構造がよくわからない場合は、サンプルページテンプレートをご覧ください。

JavaScriptを必要とするコンポーネントを表示する
  • アラートを閉じる
  • 状態を切り替えるためのボタン、チェックボックス/ラジオ機能
  • カルーセルのすべてのスライド動作、制御およびインジケータ
  • コンテンツの可視性の折りたたみ切り替え
  • ドロップダウンの表示と位置 (も、ポッパーが必要)
  • モーダルの表示、位置、スクロールの動作
  • ナビゲーションバーとオフキャンバスでの反応型動作を実装するための折りたたみプラグインの拡張機能
  • コンテンツペインを切り替えられるTabプラグインを搭載したナビ
  • 表示、位置決め、スクロール動作のためのオフキャンバス
  • スクロール動作とナビゲーション更新のためのスクロールスパイ
  • トーストを表示・閉じる
  • ツールチップとポップオーバーによる表示と位置 (も、ポッパーが必要)

重要なグローバル

Bootstrapは、使用する際に注意しなければならない重要なグローバルスタイルと設定をいくつか採用しており、そのすべてがクロスブラウザスタイルのnormalizationを目的としています。早速、見ていきましょう。

HTML5 doctype

Bootstrapは、HTML5 doctypeの使用を必要とします。これを使用しないと、不完全なスタイルで表示されてしまいますが、これを含めることで大きな問題は発生しません。

<!doctype html>
<html lang="en">
  ...
</html>

レスポンシブなmetaタグ

Bootstrapは、mobile firstで開発されています。これは、最初にモバイルデバイス用にコードを最適化し、次にCSSメディアクエリを使用して必要に応じてコンポーネントをスケールアップする戦略です。すべてのデバイスに対して適切なレンダリングとタッチズームを保証するために、レスポンシブビューポートメタタグ<head>に追加してください。

<meta name="viewport" content="width=device-width, initial-scale=1">

すぐに始めるで、その実例を見ることができます。

Box-sizing

CSSでのサイズ調整をよりわかりやすくするために、グローバルなbox-sizingの値をcontent-boxからborder-boxに切り替えています。これにより、paddingが要素の最終的な幅の計算に影響を与えないようになりますが、Google MapsやGoogle Custom Search Engineなどの一部のサードパーティ製ソフトウェアで問題が発生する可能性があります。

上書きする必要がある場合は。次を使用してください:

.selector-for-some-widget {
  box-sizing: content-box;
}

上記のスニペットでは、::before::afterで生成されたコンテンツを含むネストされた要素は、.selector-for-some-widgetに対して指定されたbox-sizingを継承します。

ボックスモデルとサイジングの詳細についてはCSS Tricksをご覧ください。

Reboot

ブラウザ間のレンダリングを改善するために、Rebootを使用してブラウザとデバイス間の不一致を修正し、一般的なHTML要素をもう少し慎重にリセットすることができます。

コミュニティ

Bootstrapの開発に関する最新情報を入手し、これらの有用なリソースを利用してコミュニティに働きかけましょう。

  • Bootstrap公式ブログを購読。
  • GitHub Discussionsで質問したり、探したりしてください。
  • 他のBootstrapユーザーとIRCで会話してみましょう。irc.freenode.netサーバーの##bootstrapチャンネルで行います。
  • 実装方法についてのヘルプはStack Overflow(タグはbootstrap-5)で受けることができます。
  • 開発者は、Bootstrapの機能を変更または追加するパッケージをnpmまたは同様の配信メカニズムで配布する場合、発見性を高めるためにキーワードbootstrapを使用する必要があります。

Twitterで@getbootstrapをフォローすれば、最新のゴシップや素晴らしいミュージックビデオを見ることができます。

` const jsSnippetContent = jsSnippet ? '\/\/ NOTICE!!! Initially embedded in our docs this JavaScript\n\/\/ file contains elements that can help you create reproducible\n\/\/ use cases in StackBlitz for instance\.\n\/\/ In a real project please adapt this content to your needs\.\n\/\/ \u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\u002b\n\n\/\*!\n \* JavaScript for Bootstrap\u0027s docs \(https:\/\/getbootstrap\.com\/\)\n \* Copyright 2011\-2023 The Bootstrap Authors\n \* Licensed under the Creative Commons Attribution 3\.0 Unported License\.\n \* For details, see https:\/\/creativecommons\.org\/licenses\/by\/3\.0\/\.\n \*\/\n\n\/\* global bootstrap: false \*\/\n\n\(\(\) =\u003e \{\n \u0027use strict\u0027\n\n \/\/ \-\-\-\-\-\-\-\-\n \/\/ Tooltips\n \/\/ \-\-\-\-\-\-\-\-\n \/\/ Instantiate all tooltips in a docs or StackBlitz\n document\.querySelectorAll\(\u0027\[data\-bs\-toggle=\u0022tooltip\u0022\]\u0027\)\n \.forEach\(tooltip =\u003e \{\n new bootstrap\.Tooltip\(tooltip\)\n \}\)\n\n \/\/ \-\-\-\-\-\-\-\-\n \/\/ Popovers\n \/\/ \-\-\-\-\-\-\-\-\n \/\/ Instantiate all popovers in docs or StackBlitz\n document\.querySelectorAll\(\u0027\[data\-bs\-toggle=\u0022popover\u0022\]\u0027\)\n \.forEach\(popover =\u003e \{\n new bootstrap\.Popover\(popover\)\n \}\)\n\n \/\/ \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\n \/\/ Toasts\n \/\/ \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\n \/\/ Used by \u0027Placement\u0027 example in docs or StackBlitz\n const toastPlacement = document\.getElementById\(\u0027toastPlacement\u0027\)\n if \(toastPlacement\) \{\n document\.getElementById\(\u0027selectToastPlacement\u0027\)\.addEventListener\(\u0027change\u0027, function \(\) \{\n if \(!toastPlacement\.dataset\.originalClass\) \{\n toastPlacement\.dataset\.originalClass = toastPlacement\.className\n \}\n\n toastPlacement\.className = `\$\{toastPlacement\.dataset\.originalClass\} \$\{this\.value\}`\n \}\)\n \}\n\n \/\/ Instantiate all toasts in docs pages only\n document\.querySelectorAll\(\u0027\.bd\-example \.toast\u0027\)\n \.forEach\(toastNode =\u003e \{\n const toast = new bootstrap\.Toast\(toastNode, \{\n autohide: false\n \}\)\n\n toast\.show\(\)\n \}\)\n\n \/\/ Instantiate all toasts in docs pages only\n \/\/ js\-docs\-start live\-toast\n const toastTrigger = document\.getElementById\(\u0027liveToastBtn\u0027\)\n const toastLiveExample = document\.getElementById\(\u0027liveToast\u0027\)\n\n if \(toastTrigger\) \{\n const toastBootstrap = bootstrap\.Toast\.getOrCreateInstance\(toastLiveExample\)\n toastTrigger\.addEventListener\(\u0027click\u0027, \(\) =\u003e \{\n toastBootstrap\.show\(\)\n \}\)\n \}\n \/\/ js\-docs\-end live\-toast\n\n \/\/ \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\n \/\/ Alerts\n \/\/ \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\n \/\/ Used in \u0027Show live alert\u0027 example in docs or StackBlitz\n\n \/\/ js\-docs\-start live\-alert\n const alertPlaceholder = document\.getElementById\(\u0027liveAlertPlaceholder\u0027\)\n const appendAlert = \(message, type\) =\u003e \{\n const wrapper = document\.createElement\(\u0027div\u0027\)\n wrapper\.innerHTML = \[\n `\u003cdiv class=\u0022alert alert\-\$\{type\} alert\-dismissible\u0022 role=\u0022alert\u0022\u003e`,\n ` \u003cdiv\u003e\$\{message\}\u003c\/div\u003e`,\n \u0027 \u003cbutton type=\u0022button\u0022 class=\u0022btn\-close\u0022 data\-bs\-dismiss=\u0022alert\u0022 aria\-label=\u0022Close\u0022\u003e\u003c\/button\u003e\u0027,\n \u0027\u003c\/div\u003e\u0027\n \]\.join\(\u0027\u0027\)\n\n alertPlaceholder\.append\(wrapper\)\n \}\n\n const alertTrigger = document\.getElementById\(\u0027liveAlertBtn\u0027\)\n if \(alertTrigger\) \{\n alertTrigger\.addEventListener\(\u0027click\u0027, \(\) =\u003e \{\n appendAlert\(\u0027Nice, you triggered this alert message!\u0027, \u0027success\u0027\)\n \}\)\n \}\n \/\/ js\-docs\-end live\-alert\n\n \/\/ \-\-\-\-\-\-\-\-\n \/\/ Carousels\n \/\/ \-\-\-\-\-\-\-\-\n \/\/ Instantiate all non\-autoplaying carousels in docs or StackBlitz\n document\.querySelectorAll\(\u0027\.carousel:not\(\[data\-bs\-ride=\u0022carousel\u0022\]\)\u0027\)\n \.forEach\(carousel =\u003e \{\n bootstrap\.Carousel\.getOrCreateInstance\(carousel\)\n \}\)\n\n \/\/ \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\n \/\/ Checks \u0026 Radios\n \/\/ \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\n \/\/ Indeterminate checkbox example in docs and StackBlitz\n document\.querySelectorAll\(\u0027\.bd\-example\-indeterminate \[type=\u0022checkbox\u0022\]\u0027\)\n \.forEach\(checkbox =\u003e \{\n if \(checkbox\.id\.includes\(\u0027Indeterminate\u0027\)\) \{\n checkbox\.indeterminate = true\n \}\n \}\)\n\n \/\/ \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\n \/\/ Links\n \/\/ \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\n \/\/ Disable empty links in docs examples only\n document\.querySelectorAll\(\u0027\.bd\-content \[href=\u0022#\u0022\]\u0027\)\n \.forEach\(link =\u003e \{\n link\.addEventListener\(\u0027click\u0027, event =\u003e \{\n event\.preventDefault\(\)\n \}\)\n \}\)\n\n \/\/ \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\n \/\/ Modal\n \/\/ \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\n \/\/ Modal \u0027Varying modal content\u0027 example in docs and StackBlitz\n \/\/ js\-docs\-start varying\-modal\-content\n const exampleModal = document\.getElementById\(\u0027exampleModal\u0027\)\n if \(exampleModal\) \{\n exampleModal\.addEventListener\(\u0027show\.bs\.modal\u0027, event =\u003e \{\n \/\/ Button that triggered the modal\n const button = event\.relatedTarget\n \/\/ Extract info from data\-bs\-\* attributes\n const recipient = button\.getAttribute\(\u0027data\-bs\-whatever\u0027\)\n \/\/ If necessary, you could initiate an Ajax request here\n \/\/ and then do the updating in a callback\.\n\n \/\/ Update the modal\u0027s content\.\n const modalTitle = exampleModal\.querySelector\(\u0027\.modal\-title\u0027\)\n const modalBodyInput = exampleModal\.querySelector\(\u0027\.modal\-body input\u0027\)\n\n modalTitle\.textContent = `New message to \$\{recipient\}`\n modalBodyInput\.value = recipient\n \}\)\n \}\n \/\/ js\-docs\-end varying\-modal\-content\n\n \/\/ \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\n \/\/ Offcanvas\n \/\/ \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\n \/\/ \u0027Offcanvas components\u0027 example in docs only\n const myOffcanvas = document\.querySelectorAll\(\u0027\.bd\-example\-offcanvas \.offcanvas\u0027\)\n if \(myOffcanvas\) \{\n myOffcanvas\.forEach\(offcanvas =\u003e \{\n offcanvas\.addEventListener\(\u0027show\.bs\.offcanvas\u0027, event =\u003e \{\n event\.preventDefault\(\)\n \}, false\)\n \}\)\n \}\n\}\)\(\)\n' : null const project = { files: { 'index.html': markup, 'index.js': jsSnippetContent }, title: 'Bootstrap Example', description: `Official example from ${window.location.href}`, template: jsSnippet ? 'javascript' : 'html', tags: ['bootstrap'] } StackBlitzSDK.openProject(project, { openFile: 'index.html' }) }