Accessibilité
Contrastes WCAG, bonnes pratiques et guidelines d'accessibilité du design system Swellr.
Principes WCAG 2.1
Les Web Content Accessibility Guidelines définissent 4 grands principes que tout contenu web accessible doit respecter. Swellr s'engage à les appliquer dans l'intégralité du design system.
Perceptible
L'information et les composants d'interface doivent être présentés de façon à être perçus par tous les utilisateurs, quels que soient leurs sens disponibles.
Principe 1Utilisable
Les composants d'interface et la navigation doivent être utilisables sans nécessiter l'emploi d'une souris — clavier, switch, commande vocale.
Principe 2Compréhensible
L'information et le fonctionnement de l'interface doivent être lisibles, compréhensibles et prévisibles pour tout utilisateur, y compris cognitif.
Principe 3Robuste
Le contenu doit être suffisamment robuste pour être interprété correctement par les technologies d'assistance actuelles et futures (lecteurs d'écran, etc.).
Principe 4Tableau de contrastes
Ratios de contraste WCAG 2.1 calculés pour chaque combinaison couleur texte / fond utilisée dans Swellr. Niveau AA exige 4.5:1 (texte normal) ou 3:1 (texte large ≥18px). Niveau AAA exige 7:1.
| Couleur texte | Fond | Aperçu | Ratio | AA Normal | AA Large | AAA |
|---|---|---|---|---|---|---|
|
Teal Primaire
#028490
|
Blanc
#FFFFFF
|
Le surf c'est la vie |
4.52:1 | ✓ Conforme | ✓ Conforme | ✗ Échec |
|
Teal Dark
#073742
|
Blanc
#FFFFFF
|
Le surf c'est la vie |
9.1:1 | ✓ Conforme | ✓ Conforme | ✓ Conforme |
|
Teal Darkest
#08272e
|
Blanc
#FFFFFF
|
Le surf c'est la vie |
10.5:1 | ✓ Conforme | ✓ Conforme | ✓ Conforme |
|
Gris
#637887
|
Blanc
#FFFFFF
|
Le surf c'est la vie |
4.6:1 | ✓ Conforme | ✓ Conforme | ✗ Échec |
|
Blanc cassé
#F8F8F8
|
Teal Darkest
#08272e
|
Le surf c'est la vie |
10.2:1 | ✓ Conforme | ✓ Conforme | ✓ Conforme |
|
Blanc
#FFFFFF
|
Teal Primaire
#028490
|
Le surf c'est la vie |
4.52:1 | ✓ Conforme | ✓ Conforme | ✗ Échec |
|
Vert Event
#4CAF00
|
Blanc
#FFFFFF
|
Le surf c'est la vie |
2.9:1 | ✗ Échec | ✗ Échec | ✗ Échec |
|
Noir
#090909
|
Mint BG
#ECF8F8
|
Le surf c'est la vie |
11.8:1 | ✓ Conforme | ✓ Conforme | ✓ Conforme |
Visualisation des contrastes
Pour chaque couleur de la palette Swellr, aperçu du texte de démonstration sur fond blanc et sur fond sombre.
Cas problématiques et solutions
Certaines couleurs de la palette Swellr échouent aux critères WCAG lorsqu'utilisées comme texte. Voici les règles d'usage et les alternatives recommandées.
| Couleur problématique | Ratio | Problème | Solution recommandée |
|---|---|---|---|
|
#4CAF00
Vert événement
|
2.9:1 |
Trop clair sur fond blanc — illisible pour texte normal et large. Échoue WCAG AA et AAA. |
#4CAF00 sur fond blanc
Utiliser du texte noir par-dessus la couleur verte comme fond
#2e7d00
Assombrir à #2e7d00 (ratio ~6.5:1 — AA ✓)
|
|
#F05906
Orange sessions
|
~2.5:1 |
Orange vif insuffisant pour du texte sur fond blanc. Utilisable uniquement comme couleur d'accent ou fond avec texte foncé. |
#F05906 comme fond
Toujours associer à un texte foncé #08272e par-dessus
#b84200
Assombrir pour usage en texte (ratio ~5.2:1)
|
|
#4FA3B1
Teal Light / Info
|
~2.7:1 |
Trop clair pour texte sur fond blanc. Réservé aux éléments décoratifs, icônes non-fonctionnelles, ou fonds avec texte foncé. |
#028490 Teal Primaire
Préférer le Teal Primaire pour du texte (4.52:1 — AA ✓)
|
|
Badge sur fond coloré
Texte badge sur fond teal ou orange
|
Variable |
Un badge avec texte clair sur fond coloré peut échouer si le fond est trop lumineux. Toujours vérifier le ratio texte-badge / fond-badge. |
Spot ✓
Eco ✓
Texte blanc (#fff) sur teal ✓ · Texte sombre (#08272e) sur vert ✓
|
Focus et navigation clavier
Chaque élément interactif de Swellr doit afficher un indicateur de focus visible lors de la navigation au clavier (WCAG 2.4.7). Le style de focus est standardisé dans tout le design system.
Tailles de texte et zoom
Le texte Swellr utilise des unités relatives (rem) afin de respecter la préférence de taille de police de l'utilisateur et de fonctionner jusqu'à 200% de zoom sans perte de contenu (WCAG 1.4.4).
| Contexte | Taille min recommandée | Valeur rem | Unité | Note |
|---|---|---|---|---|
| Titres (H1) | 28px | 1.75rem | rem ✓ | Toujours en rem ou em pour le zoom utilisateur |
| Titres (H2–H3) | 20–24px | 1.25–1.5rem | rem ✓ | Hiérarchie visuelle maintenue au zoom |
| Corps texte desktop | 14px | 0.875rem | rem ✓ | Minimum absolu pour texte courant |
| Corps texte mobile | 16px | 1rem | rem ✓ | Empêche le zoom automatique iOS sur les inputs |
| Captions / Labels | 12px | 0.75rem | rem ✓ | Minimum absolu — jamais en dessous |
| Badges / Tags | 11px | 0.6875rem | rem ✓ | Acceptable uniquement pour labels non-essentiels |
| Texte en px fixe | Interdit pour le corps | — | px ✗ | Ne répond pas aux préférences de l'utilisateur |
Démonstration — même contenu à différents niveaux de zoom
Spot Lacanau Pro
Conditions excellentes ce matin. Houle à 1.5m, vent offshore 15 nœuds. Session recommandée pour tous niveaux.
Spot Lacanau Pro
Conditions excellentes ce matin. Houle à 1.5m.
Spot Lacanau Pro
Conditions excellentes.
ARIA et HTML sémantique
Exemples de code HTML correct pour l'accessibilité Swellr. Le HTML sémantique doit toujours être privilégié avant l'ajout d'attributs ARIA (WCAG 4.1.2).
Bouton avec aria-label
Quand le texte visible du bouton n'est pas suffisamment descriptif, compléter avec aria-label.
<!-- Correct -->
<button
type="button"
aria-label="Se connecter à Swellr">
Se connecter
</button>
<!-- Icône seule -->
<button
type="button"
aria-label="Fermer la modale">
<svg aria-hidden="true">...</svg>
</button>
Icône décorative
Les icônes purement décoratives doivent être masquées aux lecteurs d'écran avec aria-hidden="true".
<!-- Icône décorative -->
<span
aria-hidden="true"
class="icon-wave">
🌊
</span>
<!-- SVG décoratif -->
<svg
aria-hidden="true"
focusable="false">
...
</svg>
Formulaire accessible
Chaque champ doit avoir un <label> associé via for / id.
<div class="field">
<label for="email">
Adresse e-mail
</label>
<input
id="email"
type="email"
name="email"
autocomplete="email"
aria-required="true"
/>
</div>
Navigation labelisée
Chaque élément <nav> doit avoir un aria-label unique et descriptif.
<nav
aria-label="Navigation principale">
<ul>
<li><a href="/spots">Spots</a></li>
<li><a href="/meteo">Météo</a></li>
</ul>
</nav>
<!-- Page active -->
<a
href="/spots"
aria-current="page">
Spots
</a>
Image avec alt descriptif
Toutes les images informatives ont un attribut alt descriptif. Les images décoratives ont alt="".
<!-- Image informative -->
<img
src="lacanau.jpg"
alt="Vague de 1,5m à Lacanau
avec surfer en combinaison"
/>
<!-- Image décorative -->
<img
src="bg-wave.svg"
alt=""
aria-hidden="true"
/>
Langue déclarée
L'attribut lang sur <html> est obligatoire (WCAG 3.1.1) — il permet aux lecteurs d'écran de prononcer correctement le contenu.
<!-- Page française -->
<html lang="fr">
<!-- Passage en anglais -->
<p>
Abonnez-vous à notre newsletter :
<span lang="en">
Best surf spots weekly
</span>
</p>
Checklist accessibilité
À valider sur chaque écran ou composant Swellr avant livraison. Cette checklist couvre les critères WCAG 2.1 niveau AA, niveau minimal requis pour Swellr.