bootstrap
bootstrap copied to clipboard
Support modals embedded in Web Components
Prerequisites
- [X] I have searched for duplicate or closed feature requests
- [X] I have read the contributing guidelines
Proposal
Modal class suggests the modal element is part of the document.body
, whereas it can be part of a Web Component (and thus a Shadow DOM).
My proposal: add an option to the Modal component in order to be able to define its root element. It's default value would, of course, be document.body
.
Motivation and context
In the current v5.2 of Bootstrap, when a Modal is displayed, the following lines are used:
if (!document.body.contains(this._element)) {
document.body.append(this._element)
}
If the modal element (this._element
) is part of a Shadow DOM, and even if it's attached to the current document, document.body.contains(this._element)
will always return false.
Then, document.body.append(this._element)
will move the modal element from the Shadow DOM to the body element! This generates multiple issues: see this jsfiddle for some examples.
If the developer can specify the Shadow root as an option, the condition would be:
if (!root.contains(this._element)) {
root.append(this._element)
}
making it works.
@JulienChebance can you open a PR with your idea? (I am not sure about backdrop & scrollbar behavior)