dev-resources.site
for different kinds of informations.
Fix Bootstrap 5.3 modal's rootElement
Published at
11/29/2024
Categories
bootstrap
javascript
Author
andrewelans
Author
11 person written this
andrewelans
open
When placing a Bootstrap 5.3 modal inside a container other than body
, bootstrap's <div class="modal-backdrop fade show"></div>
, that is a dark half-transparent layer under modal
, is always appended to body
instead of the specified container, giving wrong behavior as explained here or here.
Backdrop's source code has this part:
const Default = {
className: 'modal-backdrop',
clickCallback: null,
isAnimated: false,
isVisible: true, // if false, we use the backdrop helper without adding any element to the dom
rootElement: 'body' // give the choice to place backdrop under different elements
}
However there is no mechanism provided to specify rootElement
in the bootstrap options.
I fixed as follows in bootstrap.bundle.js
version v5.3.3
- Find
class Backdrop extends Config
, there_configAfterMerge(config)
- Replace
config.rootElement = ...
withconfig.rootElement = getElement(config.rootElement) || document.body;
with will fallback tobody
if rootElement is not found, ie. null returned from getElement():
_configAfterMerge(config) {
// use getElement() with the default "body" to get a fresh Element on each instantiation
config.rootElement = getElement(config.rootElement) || document.body;
return config;
}
- Find
class Modal extends BaseComponent
, there_initializeBackDrop()
- add after
isAnimated: this._isAnimated()
a new propertyrootElement: this._config.rootElement
:
_initializeBackDrop() {
return new Backdrop({
isVisible: Boolean(this._config.backdrop),
// 'static' option will be translated to true, and booleans will keep their value,
isAnimated: this._isAnimated(),
rootElement: this._config.rootElement
});
}
When initializing your bootstrap with new bootstrap
add rootElement: <your container: HTMLElement as object or string selector>
, for example:
const myModal = new bootstrap.Modal(
document.getElementById('myModal')
, {
backdrop: "static",
rootElement: '#your-div'
}
)
myModal.show()
Here's my usage in SPA.
// I have a dynamic modal in my SPA, so I'm rendering a modal
// inside a DocumentFragment first and save this modal object
// in a variable so that I can call modal's methods after, like close()
const VALUES = {
modal: {
id: 'my-modal',
obj: null
}
}
const fragment = document.createRange().createContextualFragment(
`<div class="modal fade" id="my-modal" tabindex="-1">
...
</div>`
)
const rootElement = document.getElementById('my-container');
VALUES.modal.obj = new bootstrap.Modal(
fragment.getElementById('my-modal')
, {
backdrop: "static",
rootElement
}
)
rootElement.append(fragment)
VALUES.modal.obj.show()
bootstrap Article's
30 articles in total
JSON Visual Edit
read article
Best Card Styling
read article
Tailwind CSS vs Bootstrap: Which one of these is going to last in the future?
read article
How to Compile and Use fw_printenv in the OKMX6UL Series Linux 4.1.15 System
read article
Learnings From Startup to Multimillion-Dollar EdTech Empire
read article
Top 15+ Free & Open-source React Admin Dashboard Templates with GitHub Links for 2025
read article
What are the best UI libraries stack for bootstrap 5 or react bootstrap for single project?
read article
A Beginnerโs Guide to Getting Started with Front-End Frameworks
read article
Bootstrap: Creating Menus, Navbars, and Modals in Web Development
read article
Bootstrap vs. Pure CSS Grid: A Comparison Guide
read article
bootstrap
read article
Getting Started with Bootstrap in React: A Complete Guide
read article
Organize your layout by using <div> elements and Bootstrap ๐คน
read article
Case Study of a Tech Education Startup of $15 Million Revenue
read article
Web-Based Medical Prescription Management System
read article
๐ Bootstrap: The Essential Front-End Framework ๐ป
read article
Top 10 CSS Frameworks for Front-End Developers in 2024
read article
Building a Feature-Rich Admin Dashboard with Angular and Bootstrap 5
read article
5 Top Libraries Each Frontend Developer Must Know
read article
Fix Bootstrap 5.3 modal's rootElement
currently reading
CSS Flexbox vs Gridbox: A Detailed Comparison
read article
Blur page body when hover on Nav Bar
read article
My New Bootstrap 4 Card Generator
read article
How to Install Bootstrap 5 in Laravel 11 with Vite?
read article
Why I Built the "Soo Good" Vegan Burger Website ๐ฑ
read article
My Journey from BootstrapCSS to TailwindCSS: A Backend Developerโs Perspective
read article
How to Install Bootstrap 5 in Laravel 11 with Vite?
read article
work with projects in php or laravel framework with html, css, js, boostrap, mysql.
read article
Level Up Your Game
read article
Stop the AI Obsession: The Smart Way to Validate Your Startup Idea
read article
Featured ones: