2024-12-13 14:30:22 +01:00
---
author: Nicolas Arduin
download: true
exportFilename: intriduction-accessibilite-numerique
lineNumbers: true
remoteAssets: true
htmlAttrs:
dir: ltr
lang: fr
theme: ./
# some information about your slides (markdown enabled)
title: Introduction à l'accessibilité numérique
info: |
## Commencer avec l'accessibilité
Pourquoi, pour qui et comment ?
Learn more at [Sli.dev ](https://sli.dev )
# https://sli.dev/features/drawing
drawings:
persist: false
# slide transition: https://sli.dev/guide/animations.html#slide-transitions
transition: fade-out
# enable MDC Syntax: https://sli.dev/features/mdc
mdc: true
# make slide text selectable
selectable: true
# take snapshot for each slide in the overview
overviewSnapshots: true
hideInToc: true
layout: intro
---
2024-12-16 23:40:18 +01:00
# <span class="highlight">L'accessibilité numérique</span> en 10 étapes
2024-12-13 14:30:22 +01:00
< div class = "abs-br m-6" >
2024-12-19 14:07:20 +01:00
< a href = "https://www.nardu.in" rel = "noreferer noopener" > Nico,< / a > Décembre 2024.< br > licence : < a href = "https://creativecommons.org/licenses/by-sa/4.0/" rel = "noreferer noopener" > CC BY-SA< / a >
2024-12-13 14:30:22 +01:00
< / div >
---
hideInToc: true
layout: bullets
---
# Sommaire
< Toc maxDepth = "1" > < / Toc >
---
2024-12-16 23:40:18 +01:00
layout: content
2024-12-13 14:30:22 +01:00
---
2024-12-16 23:40:18 +01:00
# Contexte
2024-12-13 14:30:22 +01:00
2024-12-16 23:40:18 +01:00
> “ La force du Web réside dans son universalité. L'accès de tous, quel que soit le handicap, en est un aspect essentiel. ”
2024-12-13 14:30:22 +01:00
2024-12-16 23:40:18 +01:00
Tim Berners-Lee, Directeur du < abbr title = "World Wide Web Consortium" > W3C< / abbr > et inventeur du World Wide Web
2024-12-13 14:30:22 +01:00
2024-12-17 22:50:34 +01:00
< div v-click >
2024-12-16 23:40:18 +01:00
> “ L’ accessibilité numérique est un droit fondamental. C’ est la possibilité pour toutes et tous d’ utiliser les outils informatiques, quelle que soit leur façon d’ y accéder. ”
2024-12-13 14:30:22 +01:00
2024-12-16 23:40:18 +01:00
Access 42
2024-12-13 14:30:22 +01:00
2024-12-17 22:50:34 +01:00
< / div >
< div v-click >
> <span lang="en">The W3C vision is that the Web and related technologies are accessible so that all people with disabilities around the globe can participate equally in the digital world.</span>
2024-12-16 23:40:18 +01:00
< abbr title = "World Wide Web Consortium" > W3C< / abbr > < abbr title = "Web Accessibility Initiative" > WAI< / abbr >
2024-12-13 14:30:22 +01:00
2024-12-17 22:50:34 +01:00
< / div >
---
layout: content
---
# Législation
**Obligation actuelle :**
- les personnes morales de droit public
- les personnes morales délégataires d’ une mission de service public
- les entreprises privées dont le chiffre d’ affaires est supérieur à 250 millions d’ euros
< div v-click >
**À partir de Juin 2025 :**
> Les entreprises employant moins de dix personnes qui fournissent des services et dont le chiffre d'affaires annuel n'excède pas deux millions d'euros.
< cite > [article L412-13 du Code de la consommation](https://www.legifrance.gouv.fr/codes/id/LEGISCTA000047284903)< / cite > (applicable au 28 juin 2025)
> Tous les sites et plateformes de commerce électronique doivent être accessibles pour les nouveaux services à partir de 2025 et pour l’ existant à partir de 2030.
Plus de détails dans [cet article d'Access 42 ](https://access42.net/transposition-directive-europeenne-ue-2019-882-accessibilite-produits-services/ )
< / div >
2024-12-13 14:30:22 +01:00
---
layout: fact
hideInToc: true
---
2024-12-17 22:50:34 +01:00
# <span class="highlight">30 %</span> de la population française <span class="visually-hidden">rencontre des difficultés au quotidien</span>
2024-12-13 14:30:22 +01:00
2024-12-17 22:50:34 +01:00
< span aria-hidden = "true" > rencontre des difficultés (limitations fonctionnelles ou restrictions importantes) au quotidien.< / span >
2024-12-16 23:40:18 +01:00
< cite > [Rapport 2024 de la DREES.](https://drees.solidarites-sante.gouv.fr/sites/default/files/2024-12/HANDICAP24MAJ061224-2.pdf)< / cite >
2024-12-13 14:30:22 +01:00
2024-12-17 22:50:34 +01:00
< hr >
**La majorité des handicaps sont invisibles.**
2024-12-16 21:25:03 +01:00
<!--
certains sont temporaires, certains arrivent avec l'âge
-->
2024-12-13 14:30:22 +01:00
---
2024-12-16 21:25:03 +01:00
layout: bullets
hideInToc: true
---
2024-12-13 14:30:22 +01:00
2024-12-19 14:07:20 +01:00
## L'accessibilité numérique englobe tous les handicaps qui affectent l'accès au Web, notamment :
2024-12-13 14:30:22 +01:00
- auditifs
- cognitifs
- neurologiques
- physiques
- psychologiques
- oraux
- visuels
---
2024-12-16 21:25:03 +01:00
layout: auto-grid
2024-12-16 23:40:18 +01:00
columns: 2
2024-12-17 12:59:36 +01:00
rows: 250px
2024-12-16 21:25:03 +01:00
---
2024-12-13 14:30:22 +01:00
2024-12-17 22:50:34 +01:00
# Exemples de <span class="highlight">technologies d'assistance</span>
2024-12-13 14:30:22 +01:00
2024-12-16 21:25:03 +01:00
::content::
< Youtube id = "nw6-eDJXWzY" / >
< Youtube id = "N9Q8oF0Lx2M" / >
< Youtube id = "SlxIEPEC_Qc" / >
< Youtube id = "LHUyDhutx80" / >
2024-12-13 14:30:22 +01:00
2024-12-17 12:59:36 +01:00
---
layout: content
2024-12-13 14:30:22 +01:00
---
2024-12-17 22:50:34 +01:00
# ​1. Éléments <span class="highlight">HTML sémantiques</span>
2024-12-13 14:30:22 +01:00
2024-12-16 23:40:18 +01:00
````md magic-move {lines: false}
2024-12-13 14:30:22 +01:00
```html
< body >
< div class = "header" >
< div class = "nav" >
< a href = "#" > Accueil< / a >
< a href = "#" > À propos< / a >
< a href = "#" > Contact< / a >
< / div >
< / div >
< div class = "main" >
< h1 > Titre de la page< / h1 >
< h2 > Titre de la section< / h2 >
< p > Contenu de la page< / p >
< / div >
< div class = "footer" >
< p > Pied de page< / p >
< / div >
< / body >
```
```html
< body >
< header >
< nav >
< ul >
< li > < a href = "#" > Accueil< / a > < / li >
< li > < a href = "#" > À propos< / a > < / li >
< li > < a href = "#" > Contact< / a > < / li >
< / ul >
< / nav >
< / header >
< main >
< h1 > Titre de la page< / h1 >
< section >
< h2 > Titre de la section< / h2 >
< p > Contenu de la page< / p >
< / section >
< / main >
< footer >
< p > Pied de page< / p >
< / footer >
< / body >
```
````
---
2024-12-16 23:40:18 +01:00
layout: auto-grid
columns: 2
2024-12-16 21:25:03 +01:00
---
2024-12-13 14:30:22 +01:00
2024-12-17 22:50:34 +01:00
# ​2. <span class="highlight">Structure</span> des titres
2024-12-13 14:30:22 +01:00
2024-12-16 23:40:18 +01:00
::content::
2024-12-13 14:30:22 +01:00
```md {all|2|3|4|none}{lines: false}
Erroné
└── h1 Titre principal
2024-12-17 12:59:36 +01:00
├── h2 Titre secondaire
2024-12-16 23:40:18 +01:00
├── h4 Titre niveau 4 // [!code error]
2024-12-13 14:30:22 +01:00
│ └── h5 Titre niveau 5
├── h2 Titre secondaire
│ ├── h2 Titre secondaire
│ ├── h3 Titre tertiaire
│ │ ├── h4 Titre niveau 4
│ │ │ └── h6 Titre niveau 6
│ └── h3 Titre tertiaire
└── h1 Titre principal
```
```md {none|all}{lines: false}
Correct
└── h1 Titre principal
├── h2 Titre secondaire
├── h2 Titre secondaire
│ └── h3 Titre tertiaire
├── h2 Titre secondaire
│ ├── h3 Titre tertiaire
│ ├── h3 Titre tertiaire
│ │ ├── h4 Titre niveau 4
│ │ │ └── h5 Titre niveau 5
│ └── h3 Titre tertiaire
└── h2 Titre secondaire
```
2024-12-17 12:59:36 +01:00
::after::
Add-on HeadingsMap : [firefox ](https://addons.mozilla.org/fr/firefox/addon/headingsmap/ ), [chrome ](https://chromewebstore.google.com/detail/headingsmap/gdaioanblnkeegccagdlnolobgjhfhhm )
2024-12-13 14:30:22 +01:00
---
2024-12-17 22:50:34 +01:00
layout: title-image
image: ours.jpg
2024-12-16 21:25:03 +01:00
---
2024-12-13 14:30:22 +01:00
2024-12-17 22:50:34 +01:00
# ​3. <span class="highlight">Formulaires</span>
2024-12-13 14:30:22 +01:00
2024-12-19 14:07:20 +01:00
- Associez **toujours** un `label` aux champs `input` , `select` , `textarea` , `meter` , `progress`
- Indiquez clairement les champs obligatoires
- Ne désactivez pas le bouton d'envoi
2024-12-13 14:30:22 +01:00
2024-12-17 12:59:36 +01:00
```html{2,3}
// [!code word:name]
< form >
2024-12-19 14:07:20 +01:00
< label for = "name" > Nom (obligatoire)< / label >
< input id = "name" type = "text" required / >
2024-12-17 12:59:36 +01:00
< / form >
2024-12-13 14:30:22 +01:00
```
2024-12-17 12:59:36 +01:00
< div v-click >
2024-12-13 14:30:22 +01:00
2024-12-17 22:50:34 +01:00
Si le `label` doit être masqué, utilisez une classe CSS `visually-hidden` (ou `sr-only` ).
2024-12-17 12:59:36 +01:00
```css
.visually-hidden {
position: absolute;
overflow: hidden;
block-size: 1px;
inline-size: 1px;
clip: rect(0 0 0 0);
clip-path: inset(100%);
white-space: nowrap;
2024-12-13 14:30:22 +01:00
}
```
< / div >
---
2024-12-17 12:59:36 +01:00
layout: content
2024-12-13 14:30:22 +01:00
---
2024-12-17 22:50:34 +01:00
< figure class = "mb-4" >
< figcaption > Facilitez le remplissage des champs avec des instructions claires, des exemples et des messages d'erreur.< / figcaption >
< div class = "grid cols-2 gap-4" >
< img src = "/images/form-1.png" alt = "" / >
< img src = "/images/form-1-error.png" alt = "" / >
< / div >
< / figure >
< div v-click >
Proposez du remplissage automatique et des claviers adaptés si besoin.
```html{2-3,5-6}
< form >
< label for = "phone" > Numéro de téléphone< / label >
< input id = "phone" type = "tel" autocomplete = "tel" inputmode = "tel" / >
< label for = "email" > Email< / label >
< input id = "email" type = "email" autocomplete = "email" inputmode = "email" / >
< / form >
```
2024-12-19 14:07:20 +01:00
< small > [Qu'est-il arrivé au champ texte ? < small > Vidéo en anglais.< / small > ](https://briefs.video/videos/what-happened-to-text-inputs/)< / small >
2024-12-17 22:50:34 +01:00
< / div >
2024-12-13 14:30:22 +01:00
---
2024-12-17 22:50:34 +01:00
layout: content
2024-12-13 14:30:22 +01:00
---
2024-12-17 22:50:34 +01:00
# ​4. Polices et <span class="highlight">typographie</span>
- unités
- utilisez des [unités relatives ](https://whatunit.com/ ) (ex. `em` , `rem` , `lh` , `ex` ) pour permettre aux utilisateurs de modifier la taille des polices
- ou des fonctions de calcul CSS (ex. `clamp()` , `calc()` )
- taille des polices
- minimum `16px` (équivalent) pour le corps de texte
- créez une [échelle typographique fluide ](https://utopia.fyi/type/calculator?c=320,18,1.2,1240,20,1.25,5,2,&s=0.75%7C0.5%7C0.25,1.5%7C2%7C3%7C4%7C6,s-l&g=s,l,xl,12 )
- alignement du texte
- ne **JAMAIS** justifier le texte
- limitez les textes centrés
- évitez les sauts de ligne forcés `<br>`
- `text-wrap: balance;` sur les titres
- familles
- préférez des polices travaillées pour leur lisibilité (ex. [Atkinson Hyperlegible ](https://brailleinstitute.org/freefont ), [Luciole ](https://luciole-vision.com/ ))
- ou conservez le choix utilisateur `font-family: system-ui, FALLBACK;`
---
layout: title-image
image: fleur.jpg
---
# ​5. Vérifiez les <span class="highlight">contrastes</span>
Sujet complexe car l'algorithme du WCAG repose uniquement sur des calculs et pas sur des tests visuels de perception.
- [Calculateur WCAG ](https://coolors.co/contrast-checker ) officiellement intégré dans le standard d'accessibilité
- [Calculateur APC ](https://www.myndex.com/BPCA/ ) plus précis mais expérimental et non intégré à un quelconque standard.
---
layout: title-image
image: pierre.jpeg
---
# ​6. <span class="highlight">Simplifiez</span> l'interface, privilégiez <span class="highlight">le contenu</span>
2024-12-19 14:07:20 +01:00
- ne cachez pas le contenu ([carousel much?](https://shouldiuseacarousel.com/), [tabs much? ](https://www.youtube.com/live/XntrwuBjE5c?feature=shared&t=1582 ))
2024-12-17 22:50:34 +01:00
- n'animez pas (trop) le contenu
`@media (prefers-reduced-motion: no-preference) { go crazy 🤪 }`
- ne gênez pas le contenu
- soulignez les liens, ne soulignez rien d'autre
- ne supprimez pas le focus
- n'utilisez pas uniquement la couleur pour indiquer un état
2024-12-19 14:07:20 +01:00
- faites des phrases courtes et [faciles à comprendre ](https://www.culture.gouv.fr/Thematiques/developpement-culturel/Culture-et-handicap/Facile-a-lire-et-a-comprendre-FALC-une-methode-utile )
2024-12-17 22:50:34 +01:00
---
layout: title-image
image: marmotte.jpg
---
2024-12-13 14:30:22 +01:00
2024-12-19 14:07:20 +01:00
# ​7. Chouchoutez <span class="highlight">les images</span> et vidéos
## images
2024-12-13 14:30:22 +01:00
2024-12-17 22:50:34 +01:00
- ajoutez systématiquement l'attribut `alt`
- `alt=""` si l'image est décorative
2024-12-19 14:07:20 +01:00
- `alt="[DESCRIPTION]"` si l'image est porteuse d'information
2024-12-17 22:50:34 +01:00
- renseignez si possible les attributs `width` et `height` pour éviter le "< span lang = "en" > layout shift</ span > "
2024-12-19 14:07:20 +01:00
- [redimensionnez, optimisez et convertissez ](https://squoosh.app/ ) dans des formats récents (ex. `webp` , `avif` )
## vidéos
- ne lancez pas la lecture automatiquement
- [redimensionnez, optimisez et convertissez ](https://handbrake.fr/ ) dans des formats récents (ex. `h265` , `av1` )
---
layout: title-image
image: tigre.avif
image-align: right
---
# ​8. Éléments <span class="highlight">obligatoires</span>
- ajoutez systématiquement les attributs :
`<html lang="[langue de la page]" dir="[sens de lecture]">`
- signalez les changements de langue dans le contenu avec `lang`
- renseignez un `title` pour chaque page
- n'utilisez pas une balise pour faire de la mise en forme (ex. `h3` à la place d'un `h2` pour le rendre plus petit).
< small > **Astuce :** créez une classe correspondant à chaque niveau de titre afin de garder la hiérarchie intacte.< / small >
```css
/* [!code word:.h2] */
h2,
.h2 {
font-size: 4rem;
font-weight: bold;
}
/* [!code word:.h3] */
h3,
.h3 {
font-size: 3rem;
font-weight: 300;
}
```
---
layout: title-image
image: surricate.jpg
---
# ​9. Trucs <span class="highlight">en plus</span>
- Designez pour `320px` de large au minimum
- Ajoutez au moins un [lien d'évitement ](https://accessibilite.numerique.gouv.fr/methode/glossaire/#liens-d-evitement-ou-d-acces-rapide )
- Ne changez pas [l'ordre de tabulation ](https://accessibilite.numerique.gouv.fr/methode/glossaire/#ordre-de-tabulation ) de la page
- Capturez le < span lang = "en" > focus</ span > dans les fenêtre modale/menu
- Proposez au moins deux systèmes de navigation (menu, plan du site, moteur de recherche)
- [N'abusez pas d'ARIA ](https://briefs.video/videos/what-is-aria-even-for/ )
> Les pages d'accueil avec de l'ARIA affichent en moyenne 34,2 % d'erreurs (détectées) en plus que celles sans ARIA.
> <small>[source](https://webaim.org/projects/million/#:~:text=Home%20pages%20with%20ARIA%20present%20averaged%2034.2%25%20more%20detected%20errors%20than%20those%20without%20ARIA)</small>
---
layout: title-image
image: field.jpg
ratio: 1fr 1fr
---
# ​10. (in)<span class="highlight">Formez-vous</span>
## Formations
- [Access42 ](https://formations.access42.net/formations/ )
- [<span lang="en">Practical Accessibility</span> ](https://practical-accessibility.today/ )
## Ressources
- [Référentiel général d’ amélioration de l’ accessibilité (RGAA) ](https://accessibilite.numerique.gouv.fr/ )
- [Blog Access42 ](https://access42.net/blog/ )
- [Webbed Briefs ](https://briefs.video/ ) (vidéo, anglais)
- [Adrian Rosseli ](https://adrianroselli.com/ ) (blog, anglais)
## Conférences
- [Paris Web ](https://www.paris-web.fr/ )
- [a11y Paris ](https://www.a11yparis.org/ )
- [CSS Day ](https://cssday.nl )
---
layout: quote
---
::quote::
# <span class="highlight">Rien n'est accessible</span> à tout le monde. Par conséquent, <span class="highlight">tout ce que vous ajoutez</span> à votre interface ne peut que la rendre <span class="highlight">moins accessible.</span> La simplicité <span class="highlight">(sobriété)</span> est le seule remède.
::default::
Heydon Pickering < cite > [The Folly of Chasing Demographics](https://www.youtube.com/watch?v=XntrwuBjE5c)< / cite >
---
src: ./pages/eco.md
hide: false
---