Optional label
Modal heading
<!--
Copyright IBM Corp. 2016, 2018
This source code is licensed under the Apache-2.0 license found in the
LICENSE file in the root directory of this source tree.
-->
<button class="bx--btn bx--btn--primary" type="button" data-modal-target="#modal-fbmh8nxtm3f">Show
modal</button>
<div data-modal id="modal-fbmh8nxtm3f" class="bx--modal " role="dialog"
aria-modal="true" aria-labelledby="modal-fbmh8nxtm3f-label" aria-describedby="modal-fbmh8nxtm3f-heading" tabindex="-1">
<div class="bx--modal-container">
<div class="bx--modal-header">
<p class="bx--modal-header__label bx--type-delta" id="modal-fbmh8nxtm3f-label">Optional label</p>
<p class="bx--modal-header__heading bx--type-beta" id="modal-fbmh8nxtm3f-heading">Modal heading</p>
<button class="bx--modal-close" type="button" data-modal-close aria-label="close modal" >
<svg focusable="false" preserveAspectRatio="xMidYMid meet" style="will-change: transform;" xmlns="http://www.w3.org/2000/svg" class="bx--modal-close__icon" width="16" height="16" viewBox="0 0 16 16" aria-hidden="true"><path d="M12 4.7L11.3 4 8 7.3 4.7 4 4 4.7 7.3 8 4 11.3 4.7 12 8 8.7 11.3 12 12 11.3 8.7 8z"></path></svg>
</button>
</div>
<!-- Note: Modals with content that scrolls, at any viewport, requires `tabindex="0"` on the `bx--modal-content` element -->
<div class="bx--modal-content" >
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id accumsan augue. Phasellus consequat augue
vitae
tellus tincidunt posuere. Curabitur justo urna, consectetur vel elit iaculis, ultrices condimentum risus. Nulla
facilisi.
Etiam venenatis molestie tellus. Quisque consectetur non risus eu rutrum. </p>
</div>
<div class="bx--modal-footer">
<button class="bx--btn bx--btn--secondary" type="button" data-modal-close>Secondary button</button>
<button class="bx--btn bx--btn--primary" type="button" data-modal-primary-focus>Primary button</button>
</div>
</div>
<!-- Note: focusable span allows for focus wrap feature within Modals -->
<span tabindex="0"></span>
</div>
Optional label
Modal heading
<!--
Copyright IBM Corp. 2016, 2018
This source code is licensed under the Apache-2.0 license found in the
LICENSE file in the root directory of this source tree.
-->
<button class="bx--btn bx--btn--primary" type="button" data-modal-target="#modal-6fzdte2fd6v">Show
modal</button>
<div data-modal id="modal-6fzdte2fd6v" class="bx--modal " role="dialog"
aria-modal="true" aria-labelledby="modal-6fzdte2fd6v-label" aria-describedby="modal-6fzdte2fd6v-heading" tabindex="-1">
<div class="bx--modal-container">
<div class="bx--modal-header">
<p class="bx--modal-header__label bx--type-delta" id="modal-6fzdte2fd6v-label">Optional label</p>
<p class="bx--modal-header__heading bx--type-beta" id="modal-6fzdte2fd6v-heading">Modal heading</p>
<button class="bx--modal-close" type="button" data-modal-close aria-label="close modal" data-modal-primary-focus>
<svg focusable="false" preserveAspectRatio="xMidYMid meet" style="will-change: transform;" xmlns="http://www.w3.org/2000/svg" class="bx--modal-close__icon" width="16" height="16" viewBox="0 0 16 16" aria-hidden="true"><path d="M12 4.7L11.3 4 8 7.3 4.7 4 4 4.7 7.3 8 4 11.3 4.7 12 8 8.7 11.3 12 12 11.3 8.7 8z"></path></svg>
</button>
</div>
<!-- Note: Modals with content that scrolls, at any viewport, requires `tabindex="0"` on the `bx--modal-content` element -->
<div class="bx--modal-content" >
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id accumsan augue. Phasellus consequat augue
vitae
tellus tincidunt posuere. Curabitur justo urna, consectetur vel elit iaculis, ultrices condimentum risus. Nulla
facilisi.
Etiam venenatis molestie tellus. Quisque consectetur non risus eu rutrum. </p>
</div>
</div>
<!-- Note: focusable span allows for focus wrap feature within Modals -->
<span tabindex="0"></span>
</div>
Optional label
Modal heading
<!--
Copyright IBM Corp. 2016, 2018
This source code is licensed under the Apache-2.0 license found in the
LICENSE file in the root directory of this source tree.
-->
<button class="bx--btn bx--btn--danger" type="button" data-modal-target="#modal-ldzhaem5b19">Show
modal</button>
<div data-modal id="modal-ldzhaem5b19" class="bx--modal bx--modal--danger" role="dialog"
aria-modal="true" aria-labelledby="modal-ldzhaem5b19-label" aria-describedby="modal-ldzhaem5b19-heading" tabindex="-1">
<div class="bx--modal-container">
<div class="bx--modal-header">
<p class="bx--modal-header__label bx--type-delta" id="modal-ldzhaem5b19-label">Optional label</p>
<p class="bx--modal-header__heading bx--type-beta" id="modal-ldzhaem5b19-heading">Modal heading</p>
<button class="bx--modal-close" type="button" data-modal-close aria-label="close modal" >
<svg focusable="false" preserveAspectRatio="xMidYMid meet" style="will-change: transform;" xmlns="http://www.w3.org/2000/svg" class="bx--modal-close__icon" width="16" height="16" viewBox="0 0 16 16" aria-hidden="true"><path d="M12 4.7L11.3 4 8 7.3 4.7 4 4 4.7 7.3 8 4 11.3 4.7 12 8 8.7 11.3 12 12 11.3 8.7 8z"></path></svg>
</button>
</div>
<!-- Note: Modals with content that scrolls, at any viewport, requires `tabindex="0"` on the `bx--modal-content` element -->
<div class="bx--modal-content" >
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id accumsan augue. Phasellus consequat augue
vitae
tellus tincidunt posuere. Curabitur justo urna, consectetur vel elit iaculis, ultrices condimentum risus. Nulla
facilisi.
Etiam venenatis molestie tellus. Quisque consectetur non risus eu rutrum. </p>
</div>
<div class="bx--modal-footer">
<button class="bx--btn bx--btn--secondary" type="button" data-modal-close>Secondary button</button>
<button class="bx--btn bx--btn--danger" type="button" aria-label="Danger"
data-modal-primary-focus>Primary button</button>
</div>
</div>
<!-- Note: focusable span allows for focus wrap feature within Modals -->
<span tabindex="0"></span>
</div>
Optional label
Modal heading
<!--
Copyright IBM Corp. 2016, 2018
This source code is licensed under the Apache-2.0 license found in the
LICENSE file in the root directory of this source tree.
-->
<button class="bx--btn bx--btn--primary" type="button" data-modal-target="#modal-k928x405sae">Show
modal</button>
<div data-modal id="modal-k928x405sae" class="bx--modal " role="dialog"
aria-modal="true" aria-labelledby="modal-k928x405sae-label" aria-describedby="modal-k928x405sae-heading" tabindex="-1">
<div class="bx--modal-container">
<div class="bx--modal-header">
<p class="bx--modal-header__label bx--type-delta" id="modal-k928x405sae-label">Optional label</p>
<p class="bx--modal-header__heading bx--type-beta" id="modal-k928x405sae-heading">Modal heading</p>
<button class="bx--modal-close" type="button" data-modal-close aria-label="close modal" >
<svg focusable="false" preserveAspectRatio="xMidYMid meet" style="will-change: transform;" xmlns="http://www.w3.org/2000/svg" class="bx--modal-close__icon" width="16" height="16" viewBox="0 0 16 16" aria-hidden="true"><path d="M12 4.7L11.3 4 8 7.3 4.7 4 4 4.7 7.3 8 4 11.3 4.7 12 8 8.7 11.3 12 12 11.3 8.7 8z"></path></svg>
</button>
</div>
<!-- Note: Modals with content that scrolls, at any viewport, requires `tabindex="0"` on the `bx--modal-content` element -->
<div class="bx--modal-content" >
<div class="bx--form-item">
<label for="text-input-k928x405sae" class="bx--label">Text Input label</label>
<input id="text-input-k928x405sae" type="text" class="bx--text-input" placeholder="Optional placeholder text"
data-modal-primary-focus>
</div>
</div>
<div class="bx--modal-footer">
<button class="bx--btn bx--btn--secondary" type="button" data-modal-close>Secondary button</button>
<button class="bx--btn bx--btn--primary" type="button" >Primary button</button>
</div>
</div>
<!-- Note: focusable span allows for focus wrap feature within Modals -->
<span tabindex="0"></span>
</div>
Use these modifiers with .bx--modal
class.
Name | Description |
---|---|
.bx--modal--danger |
Selector for applying danger modal styles |
import { Modal } from 'carbon-components';
carbon-components.min.js
)var Modal = CarbonComponents.Modal;
<button>
with data-modal-target
attribute)Modal.init();
// `#my-modal` is an element with `[data-modal]` attribute
Modal.create(document.getElementById('my-modal'));
Name | Params | Description |
---|---|---|
release |
Deletes the instance | |
show |
Show the modal | |
hide |
Hide the modal |
// `#my-modal` is an element with `[data-modal]` attribute
var modalInstance = Modal.create(document.getElementById('my-modal'));
modalInstance.show();
Option | Default selector | Description |
---|---|---|
selectorInit |
'[data-modal]' | The css selector for root modal component |
selectorModalClose |
'[data-modal-close]' | The selector to find elements that close the modal |
selectorPrimaryFocus |
'[data-modal-primary-focus]' | The CSS selector to determine the element to put focus when modal gets open |
classVisible |
'is-visible' | Class to toggle visibility of modal |
classBody |
'bx--body--with-modal-open' | Class on <body> that toggles when a modal opens/closes |
attribInitTarget |
'data-modal-target' | The attribute on the launching element to target the modal |
initEventNames |
'['click']' | On specified events, if event matches the attribInitTarget, then initialize the component and run createdByLauncher if method exists |
<div
data-modal
id="my-modal"
class="bx--modal "
role="dialog"
aria-modal="true"
aria-labelledby="my-modal-label"
aria-describedby="my-modal-heading"
tabindex="-1"
>
<div class="bx--modal-container">
<div class="bx--modal-header">
<p class="bx--modal-header__heading bx--type-beta" id="my-modal-heading">
Modal heading
</p>
<button
class="bx--modal-close"
type="button"
data-modal-close
aria-label="close modal"
>
(The close button image)
</button>
</div>
<div class="bx--modal-content">
<label for="my-text-input" class="bx--label">Text Input label</label>
<input
id="my-text-input"
type="text"
class="bx--text-input"
placeholder="Optional placeholder text"
data-modal-primary-focus
/>
</div>
</div>
</div>
Event option | Event name |
---|---|
eventBeforeShown |
'modal-beingshown' |
eventAfterShown |
'modal-shown' |
eventBeforeHidden |
'modal-beinghidden' |
eventAfterHidden |
'modal-hidden' |
document.addEventListener('modal-beinghidden', function(evt) {
if (myApplication.shouldModalKeptOpen(evt.target)) {
evt.preventDefault();
}
});
document.addEventListener('modal-hidden', function(evt) {
myAnalyticsLibrary.send({
action: 'Modal hidden',
id: evt.target.id,
});
});
To trigger the same modal, you need to add the data-modal-target
attribute to
a element, and then point it to the same id. For example
<button
class="bx--btn bx-btn--primary"
type="button"
data-modal-target="#modal"
>
A button
</button>
<button
class="bx--btn bx-btn--secondary"
type="button"
data-modal-target="#modal"
>
Another button
</button>
Both these buttons would trigger the modal with the id of modal.