Using Bootstrap CSS & JS ¶
This article explains how to install and integrate the Bootstrap CSS framework
in your Symfony application using Webpack Encore.
First, to be able to customize things further, we'll install bootstrap
:
1 2 3 4 5 |
# if you use the Yarn package manager
$ yarn add bootstrap --dev
# if you use the npm package manager
$ npm install bootstrap --save-dev
|
Importing Bootstrap Styles ¶
Now that bootstrap
lives in your node_modules/
directory, you can
import it from any Sass or JavaScript file. For example, if you already have
a global.scss
file, import it from there:
1 2 3 4 5 6 7 |
// assets/styles/global.scss
// customize some Bootstrap variables
$primary: darken(#428bca, 20%);
// the ~ allows you to reference things in node_modules
@import "~bootstrap/scss/bootstrap";
|
That's it! This imports the node_modules/bootstrap/scss/bootstrap.scss
file into global.scss
. You can even customize the Bootstrap variables first!
Tip
If you don't need all of Bootstrap's features, you can include specific files
in the bootstrap
directory instead - e.g. ~bootstrap/scss/alert
.
Importing Bootstrap JavaScript ¶
First, install the JavaScript dependencies required by the Bootstrap version used in your application:
1 2 3 4 5 6 7 |
# if you use the Yarn package manager
# (jQuery is only required in versions prior to Bootstrap 5)
$ yarn add jquery @popperjs/core --dev
# if you use the npm package manager
# (jQuery is only required in versions prior to Bootstrap 5)
$ npm install jquery @popperjs/core --save-dev
|
Now, require bootstrap from any of your JavaScript files:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// app.js
const $ = require('jquery');
// this "modifies" the jquery module: adding behavior to it
// the bootstrap module doesn't export/return anything
require('bootstrap');
// or you can include specific pieces
// require('bootstrap/js/dist/tooltip');
// require('bootstrap/js/dist/popover');
$(document).ready(function() {
$('[data-toggle="popover"]').popover();
});
|
Using Bootstrap with Turbo ¶
If you are using bootstrap with Turbo Drive, to allow your JavaScript to load on each page change,
wrap the initialization in a turbo:load
event listener:
1 2 3 4 5 6 7 8 9 10 |
// app.js
// this waits for Turbo Drive to load
document.addEventListener('turbo:load', function (e) {
// this enables bootstrap tooltips globally
let tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
let tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new Tooltip(tooltipTriggerEl)
});
});
|
Using other Bootstrap / jQuery Plugins ¶
If you need to use jQuery plugins that work well with jQuery, you may need to use Encore's autoProvidejQuery() method so that these plugins know where to find jQuery. Then, you can include the needed JavaScript and CSS like normal:
1 2 3 4 5 6 7 |
// ...
// require the JavaScript
require('bootstrap-star-rating');
// require 2 CSS files needed
require('bootstrap-star-rating/css/star-rating.css');
require('bootstrap-star-rating/themes/krajee-svg/theme.css');
|