🚧 Under Construction
This component documentation is currently being developed. Some features may be incomplete.
Validation Message
View in Pattern LabHTML Markup
<output class="hoo-validation" id="field-x-error-97" >lorem ipsum dolor sit amet, consectetur adipiscing elit</output>
Validation Message
An accessible validation feedback component that displays error messages, success notifications, and other form validation states. Uses semantic HTML output element for proper screen reader announcements.
Overview
The validation message component provides accessible feedback for form validation states. It uses the semantic <output> element to ensure screen readers announce validation changes dynamically, improving the user experience for all users.
Features
- Semantic HTML: Uses
<output>element for proper accessibility - Dynamic IDs: Auto-generates unique IDs for ARIA relationships
- Screen Reader Support: Automatic announcements of validation changes
- Conditional Rendering: Only renders when validation error exists
- ARIA Integration: Proper linking with form controls via
aria-describedby - Visual States: Supports error, warning, and success states
Structure
The component consists of:
- Container:
<output>element with.hoo-validationclass - ID Generation: Dynamic ID based on
errorRefand numeric suffix - Content: Validation message text
Data Structure
{
"input": {
"error": {
"text": "This field is required",
"errorRef": "username"
}
}
}
Multiple Validation States
{
"input": {
"error": {
"text": "Password must contain at least 8 characters, one uppercase letter, and one number",
"errorRef": "password",
"type": "error"
}
}
}
CSS Classes
.hoo-validation: Base validation message styling.hoo-validation.error: Error state (red styling).hoo-validation.warning: Warning state (amber styling).hoo-validation.success: Success state (green styling).hoo-validation.info: Information state (blue styling)
Styling
Visual Design
- Error Color:
#d13438(red) for error messages - Warning Color:
#ff8c00(amber) for warnings - Success Color:
#107c10(green) for success messages - Info Color:
#0078d4(blue) for informational messages - Typography: 12px font size, 16px line height
- Icon: Optional status icon before text
Layout
- Position: Appears below the associated form control
- Spacing: 4px top margin from input
- Width: Full width of parent container
- Alignment: Left-aligned text
Animation
- Fade In: Smooth appearance when validation triggers
- Fade Out: Graceful removal when validation clears
- Height Transition: Smooth height change to prevent layout shift
Use Cases
Required Field Validation
<label for="email">Email Address *</label>
<input type="email" id="email" aria-describedby="email-error" required />
{{#input.error}}
<output class="hoo-validation error" id="email-error">Email address is required</output>
{{/input.error}}
Format Validation
<label for="phone">Phone Number</label>
<input type="tel" id="phone" aria-describedby="phone-error" />
{{#input.error}}
<output class="hoo-validation error" id="phone-error">Please enter a valid phone number (e.g., 555-123-4567)</output>
{{/input.error}}
Success Feedback
<label for="username">Username</label>
<input type="text" id="username" aria-describedby="username-success" />
{{#input.success}}
<output class="hoo-validation success" id="username-success">Username is available!</output>
{{/input.success}}
Password Strength
<label for="password">Password</label>
<input type="password" id="password" aria-describedby="password-info" />
{{#input.info}}
<output class="hoo-validation info" id="password-info">Password strength: Strong</output>
{{/input.info}}
Accessibility
- Semantic Element: Uses
<output>element for live announcements - ARIA Live: Automatically announces changes to screen readers
- Unique IDs: Generated IDs prevent conflicts in complex forms
- Linked Controls: Connected to form controls via
aria-describedby - Clear Language: Uses plain language for validation messages
- Color Independence: Doesn’t rely solely on color for meaning
Validation Integration
Client-Side Validation
Server-Side Validation
{{#if validationErrors.email}}
{{#input.error}}
<output class="hoo-validation error" id="email-error">{{validationErrors.email}}</output>
{{/input.error}}
{{/if}}
Dynamic ID Generation
The component uses getLastNumericId helper to generate unique IDs:
{{#if errorRef}}id="{{ errorRef }}-{{ getLastNumericId }}"{{/if}}
This ensures multiple validation messages have unique identifiers for proper ARIA relationships.
Browser Support
- Modern Browsers: Full support for
<output>element in Chrome, Firefox, Safari, Edge - Legacy Browsers: Graceful degradation with
<div>fallback styling - Screen Readers: Excellent support in NVDA, JAWS, VoiceOver
- Mobile: Optimized for mobile screen readers and touch interfaces
SCSS Files
Atom Styles:
lib/sass/atoms/input.scsslib/sass/atoms/forms.scss
Performance
- Minimal Footprint: Lightweight CSS with no JavaScript dependencies
- Conditional Rendering: Only renders when validation state exists
- Efficient DOM: Uses single
<output>element - No Layout Shift: Proper spacing prevents content jumping