Banner Box
BannerBox is a headless layout component designed to be placed inside a Banner component. It renders a <div> that the consumer styles with flexbox horizontal layout (display: flex; flex-direction: row) to arrange banner content items side by side, such as a message and action buttons.
This component is useful for structuring banner content into a horizontal row, aligning text, icons, and action buttons within a banner message bar.
Implementation Notes
- Renders a
<div>element with classbanner-box - Intended to be placed inside a Banner component
- Consumer applies flexbox horizontal styles via the
.banner-boxCSS class - Uses
childrenslot for flexible content rendering - Spreads
restPropsonto the<div>element for consumer extensibility
Props
label: string (optional) -- accessible name applied viaaria-labelif neededchildren: slot (required) -- the banner box content...restProps: unknown -- additional attributes spread onto the<div>element
Usage
<Banner label="Site notice" type="info">
<BannerBox>
<span>We are upgrading our servers on Saturday 12 April from 02:00 to 06:00.</span>
<a href="/status">Check status</a>
</BannerBox>
</Banner>
<Banner label="Session warning" type="warning" dismissible closeLabel="Dismiss">
<BannerBox>
<span>Your session will expire in 5 minutes.</span>
<button type="button">Extend session</button>
</BannerBox>
</Banner>
<Banner label="Cookie consent" type="info">
<BannerBox>
<p>We use cookies to improve your experience.</p>
<button type="button">Accept</button>
<button type="button">Reject</button>
</BannerBox>
</Banner>
Keyboard Interactions
- None (passive layout element)
ARIA
- No additional ARIA attributes required; the parent Banner provides the landmark role and aria-live region
- Optional
aria-labelvialabelprop if the box needs an accessible name
Composition
BannerBox is a child of Banner:
Banner
└── BannerBox (flexbox horizontal row)
├── message content
└── action buttons
When to Use
- Use inside a Banner to create a horizontal flexbox container for banner content
- Use to arrange banner text and action buttons side by side in a single row
- Use to group an icon, a message, and a dismiss or action button within a Banner
- Use when the Banner needs a consistent horizontal layout across different banner types
- Use to separate content zones within a Banner, such as left-aligned text and right-aligned controls
When Not to Use
- Do not use outside a Banner -- use a standard
<div>or layout component for non-banner horizontal layouts - Do not use for medical banners -- use MedicalBannerBox inside MedicalBanner instead
- Do not use for vertical stacking of banner content -- apply column-direction styles directly to the Banner or use multiple BannerBox elements
Headless
This headless component provides a <div> with a .banner-box class for consumer CSS targeting. The consumer is responsible for all flexbox styling including display: flex, flex-direction: row, alignment, gap, and any responsive behavior.
Styles
The consumer provides all CSS styling. The component renders with a .banner-box class for targeting. Typical consumer styles include display: flex; flex-direction: row; align-items: center; gap: 1rem;. No default styles are included -- this is a fully headless component.
Testing
- Verify the component renders a
<div>element with classbanner-box - Verify it renders children content
- Verify pass-through attributes are applied to the
<div>
Advice
- Designers: Use BannerBox to create a horizontal layout within banners. Consider responsive behavior -- the consumer may want to switch to vertical stacking on narrow screens.
- Developers: Apply
display: flex; flex-direction: row;to.banner-boxin your CSS. Usealign-items: centerfor vertical centering andgapfor spacing between items.
Related components
announcement-banner— a banner highlighting important messages for all usersbanner— a prominent message bar across the top of a pagegovernment-banner— a banner identifying a website as belonging to a government, with an expandable details panelmedical-banner— a prominent message bar across the top of a page, with medical informationmedical-banner-box— a medical banner box that is inside a medical-banner component, using flexbox horizontal, with medical informationmedical-banner-box-for-advice— a medical record banner box for advice information e.g. contacts, contexts, plans, etc.
References
- Parent component: Banner
- CSS Flexbox: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_flexible_box_layout