Banner
Full-width announcement bars with semantic variants, positioning options, and dismissible functionality. Perfect for system messages, cookie consent, and important notifications.
Example
<div class="omni-banner" data-variant="info" role="status">
<div class="omni-banner-content">
System maintenance scheduled for tonight at 10 PM EST.
</div>
</div>
<div class="omni-banner" data-variant="warning" role="status">
<div class="omni-banner-content">
Your session will expire in 5 minutes.
</div>
</div>
<div class="omni-banner" data-variant="danger" role="alert">
<div class="omni-banner-content">
Critical security update required.
</div>
</div>
Variants
Semantic Variants
Use data-variant to convey meaning through color:
<div class="omni-banner" data-variant="info" role="status">
<div class="omni-banner-content">
<svg>...</svg>
New features available in the latest version.
</div>
</div>
Sizes
Use data-size to adjust banner padding:
<div class="omni-banner" data-variant="info" data-size="sm" role="status">...</div>
<div class="omni-banner" data-variant="info" role="status">...</div>
<div class="omni-banner" data-variant="info" data-size="lg" role="status">...</div>
Dismissible
Add data-dismissible="true" to include a close button. Requires JS to handle dismissal:
<div class="omni-banner" data-variant="warning" data-dismissible="true" role="status">
<div class="omni-banner-content">
This banner can be dismissed.
</div>
<button class="omni-close" aria-label="Dismiss announcement"></button>
</div>
Positioning
Static (default)
Standard document flow positioning:
Sticky
Use data-position="sticky" to stick to the top when scrolling:
<div class="omni-banner" data-variant="info" data-position="sticky" role="status">
<div class="omni-banner-content">
This banner sticks to the top when scrolling
</div>
</div>
Fixed
Use data-position="fixed" to fix to the top of the viewport:
<div class="omni-banner" data-variant="warning" data-position="fixed" role="status">
<div class="omni-banner-content">
This banner is fixed to the top of the viewport
</div>
</div>
Bottom
Use data-position="bottom" for cookie consent or footer announcements:
<div class="omni-banner" data-variant="info" data-position="bottom" role="status">
<div class="omni-banner-content">
We use cookies to improve your experience.
<a href="#">Learn more</a>
</div>
<button class="omni-close" aria-label="Dismiss cookie notice"></button>
</div>
With Actions
Include buttons or links within banner content:
<div class="omni-banner" data-variant="info" role="status">
<div class="omni-banner-content">
<svg>...</svg>
<span>A new version is available.</span>
<button class="omni-button" data-variant="primary" data-size="sm">
Update Now
</button>
</div>
</div>
API Reference
| Attribute | Values | Default | Description |
|---|---|---|---|
data-variant |
info, success, warning, danger | info | Semantic color variant |
data-size |
sm, md, lg | md | Banner padding size |
data-position |
static, sticky, fixed, bottom | static | Banner positioning behavior |
data-dismissible |
true | — | Adds space for close button |
HTML Structure
<div class="omni-banner" data-variant="[variant]" role="[role]">
<div class="omni-banner-content">
<!-- Icon (optional) -->
<svg>...</svg>
<!-- Message text -->
<span>Your message here</span>
<!-- Actions (optional) -->
<button class="omni-button">Action</button>
</div>
<!-- Close button (optional, if dismissible) -->
<button class="omni-close" aria-label="Dismiss"></button>
</div>
Accessibility
- Use appropriate ARIA roles based on urgency:
role="alert"for critical/urgent messages (danger) - announces immediatelyrole="status"for advisory messages (info, warning, success) - announces when idle
- Close buttons require descriptive
aria-label(e.g., "Dismiss announcement") - Banner content is centered with max-width for readability
- Color alone is not used to convey meaning - icons and text provide context
- Links and buttons within banners maintain proper contrast ratios
- Fixed/sticky positioning respects
prefers-reduced-motion - Dismissible banners should persist dismissal state (requires JS)
ARIA Role Guidelines
<!-- Critical/urgent: announced immediately -->
<div class="omni-banner" data-variant="danger" role="alert">
<div class="omni-banner-content">
Service outage detected. We are investigating.
</div>
</div>
<!-- Advisory: announced when idle -->
<div class="omni-banner" data-variant="info" role="status">
<div class="omni-banner-content">
System maintenance scheduled for tonight.
</div>
</div>
Best Practices
- Keep messages concise: Banners should communicate the essential information quickly
- Use appropriate variants: Match the semantic meaning to the message urgency:
- info: General announcements, updates, neutral information
- success: Positive confirmation, successful operations
- warning: Important notices, non-critical warnings
- danger: Critical alerts, errors, urgent actions required
- Limit banner usage: Avoid showing multiple banners simultaneously - prioritize the most important message
- Make dismissible when appropriate: Allow users to dismiss non-critical announcements
- Provide clear actions: If action is required, include obvious buttons or links
- Respect user attention: Don't overuse fixed/sticky positioning - reserve for truly important messages
- Include icons for clarity: Visual icons help users quickly identify message type
Components Used
Other OmniUI components demonstrated on this page: