@n8d/htwoo-patterns
Version:
hTWOo Patterns to setup custom style guide
202 lines (161 loc) • 6.01 kB
Markdown
---
title: Checkbox Group - Horizontal
order: 11
---
# Checkbox Group - Horizontal
A horizontal layout variant of the checkbox group component that arranges related checkbox controls in a single row. Optimized for compact forms and scenarios where horizontal space is available.
## Overview
The horizontal checkbox group component creates an accessible collection of checkbox controls arranged horizontally instead of vertically. This layout is ideal for compact forms, toolbar-style selections, or when screen real estate favors horizontal arrangement over vertical stacking.
## Features
- **Horizontal Layout**: Arranges checkboxes in a single row
- **Space Efficient**: Optimal use of horizontal space
- **Responsive Wrapping**: Wraps to multiple rows on smaller screens
- **Consistent Semantics**: Same accessibility features as vertical variant
- **Flexible Spacing**: Configurable gap between checkbox items
- **Touch Friendly**: Appropriate spacing for touch interfaces
## Structure
The component consists of:
1. **Container**: `<menu>` with `.hoo-checkbox-group.horizontal` classes
2. **List Items**: `<li>` elements containing individual checkboxes
3. **Checkboxes**: `{{>atoms-checkbox}}` components for each option
## Data Structure
```json
{
"checkbox-group": {
"items": [
{
"id": "filter-active",
"name": "status-filters",
"value": "active",
"label": "Active",
"checked": true
},
{
"id": "filter-pending",
"name": "status-filters",
"value": "pending",
"label": "Pending",
"checked": false
},
{
"id": "filter-completed",
"name": "status-filters",
"value": "completed",
"label": "Completed",
"checked": false
}
]
}
}
```
## CSS Classes
- `.hoo-checkbox-group`: Base checkbox group styling
- `.hoo-checkbox-group.horizontal`: Horizontal layout modifier
- `.hoo-checkbox-group.horizontal.compact`: Reduced spacing variant
- `.hoo-checkbox-group.horizontal.wrap`: Allows wrapping on small screens
## Styling
### Layout
- **Direction**: Horizontal (row) layout using CSS flexbox
- **Spacing**: 24px gap between checkbox items (configurable)
- **Alignment**: Items aligned to container start
- **Wrapping**: Responsive wrapping on smaller screens
### Responsive Behavior
- **Large Screens**: Single row layout with full spacing
- **Medium Screens**: Single row with reduced spacing
- **Small Screens**: Wraps to multiple rows as needed
- **Mobile**: Stacks vertically on very small screens
## Use Cases
### Filter Controls
```handlebars
<div class="filter-bar">
<label class="filter-label">Show:</label>
{{> molecules-checkbox-group-horizontal}}
</div>
```
### Toolbar Options
```handlebars
<div class="toolbar">
<div class="toolbar-section">
<span class="toolbar-label">Options:</span>
{{> molecules-checkbox-group-horizontal}}
</div>
</div>
```
### Quick Settings
```handlebars
<section class="quick-settings">
<h3>Display Options</h3>
{{> molecules-checkbox-group-horizontal}}
</section>
```
### Inline Preferences
```handlebars
<div class="preferences-row">
<span class="preference-label">Notifications:</span>
{{> molecules-checkbox-group-horizontal}}
</div>
```
## Accessibility
### Same as Vertical Variant
- **Semantic HTML**: Uses `<menu>` element with proper list structure
- **ARIA Roles**: `role="checkbox"` on container
- **Keyboard Navigation**: Tab to group, arrow keys between options
- **Screen Reader**: Clear group announcements
- **Focus Management**: Proper focus indicators
### Horizontal-Specific Considerations
- **Visual Scanning**: Horizontal layout supports left-to-right reading
- **Touch Targets**: Maintains minimum 44px touch targets
- **Spacing**: Adequate spacing prevents accidental selections
## Keyboard Interactions
- **Tab**: Focus the checkbox group
- **Arrow Left/Right**: Navigate between checkboxes horizontally
- **Arrow Up/Down**: Navigate between checkboxes (alternative)
- **Space**: Toggle the focused checkbox
- **Tab (from group)**: Move to next form element
## Responsive Design
### Breakpoint Behavior
## Form Integration
### Within Compact Forms
```handlebars
<form class="compact-form">
<div class="form-row">
<label>Categories:</label>
{{> molecules-checkbox-group-horizontal}}
</div>
</form>
```
### As Filter Interface
```handlebars
<div class="search-filters">
<div class="filter-group">
<h4>Content Type</h4>
{{> molecules-checkbox-group-horizontal}}
</div>
</div>
```
## When to Use Horizontal Layout
### Choose Horizontal When:
- **Limited Vertical Space**: When vertical space is constrained
- **Few Options**: Works best with 2-5 checkbox options
- **Toolbar Context**: Part of toolbar or action bar interfaces
- **Inline Filters**: When checkboxes are part of filter interfaces
### Choose Vertical When:
- **Many Options**: More than 5-6 checkbox options
- **Long Labels**: When checkbox labels are lengthy
- **Mobile-First**: When mobile experience is primary concern
- **Form Context**: Traditional form layouts favor vertical
## Browser Support
- **Modern Browsers**: Full support in Chrome, Firefox, Safari, Edge
- **Flexbox**: Uses CSS flexbox for horizontal layout
- **Legacy Support**: Graceful degradation to vertical layout
- **Mobile**: Optimized responsive behavior for all screen sizes
## SCSS Files
**Atom Styles:**
- `lib/sass/atoms/input.scss`
**Molecule Styles:**
- `lib/sass/molecules/forms.scss`
## Performance
- **CSS Flexbox**: Efficient native layout system
- **Minimal CSS**: Additional horizontal-specific styles only
- **Responsive**: Single component handles all screen sizes
- **Touch Optimized**: Optimized spacing for touch interfaces