LoginSignup
1
0

docker+vite+vue3環境にBootstrapをセットアップ

Last updated at Posted at 2024-03-04

docker+vite+vue3環境の構築

まず、ここを参考にdockerで構築してください。
docker compose upで初期ページが起動するところまで。

Bootstrapのインストール

以下を参考にしますが、書いてある通りだとうまくいかない。
npmではなくyarnでセットアップしていきます。

  • Bootstrap本体とpopperjs
docker compose exec frontend yarn add bootstrap @popperjs/core
  • sass
docker compose exec frontend yarn add --dev sass

+ scssファイルを作成
```sh:
docker compose exec frontend touch src/assets/styles.scss
  • scssファイルを編集
./assets/styles.scss
// Import all of Bootstrap's CSS
@import "bootstrap/scss/bootstrap"

動作確認

  • 確認用のページBootstrap.vueを作成
docker compose exec frontend touch Bootstrap.vue
  • Bootstrap.vueを以下のように編集
Bootstrap.vue
<template>
    <div class="container py-4 px-3 mx-auto">
      <h1>Hello, Bootstrap and Vite!</h1>
      <button class="btn btn-primary">Primary button</button>
      <h1>
        <i class="bi bi-0-circle" ></i>
      <i class="bi bi-facebook"></i>
      </h1>
    </div>
</template>
  • 確認のためmain.jsでBootstrap.vueを読み込むように変更。
main.js
import './assets/main.css'

import { createApp } from 'vue'
import { createPinia } from 'pinia'

- import App from './App.vue'
+ import App from './Bootstrap.vue'
import router from './router'

const app = createApp(App)

app.use(createPinia())
app.use(router)

app.mount('#app')
  • ブラウザで確認
    まだscssを読み込んでいないので、bootsrapぽさはありません。

scssのインポート

  • main.jsにscssをインポートします。
main.js
import './assets/main.css'
+ import './assets/styles.scss'

import { createApp } from 'vue'
import { createPinia } from 'pinia'

import App from './App.vue'
import router from './router'

const app = createApp(App)

app.use(createPinia())
app.use(router)

app.mount('#app')
  • Bootstrapらしくなりました

Navbarの確認

  • Bootstrap.vueにNavbarを追加
Bootstrap.vue
<template>
  <nav class="navbar navbar-expand-lg bg-body-tertiary">
    <div class="container-fluid">
      <a class="navbar-brand" href="#">Navbar</a>
      <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
      <div class="collapse navbar-collapse" id="navbarSupportedContent">
        <ul class="navbar-nav me-auto mb-2 mb-lg-0">
          <li class="nav-item">
            <a class="nav-link active" aria-current="page" href="#">Home</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Link</a>
          </li>
          <li class="nav-item dropdown">
            <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
              Dropdown
            </a>
            <ul class="dropdown-menu">
              <li><a class="dropdown-item" href="#">Action</a></li>
              <li><a class="dropdown-item" href="#">Another action</a></li>
              <li><hr class="dropdown-divider"></li>
              <li><a class="dropdown-item" href="#">Something else here</a></li>
            </ul>
          </li>
          <li class="nav-item">
            <a class="nav-link disabled" aria-disabled="true">Disabled</a>
          </li>
        </ul>
        <form class="d-flex" role="search">
          <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
          <button class="btn btn-outline-success" type="submit">Search</button>
        </form>
      </div>
    </div>
  </nav>
  <div class="container py-4 px-3 mx-auto">
    <h1>Hello, Bootstrap and Vite!</h1>
    <button class="btn btn-primary">Primary button</button>
    <h1>
      <i class="bi bi-0-circle" ></i>
    <i class="bi bi-facebook"></i>
    </h1>
  </div>
</template>
  • Navbarがつきましたが、BootstrapJSがまだ読み込まれていないのでDropdownが効いていません。
  • BootstrapJSの有効化
    main.jsに追加
main.js
import './assets/main.css'
import './assets/styles.scss'

import { createApp } from 'vue'
import { createPinia } from 'pinia'

import App from './App.vue'
import router from './router'

+ // Import all of Bootstrap's JS
+ import * as bootstrap from 'bootstrap'

const app = createApp(App)

app.use(createPinia())
app.use(router)

app.mount('#app')
  • ドロップダウンも有効になりました

Bootstrap Iconsのインストール

ついでなので、Bootstrap Iconsもインストールしてみましょう。

  • インストール
docker compose exec frontend yarn add bootstrap-icons
  • main.jsに読み込み
main.js
import './assets/main.css'
import './assets/styles.scss'

import { createApp } from 'vue'
import { createPinia } from 'pinia'

import App from './App.vue'
import router from './router'

// Import all of Bootstrap's JS
import * as bootstrap from 'bootstrap'

+ // Import Bootstrap-Icons
+ import 'bootstrap-icons/font/bootstrap-icons.css'

const app = createApp(App)

app.use(createPinia())
app.use(router)

app.mount('#app')
  • Bootstrap Iconは以下のように使用します
<i class="bi-alarm" style="font-size: 2rem; color: cornflowerblue;"></i>
  • 確認
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0