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.
Example
Show demo markup
<div class="banner-box" aria-label="a banner box that is inside a banner component, using flexbox horizontal">BannerBox</div>
Usage example
<script lang="ts">
import Banner from '../Banner/Banner.svelte';
import BannerBox from './BannerBox.svelte';
</script>
<Banner>
<BannerBox>
<span>Important announcement</span>
<a href="/learn-more">Learn more</a>
</BannerBox>
</Banner>
Show Svelte source
// In your Svelte component:
import BannerBox from "lily-design-system-svelte-headless/components/BannerBox/BannerBox.svelte";
<BannerBox>
<!-- content -->
</BannerBox>
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>
Props
label: string (optional) -- accessible name applied via aria-label if needed
children: slot (required) -- the banner box content
...restProps: unknown -- additional attributes spread onto the <div> element
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-label via label prop 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 class banner-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-box in your CSS. Use align-items: center for vertical centering and gap for spacing between items.
Implementation Notes
- Renders a
<div> element with class banner-box
- Intended to be placed inside a Banner component
- Consumer applies flexbox horizontal styles via the
.banner-box CSS class
- Uses
children slot for flexible content rendering
- Spreads
restProps onto the <div> element for consumer extensibility
Related components
announcement-banner — a banner highlighting important messages for all users
banner — a prominent message bar across the top of a page
government-banner — a banner identifying a website as belonging to a government, with an expandable details panel
medical-banner — a prominent message bar across the top of a page, with medical information
medical-banner-box — a medical banner box that is inside a medical-banner component, using flexbox horizontal, with medical information
medical-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
Canonical contract
Generated from this component's canonical metadata — the machine-checked source the implementations are held to.
Metadata
- Component: banner-box
- PascalCase: BannerBox
- Description: a banner box that is inside a banner component, using flexbox horizontal
- Status: beta — implemented and unit-tested in all seven frameworks with an axe-clean demo page; not yet exercised in composed flows
- HTML tag: <div>
- CSS class: .banner-box
- Interactive: no
ARIA
- No additional ARIA attributes required; the parent Banner provides the landmark role and aria-live region
Keyboard
- None (passive layout element)
Props
label: string (optional) -- accessible name applied via aria-label if needed children: slot (required) -- the banner box content ...restProps: unknown -- additional attributes spread onto the <div> element