-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path08-programming.html
More file actions
303 lines (282 loc) · 11.4 KB
/
08-programming.html
File metadata and controls
303 lines (282 loc) · 11.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
<section id="programming">
<section>
<h2>Programmation</h2>
</section>
<section>
<h3>Tester les préférences</h3>
<p>
Avec Google Chrome, vous pouvez tester les préférences d'accessibilité en utilisant les DevTools.
</p>
<p>
Ouvrez les DevTools, allez dans l'onglet "Rendering" et cochez les options
"Emulate CSS media feature prefers-color-scheme", "Emulate CSS media feature prefers-reduced-motion"...
</p>
<p>
Pour ouvrir l'onglet "Rendering", cliquez sur les trois points dans le coin supérieur droit des DevTools,
sélectionnez "More tools" puis "Rendering".
</p>
<footer>
<a href="https://developer.chrome.com/docs/chromium/cvd" class="info" target="_blank">
Chrome DevTools - Simulating color vision deficiencies
</a>
</footer>
</section>
<section>
<h3>JavaScript - Gestion du focus</h3>
<p>
Lors de l'ouverture d'une modale ou d'un changement de contexte, il est important de
<strong>gérer le focus</strong> correctement :
</p>
<pre><code class="language-javascript">// Ouvrir une modale
function openModal(modal) {
modal.showModal();
// Déplacer le focus vers la modale
modal.querySelector('button, input, [tabindex="0"]')?.focus();
}
// Fermer et restaurer le focus
function closeModal(modal, previousFocus) {
modal.close();
previousFocus?.focus();
}</code></pre>
</section>
<section>
<h3>HTML - L'élément <dialog></h3>
<p>
L'élément <code class="language-html"><dialog></code> est une balise HTML native qui gère
automatiquement de nombreux aspects d'accessibilité :
</p>
<ul>
<li>Le rôle ARIA <code>dialog</code> est <strong>implicite</strong>.</li>
<li>Le <strong>focus est piégé</strong> (focus trap) à l'intérieur de la modale.</li>
<li>La touche <span class="keyboard-key">Échap</span> ferme la modale.</li>
<li>Le contenu en arrière-plan est marqué comme <strong>inerte</strong> (non interactif).</li>
<li>L'attribut <code>autofocus</code> permet de définir quel élément reçoit le focus à l'ouverture.</li>
</ul>
<pre><code class="language-html"><dialog id="confirm">
<h2>Confirmer la suppression</h2>
<p>Cette action est irréversible.</p>
<button onclick="this.closest('dialog').close('ok')">Confirmer</button>
<button onclick="this.closest('dialog').close()">Annuler</button>
</dialog></code></pre>
<p>
Utiliser <code class="language-html"><dialog></code> évite de devoir recréer manuellement
ces comportements avec ARIA et JavaScript.
</p>
<footer>
<a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/dialog" class="info" target="_blank">
MDN - The Dialog element
</a>
</footer>
</section>
<section>
<h3>HTML - Popover API</h3>
<p>
L'attribut <code class="language-html">popover</code> permet de créer des éléments flottants
(tooltips, menus, popovers) de manière <strong>native</strong>, sans JavaScript ni ARIA :
</p>
<pre><code class="language-html"><button popovertarget="infos">Aide</button>
<div id="infos" popover>
<p>Voici des informations complémentaires.</p>
</div></code></pre>
<p>
Le navigateur gère automatiquement :
</p>
<ul>
<li>L'<strong>affichage et la fermeture</strong> (clic extérieur, touche <span class="keyboard-key">Échap</span>).</li>
<li>Le positionnement au-dessus du reste du contenu (<strong>top layer</strong>).</li>
<li>L'association entre le bouton déclencheur et le contenu affiché.</li>
</ul>
<footer>
<a href="https://developer.mozilla.org/en-US/docs/Web/API/Popover_API" class="info" target="_blank">
MDN - Popover API
</a>
</footer>
</section>
<section>
<h3>CSS - prefers-color-scheme</h3>
<p>
La media query <code class="language-css">prefers-color-scheme</code> permet de détecter si l'utilisateur
a configuré son système pour utiliser un <strong>thème clair ou sombre</strong>.
</p>
<pre><code class="language-css">/* Thème clair par défaut */
body {
background-color: white;
color: black;
}
/* Thème sombre si l'utilisateur le préfère */
@media (prefers-color-scheme: dark) {
body {
background-color: #1a1a1a;
color: white;
}
}</code></pre>
<footer>
<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme" class="info" target="_blank">
prefers-color-scheme
</a>
</footer>
</section>
<section>
<h3>CSS - prefers-reduced-motion</h3>
<p>
La media query <code class="language-css">prefers-reduced-motion</code> permet de détecter si l'utilisateur
a demandé à <strong>réduire les animations</strong>. Cela concerne les personnes souffrant de
troubles vestibulaires (vertiges), d'épilepsie ou de migraines.
</p>
<pre><code class="language-css">/* Animation par défaut */
.element {
transition: transform 0.3s ease;
}
/* Désactiver les animations si l'utilisateur le souhaite */
@media (prefers-reduced-motion: reduce) {
.element {
transition: none;
}
}</code></pre>
<footer>
<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion" class="info" target="_blank">
prefers-reduced-motion
</a>
</footer>
</section>
<section>
<h3>CSS - prefers-contrast</h3>
<p>
La media query <code class="language-css">prefers-contrast</code> permet de détecter si l'utilisateur
a demandé un <strong>contraste plus élevé ou plus faible</strong>. Utile pour les personnes malvoyantes.
</p>
<pre><code class="language-css">/* Style par défaut */
.button {
background-color: #6200ee;
border: none;
}
/* Contraste élevé : ajouter des bordures visibles */
@media (prefers-contrast: more) {
.button {
background-color: #000;
border: 3px solid white;
}
}</code></pre>
<p>
Les valeurs possibles sont : <code>no-preference</code>, <code>more</code>, <code>less</code> et <code>custom</code>.
</p>
<footer>
<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-contrast" class="info" target="_blank">
prefers-contrast
</a>
</footer>
</section>
<section>
<h3>CSS - prefers-reduced-transparency</h3>
<p>
La media query <code class="language-css">prefers-reduced-transparency</code> permet de détecter si l'utilisateur
a demandé à <strong>réduire les effets de transparence</strong>. Cela aide les personnes ayant des
difficultés à lire du texte sur des fonds semi-transparents.
</p>
<pre><code class="language-css">/* Style par défaut avec transparence */
.modal-backdrop {
background-color: rgba(0, 0, 0, 0.5);
}
/* Fond opaque si l'utilisateur préfère */
@media (prefers-reduced-transparency: reduce) {
.modal-backdrop {
background-color: #000;
}
}</code></pre>
<footer>
<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-transparency" class="info" target="_blank">
prefers-reduced-transparency
</a>
</footer>
</section>
<section>
<h3>CSS - forced-colors</h3>
<p>
La media query <code class="language-css">forced-colors</code> permet de détecter si l'utilisateur
utilise un <strong>mode de couleurs forcées</strong> (comme le mode contraste élevé de Windows).
Dans ce mode, le navigateur remplace les couleurs par celles définies par l'utilisateur.
</p>
<pre><code class="language-css">/* Ajouter une bordure visible en mode forced-colors */
@media (forced-colors: active) {
.button {
border: 2px solid currentColor;
}
/* Empêcher le navigateur de modifier certaines couleurs */
.icon {
forced-color-adjust: none;
}
}</code></pre>
<footer>
<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/forced-colors" class="info" target="_blank">
forced-colors
</a>
</footer>
</section>
<section>
<h3>CSS - :focus-visible</h3>
<p>
La pseudo-classe <code class="language-css">:focus-visible</code> permet d'appliquer un style
<strong>uniquement lorsque le focus est pertinent</strong> pour l'utilisateur (navigation clavier).
Contrairement à <code>:focus</code>, elle ne s'applique pas lors d'un clic souris.
</p>
<pre><code class="language-css">/* Supprimer l'outline par défaut */
button:focus {
outline: none;
}
/* Afficher l'outline uniquement pour la navigation clavier */
button:focus-visible {
outline: 3px solid #005fcc;
outline-offset: 2px;
}</code></pre>
<p>
Cela permet de garder une <strong>indication visuelle pour les utilisateurs clavier</strong>
tout en évitant l'outline lors des clics souris.
</p>
<footer>
<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible" class="info" target="_blank">
:focus-visible
</a>
</footer>
</section>
<section>
<h3>CSS - any-pointer</h3>
<p>
La media query <code class="language-css">any-pointer</code> permet de détecter la
<strong>précision du dispositif de pointage</strong> disponible (souris, tactile, stylet).
</p>
<pre><code class="language-css">/* Agrandir les zones cliquables pour les écrans tactiles */
@media (any-pointer: coarse) {
button, a {
min-height: 44px;
min-width: 44px;
padding: 12px 16px;
}
}</code></pre>
<p>
Les valeurs possibles sont : <code>none</code> (pas de pointeur), <code>coarse</code> (pointeur imprécis comme le doigt)
et <code>fine</code> (pointeur précis comme la souris).
</p>
<footer>
<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/any-pointer" class="info" target="_blank">
any-pointer
</a>
</footer>
</section>
<section>
<h3>Ressources</h3>
<ul>
<li>
<a href="https://www.a11yproject.com/checklist/" target="_blank">A11y Project - Checklist</a>
</li>
<li>
<a href="https://webaim.org/" target="_blank">WebAIM - Web Accessibility In Mind</a>
</li>
<li>
<a href="https://inclusive-components.design/" target="_blank">Inclusive Components</a>
</li>
<li>
<a href="https://www.deque.com/axe/" target="_blank">Axe - Outil de test d'accessibilité</a>
</li>
</ul>
</section>
</section>