Powered by NeGD | MeitY Government of India® UX4G
Alerts
Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages.
Examples #
Any amount of text can have an alert, and there is also an optional close button. Use one of the eight necessary contextual classes (such as .alert-success) for the right styling. Utilize the alerts JavaScript plugin for inline dismissal.
<div class="bd-example"><div class="alert alert-primary" role="alert">A simple primary alert—check it out!</div><div class="alert alert-secondary" role="alert">A simple secondary alert—check it out!</div><div class="alert alert-success" role="alert">A simple success alert—check it out!</div><div class="alert alert-danger" role="alert">A simple danger alert—check it out!</div><div class="alert alert-warning" role="alert">A simple warning alert—check it out!</div><div class="alert alert-info" role="alert">A simple info alert—check it out!</div><div class="alert alert-light" role="alert">A simple light alert—check it out!</div><div class="alert alert-dark" role="alert">A simple dark alert—check it out!</div></div>
RESULT
Color-coding to add meaning
just gives a visual cue, which users of assistive technologies like screen readers won't be able to understand. Make sure the information the color designates is either evident from the content itself (such as the visible text) or is included in another way, such as by hiding additional text using the .visually-hidden class.
Live example #
To reveal an alert that is initially hidden by inline styles, click the button below. Then close the alert by clicking the built-in
close button.
<div class="bd-example">
<div id="liveAlertPlaceholder"></div>
<button type="button" class="btn btn-primary" id="liveAlertBtn">Show live alert</button>
</div>
RESULT
We use the following JavaScript to trigger our live alert demo:
const alertPlaceholder = document.getElementById('liveAlertPlaceholder')
const alert = (message, type) => {
const wrapper = document.createElement('div')
wrapper.innerHTML = [
``,
` ${message}`,
' ',
''
].join('')
alertPlaceholder.append(wrapper)
}
const alertTrigger = document.getElementById('liveAlertBtn')
if (alertTrigger) {
alertTrigger.addEventListener('click', () => {
alert('Nice, you triggered this alert message!', 'success')
})
}
Link color #
Use the .alert-link utility class to quickly provide matching colored links within any alert.
<div class="bd-example"><div class="alert alert-primary" role="alert">A simple primary alert with <a href="#" class="alert-link">an example link</a>. Give it a click if you like.</div><div class="alert alert-secondary" role="alert">A simple secondary alert with <a href="#" class="alert-link">an example link</a>. Give it a click if you like.</div><div class="alert alert-success" role="alert">A simple success alert with <a href="#" class="alert-link">an example link</a>. Give it a click if you like.</div><div class="alert alert-danger" role="alert">A simple danger alert with <a href="#" class="alert-link">an example link</a>. Give it a click if you like.</div><div class="alert alert-warning" role="alert">A simple warning alert with <a href="#" class="alert-link">an example link</a>. Give it a click if you like.</div><div class="alert alert-info" role="alert">A simple info alert with <a href="#" class="alert-link">an example link</a>. Give it a click if you like.</div><div class="alert alert-light" role="alert">A simple light alert with <a href="#" class="alert-link">an example link</a>. Give it a click if you like.</div><div class="alert alert-dark" role="alert">A simple dark alert with <a href="#" class="alert-link">an example link</a>. Give it a click if you like.</div></div>
RESULT
Additional content #
Alerts can also contain additional HTML elements like headings, paragraphs and dividers.
<div class="bd-example-snippet bd-code-snippet"><div class="bd-example"><div class="alert alert-success" role="alert"><h4 class="alert-heading">Well done!</h4><p>Aww yeah, you successfully read this important alert message. This example text is going to run a bit longer so that you can see how spacing within an alert works with this kind of content.</p><hr/><p class="mb-0">Whenever you need to, be sure to use margin utilities to keep things nice and tidy.</p></div></div></div>
RESULT
Well done!
Aww yeah, you successfully read this important alert message. This example text is going to run a bit longer so that you can see how spacing within an alert works with this kind of content.
Whenever you need to, be sure to use margin utilities to keep things nice and tidy.
Icons #
Similar to this, make alerts with icons using flexbox utilities and UX4G Icons. It is possible to add more utilities or unique styles depending on the icons and content.
<div class="alert alert-primary d-flex align-items-center" role="alert"><svg xmlns="http://www.w3.org/2000/svg" class="bi bi-exclamation-triangle-fill flex-shrink-0 me-2" viewBox="0 0 16 16" role="img" aria-label="Warning:"><path d="M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566zM8 5c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995A.905.905 0 0 1 8 5zm.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/></svg><div>An example alert with an icon</div></div>
RESULT
More than one icon is required
for your alerts. To quickly reference the same icons repeatedly, think about using more UX4G Icons and creating a local SVG
sprite.
<div class="bd-example"><svg xmlns="http://www.w3.org/2000/svg"><symbol id="check-circle-fill" viewBox="0 0 16 16"><path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z"/></symbol><symbol id="info-fill" viewBox="0 0 16 16"><path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/></symbol><symbol id="exclamation-triangle-fill" viewBox="0 0 16 16"><path d="M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566zM8 5c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995A.905.905 0 0 1 8 5zm.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/></symbol></svg><div class="alert alert-primary d-flex align-items-center" role="alert"><svg class="bi flex-shrink-0 me-2" role="img" aria-label="Info:"><use xlink:href="#info-fill"/></svg><div>An example alert with an icon</div></div><div class="alert alert-success d-flex align-items-center" role="alert"><svg class="bi flex-shrink-0 me-2" role="img" aria-label="Success:"><use xlink:href="#check-circle-fill"/></svg><div>An example success alert with an icon</div></div><div class="alert alert-warning d-flex align-items-center" role="alert"><svg class="bi flex-shrink-0 me-2" role="img" aria-label="Warning:"><use xlink:href="#exclamation-triangle-fill"/></svg><div>An example warning alert with an icon</div></div><div class="alert alert-danger d-flex align-items-center" role="alert"><svg class="bi flex-shrink-0 me-2" role="img" aria-label="Danger:"><use xlink:href="#exclamation-triangle-fill"/></svg><div>An example danger alert with an icon</div></div></div>
RESULT
Dismissing #
Any alarm can be ignored inline by using the alert JavaScript plugin. This is how:
- Make sure the built UX4G JavaScript or the alert plugin is loaded.
-
Add a close button and the .
alert-dismissible
class, which places the closebutton
and provides extra padding to the right of thealert
. -
Add the attribute
data-bs-dismiss="alert"
to the close button to activate JavaScript capability. Use the element along with it to ensure optimal device behavior. -
Add the
.fade
and.show
classes to make notifications animated when dismissed.
You can see this in action with a live demo:
<div class="alert alert-warning alert-dismissible fade show" role="alert"><strong>Holy guacamole!</strong> You should check in on some of those fields below.<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>
RESULT
focus()
to the most pertinent area of the page in light of this. Add tabindex="-1"
to the element if you intend to shift emphasis to a non-interactive element that typically doesn't get it.
CSS #
Variables #
Added in v1.0.1Alerts now employ local CSS variables on .alert as part of UX4G's expanding approach to CSS variables for improved real-time customisation. Sass is used to set the values for the CSS variables, therefore Sass customization is still available.
--#{$prefix}alert-bg: transparent;
--#{$prefix}alert-padding-x: #{$alert-padding-x};
--#{$prefix}alert-padding-y: #{$alert-padding-y};
--#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};
--#{$prefix}alert-color: inherit;
--#{$prefix}alert-border-color: transparent;
--#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color);
--#{$prefix}alert-border-radius: #{$alert-border-radius};
RESULT
ReferenceError: $prefix is not defined
Sass variables #
$alert-padding-y: $spacer;
$alert-padding-x: $spacer;
$alert-margin-bottom: 1rem;
$alert-border-radius: $border-radius;
$alert-link-font-weight: $font-weight-bold;
$alert-border-width: $border-width;
$alert-bg-scale: -80%;
$alert-border-scale: -70%;
$alert-color-scale: 40%;
$alert-dismissible-padding-r: $alert-padding-x * 3; // 3x covers width of x plus default padding on either side
Sass loop #
Loop that generates the modifier classes with the
alert-variant()
mixin.
// Generate contextual modifier classes for colorizing the alert.
@each $state, $value in $theme-colors {
$alert-background: shift-color($value, $alert-bg-scale);
$alert-border: shift-color($value, $alert-border-scale);
$alert-color: shift-color($value, $alert-color-scale);
@if (contrast-ratio($alert-background, $alert-color) < $min-contrast-ratio) {
$alert-color: mix($value, color-contrast($alert-background), abs($alert-color-scale));
}
.alert-#{$state} {
@include alert-variant($alert-background, $alert-border, $alert-color);
}
}
JavaScript behavior #
Initialize #
Initialize elements as alerts
const alertList = document.querySelectorAll('.alert')
const alerts = [...alertList].map(element => new UX4G.Alert(element))
For the sole purpose of dismissing an alert, it isn’t
necessary to initialize the component manually via the JS
API. By making use of data-bs-dismiss="alert"
,
the component will be initialized automatically and properly
dismissed.
See the triggers section for more details.
Triggers #
Dismissal can be achieved with the data attribute on a button within the alert as demonstrated below:
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
or on a button outside the alert using the data-bs-target as demonstrated below:
<button type="button" class="btn-close" data-bs-dismiss="alert" data-bs-target="#my-alert" aria-label="Close"></button>
Note that closing an alert will remove it from the DOM.