Skip to content

Accessibility Guidelines

This document defines the accessibility standards and development guidance for MedTracker.

WCAG 2.2 Compliance Target

MedTracker aims for WCAG 2.2 Level AA compliance.

Target Size Requirements (SC 2.5.8)

Minimum Requirements

All interactive elements (buttons, links, form controls) must meet WCAG 2.5.8 Target Size (Minimum):

  • Minimum size: 24×24 CSS pixels
  • Recommended size: 44×44 CSS pixels (matches iOS/Android touch guidelines)

Component sizes

Button Component Sizes

Size Height WCAG 2.5.8 (24px min) Touch Recommendation (44px)
:sm 32px (h-8) ✅ Passes ⚠️ Below recommended
:md 36px (h-9) ✅ Passes ⚠️ Below recommended
:lg 40px (h-10) ✅ Passes ⚠️ Below recommended
:xl 48px (h-12) ✅ Passes + 2.5.5 ✅ Meets recommendation

Use :xl or add min-h-[44px] for primary mobile and touch targets.

Touch Target Guidelines

For mobile/touch interfaces, use min-h-[44px] to ensure adequate touch targets:

# Good - explicit minimum height for touch
Button(variant: :primary, class: 'min-h-[44px]') { 'Submit' }

# Good - using :xl size
Button(variant: :primary, size: :xl) { 'Submit' }

Badge-Style Buttons

When using compact badge styling, ensure minimum dimensions:

def accessible_badge_classes
  # Touch target: min-h-[44px] min-w-[44px]
  'inline-flex items-center justify-center rounded-full ' \
    'min-h-[44px] min-w-[44px] ' \
    'px-4 py-2 text-sm font-medium'
end

Spacing Requirements

When targets are undersized, ensure adequate spacing:

  • Use gap-2 (8px) or gap-3 (12px) between adjacent targets
  • A 24px diameter circle centered on each target must not intersect other targets

Exceptions

The following are exempt from size requirements:

  1. Inline text links: links within paragraphs constrained by line-height
  2. User agent controls: default browser form controls
  3. Essential positioning: use this exception when size or position is fundamental to meaning

Testing

Manual Testing

  1. Draw a 24px diameter circle centered on each target
  2. Verify circles don't intersect other targets
  3. Test with touch devices to verify usability

Automated Testing

Use browser dev tools to measure element dimensions:

// In browser console
document.querySelectorAll('button, a, [role="button"]').forEach(el => {
  const rect = el.getBoundingClientRect();
  if (rect.width < 24 || rect.height < 24) {
    console.warn('Undersized target:', el, rect.width, rect.height);
  }
});

References