ultra11y 4.4.0 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.opencode/plugins/ultra11y.js +1 -1
- package/README.md +2 -2
- package/package.json +3 -1
- package/scripts/build-guidance-wcag.mjs +335 -0
- package/scripts/build-standards.mjs +45 -0
- package/scripts/ultra11y.mjs +1248 -118
- package/scripts/vendor/wcag-2.2-fr.json +1 -1
- package/scripts/vendor/wcag-2.2-sc-universe.json +1 -1
- package/scripts/vendor/wcag-2.2-techniques.json +840 -0
- package/scripts/vendor/wcag-2.2-text.json +1 -1
- package/skills/review-a11y/SKILL.md +1 -1
- package/skills/review-a11y/scripts/ultra11y.mjs +1248 -118
- package/skills/ultra11y/SKILL.md +1 -1
- package/skills/ultra11y/references/ci.md +71 -8
- package/skills/ultra11y/references/guidance.md +33 -5
- package/skills/ultra11y/scripts/ultra11y.mjs +1248 -118
- package/src/data/guidance/wcag.json +973 -115
- package/src/data/wcag-universe.json +1 -1
- package/src/guidance/index.ts +12 -9
- package/src/types.ts +1 -1
package/scripts/ultra11y.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import { join as join50, relative as relative5, resolve as resolve15, sep as sep
|
|
|
6
6
|
import { fileURLToPath as fileURLToPath5, pathToFileURL as pathToFileURL3 } from "url";
|
|
7
7
|
|
|
8
8
|
// src/types.ts
|
|
9
|
-
var VERSION = "4.
|
|
9
|
+
var VERSION = "4.5.0";
|
|
10
10
|
var SCHEMA_VERSION = 2;
|
|
11
11
|
|
|
12
12
|
// src/audit.ts
|
|
@@ -2289,7 +2289,7 @@ var wcag_universe_default = {
|
|
|
2289
2289
|
wcagVersion: "2.2",
|
|
2290
2290
|
source: "https://www.w3.org/TR/WCAG22/",
|
|
2291
2291
|
criteriaSource: "https://github.com/w3c/wcag",
|
|
2292
|
-
provenance: "Full WCAG 2.x SC universe (all levels incl. AAA, and the removed 4.1.1 Parsing) fetched from raw.githubusercontent.com/w3c/wcag@main on 2026-08-
|
|
2292
|
+
provenance: "Full WCAG 2.x SC universe (all levels incl. AAA, and the removed 4.1.1 Parsing) fetched from raw.githubusercontent.com/w3c/wcag@main on 2026-08-17 via `node scripts/build-standards.mjs --refresh-universe`. Classification: core-AA = ships in src/data/wcag.json (the shipped WCAG 2.2 AA core); out-of-core = WCAG AAA; removed = obsolete (4.1.1).",
|
|
2293
2293
|
criteria: [
|
|
2294
2294
|
{
|
|
2295
2295
|
id: "1.1.1",
|
|
@@ -50335,268 +50335,1398 @@ var rgaa_default2 = {
|
|
|
50335
50335
|
var wcag_default2 = {
|
|
50336
50336
|
pack: "wcag",
|
|
50337
50337
|
source: "https://www.w3.org/WAI/WCAG22/Understanding/",
|
|
50338
|
-
license: "W3C Document License",
|
|
50339
|
-
attribution: "Derived from the W3C
|
|
50338
|
+
license: "W3C Document License (code samples: W3C Software License)",
|
|
50339
|
+
attribution: "Derived from the W3C Techniques for WCAG 2.2 and the Understanding documents (https://github.com/w3c/wcag). WCAG 2.2 \xA9 W3C. Summaries are the working group's own 'In brief' text; code samples are the techniques' own examples. Generated by scripts/build-guidance-wcag.mjs \u2014 never hand-edited.",
|
|
50340
50340
|
entries: [
|
|
50341
50341
|
{
|
|
50342
|
-
id: "
|
|
50342
|
+
id: "wcag-non-text-content",
|
|
50343
|
+
criterionId: "1.1.1",
|
|
50344
|
+
wcag: ["1.1.1"],
|
|
50345
|
+
title: {
|
|
50346
|
+
en: "Non-text Content",
|
|
50347
|
+
fr: "Contenu non textuel"
|
|
50348
|
+
},
|
|
50349
|
+
summary: {
|
|
50350
|
+
en: "Create a text alternative for visual and auditory content. Non-text information is available to more people. People who can\u2019t fully see or hear content can understand it."
|
|
50351
|
+
},
|
|
50352
|
+
examples: [
|
|
50353
|
+
{
|
|
50354
|
+
lang: "html",
|
|
50355
|
+
good: '<a href="products.html">\n <img src="icon.gif" alt="">Products page\n</a>',
|
|
50356
|
+
note: {
|
|
50357
|
+
en: "Good: Combining adjacent image and text links for the same resource (H2)."
|
|
50358
|
+
}
|
|
50359
|
+
},
|
|
50360
|
+
{
|
|
50361
|
+
lang: "css",
|
|
50362
|
+
bad: 'ul#booklist li {\n padding-left: 20px;\n }\n \n ul#booklist li.new {\n background: transparent url(new.png) no-repeat top left; \n }\n \n ul#booklist li.limited {\n background: transparent url(limited.png) no-repeat top left; \n }\n \n ul#booklist li.instock {\n background: transparent url(instock.png) no-repeat top left; \n }\n \n ul#booklist li.outstock {\n background: transparent url(outstock.png) no-repeat top left; \n }</code>\n</pre>\n \n <p>It is used in this excerpt: </p>\n \n<pre><code class="language-html"><ul id="booklist">\n <li class="new">Some book</li>\n <li class="instock">Some other book</li>\n <li class="limited">A book we desperately want to get rid of</li>\n ...\n <li class="outstock">A book you actually want </li>\n</ul>',
|
|
50363
|
+
note: {
|
|
50364
|
+
en: "Bad: Failure of Success Criterion 1.1.1 due to conveying information exclusively using CSS background images (F3)."
|
|
50365
|
+
}
|
|
50366
|
+
}
|
|
50367
|
+
],
|
|
50368
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/non-text-content.html"
|
|
50369
|
+
},
|
|
50370
|
+
{
|
|
50371
|
+
id: "wcag-audio-only-and-video-only-prerecorded",
|
|
50372
|
+
criterionId: "1.2.1",
|
|
50373
|
+
wcag: ["1.2.1"],
|
|
50374
|
+
title: {
|
|
50375
|
+
en: "Audio-only and Video-only (Prerecorded)",
|
|
50376
|
+
fr: "Contenus seulement audio et seulement vid\xE9o (pr\xE9-enregistr\xE9s)"
|
|
50377
|
+
},
|
|
50378
|
+
summary: {
|
|
50379
|
+
en: "Provide an alternative when content is perceivable with only one sense. Audio and video-only content can be understood by more people. People who can\u2019t fully see or hear content can understand it."
|
|
50380
|
+
},
|
|
50381
|
+
examples: [
|
|
50382
|
+
{
|
|
50383
|
+
lang: "html",
|
|
50384
|
+
good: '<a href="../video/marslanding.mp4">\n <img src="../images/spaceship.jpg" alt="Mars landing, video-only"\n width="193" height="255"/>\n</a>\n<p><a href="mars-landing-audio.mp3">Audio description of "Mars Landing"</a></p>',
|
|
50385
|
+
note: {
|
|
50386
|
+
en: "Good: Providing audio that describes the important video content and describing it as such (G166)."
|
|
50387
|
+
}
|
|
50388
|
+
}
|
|
50389
|
+
],
|
|
50390
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/audio-only-and-video-only-prerecorded.html"
|
|
50391
|
+
},
|
|
50392
|
+
{
|
|
50393
|
+
id: "wcag-captions-prerecorded",
|
|
50394
|
+
criterionId: "1.2.2",
|
|
50395
|
+
wcag: ["1.2.2"],
|
|
50396
|
+
title: {
|
|
50397
|
+
en: "Captions (Prerecorded)",
|
|
50398
|
+
fr: "Sous-titres (pr\xE9-enregistr\xE9s)"
|
|
50399
|
+
},
|
|
50400
|
+
summary: {
|
|
50401
|
+
en: "Provide synchronized text for audio content in existing videos. Videos can be played with captions. People who are deaf or hard of hearing can understand audio in videos."
|
|
50402
|
+
},
|
|
50403
|
+
examples: [
|
|
50404
|
+
{
|
|
50405
|
+
lang: "html",
|
|
50406
|
+
good: '<video poster="myvideo.png" controls>\n <source src="myvideo.mp4" srclang="en" type="video/mp4">\n <track kind="captions" label="English" src="myvideo_en.vtt" srclang="en">\n</video>',
|
|
50407
|
+
note: {
|
|
50408
|
+
en: "Good: Using the track element to provide captions (H95)."
|
|
50409
|
+
}
|
|
50410
|
+
}
|
|
50411
|
+
],
|
|
50412
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/captions-prerecorded.html"
|
|
50413
|
+
},
|
|
50414
|
+
{
|
|
50415
|
+
id: "wcag-audio-description-or-media-alternative-prerecorded",
|
|
50416
|
+
criterionId: "1.2.3",
|
|
50417
|
+
wcag: ["1.2.3"],
|
|
50418
|
+
title: {
|
|
50419
|
+
en: "Audio Description or Media Alternative (Prerecorded)",
|
|
50420
|
+
fr: "Audio-description ou version de remplacement pour un m\xE9dia temporel (pr\xE9-enregistr\xE9)"
|
|
50421
|
+
},
|
|
50422
|
+
summary: {
|
|
50423
|
+
en: "Provide a description of the visual content in videos. Prerecorded videos can be understood by more people. People who are blind or who cannot understand the visual content can have it described."
|
|
50424
|
+
},
|
|
50425
|
+
examples: [
|
|
50426
|
+
{
|
|
50427
|
+
lang: "html",
|
|
50428
|
+
good: '<object classid="https://www.example.com/analogclock.py">\n <p>Here is some text that describes the object and its operation.</p>\n</object>',
|
|
50429
|
+
note: {
|
|
50430
|
+
en: "Good: Using the body of the object element (H53)."
|
|
50431
|
+
}
|
|
50432
|
+
}
|
|
50433
|
+
],
|
|
50434
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/audio-description-or-media-alternative-prerecorded.html"
|
|
50435
|
+
},
|
|
50436
|
+
{
|
|
50437
|
+
id: "wcag-captions-live",
|
|
50343
50438
|
criterionId: "1.2.4",
|
|
50344
50439
|
wcag: ["1.2.4"],
|
|
50345
50440
|
title: {
|
|
50346
|
-
en: "Live
|
|
50347
|
-
fr: "
|
|
50441
|
+
en: "Captions (Live)",
|
|
50442
|
+
fr: "Sous-titres (en direct)"
|
|
50348
50443
|
},
|
|
50349
50444
|
summary: {
|
|
50350
|
-
en: "
|
|
50351
|
-
|
|
50445
|
+
en: "Provide synchronized text for audio content in real-time videos. Live videos have captions. People who are deaf or hard of hearing can understand audio in real-time video content."
|
|
50446
|
+
},
|
|
50447
|
+
examples: [],
|
|
50448
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/captions-live.html"
|
|
50449
|
+
},
|
|
50450
|
+
{
|
|
50451
|
+
id: "wcag-audio-description-prerecorded",
|
|
50452
|
+
criterionId: "1.2.5",
|
|
50453
|
+
wcag: ["1.2.5"],
|
|
50454
|
+
title: {
|
|
50455
|
+
en: "Audio Description (Prerecorded)",
|
|
50456
|
+
fr: "Audio-description (pr\xE9-enregistr\xE9e)"
|
|
50457
|
+
},
|
|
50458
|
+
summary: {
|
|
50459
|
+
en: "Provide a synchronized spoken description of the visual content in videos. Videos can be played with audio descriptions. People who cannot see or understand the visual content can hear about it while playing videos."
|
|
50460
|
+
},
|
|
50461
|
+
examples: [],
|
|
50462
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/audio-description-prerecorded.html"
|
|
50463
|
+
},
|
|
50464
|
+
{
|
|
50465
|
+
id: "wcag-info-and-relationships",
|
|
50466
|
+
criterionId: "1.3.1",
|
|
50467
|
+
wcag: ["1.3.1"],
|
|
50468
|
+
title: {
|
|
50469
|
+
en: "Info and Relationships",
|
|
50470
|
+
fr: "Information et relations"
|
|
50471
|
+
},
|
|
50472
|
+
summary: {
|
|
50473
|
+
en: "Use code to reinforce relationships and information conveyed through presentation. Information about content structure is available to more people. People can adapt the presentation to suit their needs while preserving the original meaning."
|
|
50352
50474
|
},
|
|
50353
|
-
impact: "high",
|
|
50354
50475
|
examples: [
|
|
50355
50476
|
{
|
|
50356
50477
|
lang: "html",
|
|
50357
|
-
bad:
|
|
50358
|
-
good:
|
|
50478
|
+
bad: "<style>\n.heading1{\n font-family: Times, serif;\n font-size:200%;\n font-weight:bold;\n}\n</style>",
|
|
50479
|
+
good: "... What she <em>really</em> meant to say was, "This is not OK, \n it is <strong>excellent</strong>"! ...",
|
|
50359
50480
|
note: {
|
|
50360
|
-
en: "
|
|
50361
|
-
fr: "La piste doit \xEAtre aliment\xE9e en temps r\xE9el (sous-titrage humain ou reconnaissance vocale en direct). Publier une transcription apr\xE8s la diffusion rel\xE8ve d'un autre crit\xE8re."
|
|
50481
|
+
en: "Good: Using semantic markup to mark emphasized or special text (H49). Bad: Failure of Success Criterion 1.3.1 due to using changes in text presentation to convey information without using the appropriate markup or text (F2)."
|
|
50362
50482
|
}
|
|
50363
50483
|
}
|
|
50364
50484
|
],
|
|
50365
|
-
reference: "https://www.w3.org/WAI/WCAG22/Understanding/
|
|
50485
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html"
|
|
50366
50486
|
},
|
|
50367
50487
|
{
|
|
50368
|
-
id: "
|
|
50369
|
-
criterionId: "
|
|
50370
|
-
wcag: ["
|
|
50488
|
+
id: "wcag-meaningful-sequence",
|
|
50489
|
+
criterionId: "1.3.2",
|
|
50490
|
+
wcag: ["1.3.2"],
|
|
50371
50491
|
title: {
|
|
50372
|
-
en: "
|
|
50373
|
-
fr: "
|
|
50492
|
+
en: "Meaningful Sequence",
|
|
50493
|
+
fr: "Ordre s\xE9quentiel logique"
|
|
50374
50494
|
},
|
|
50375
50495
|
summary: {
|
|
50376
|
-
en: "
|
|
50377
|
-
|
|
50496
|
+
en: "Use code to preserve meaningful content order. The order of content can be understood by more people. Assistive technology can present content to users in the proper order."
|
|
50497
|
+
},
|
|
50498
|
+
examples: [
|
|
50499
|
+
{
|
|
50500
|
+
lang: "html",
|
|
50501
|
+
bad: '<h1>W e l c o m e</h1></code>\n</pre>\n\n <p> can also be used to add white space, producing similar failures:</p>\n\n<pre><code class="language-html"><h1>H E L L O</h1>',
|
|
50502
|
+
good: '<p>The title says "<span lang="he" dir="rtl">\u05E4\u05E2\u05D9\u05DC\u05D5\u05EA \u05D4\u05D1\u05D9\u05E0\u05D0\u05D5\u05DD, W3C</span>" in Hebrew.</p>',
|
|
50503
|
+
note: {
|
|
50504
|
+
en: "Good: Using the dir attribute on an inline element to resolve problems with nested directional runs (H56). Bad: Failure of Success Criterion 1.3.2 due to using white space characters to control spacing within a word (F32)."
|
|
50505
|
+
}
|
|
50506
|
+
}
|
|
50507
|
+
],
|
|
50508
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/meaningful-sequence.html"
|
|
50509
|
+
},
|
|
50510
|
+
{
|
|
50511
|
+
id: "wcag-sensory-characteristics",
|
|
50512
|
+
criterionId: "1.3.3",
|
|
50513
|
+
wcag: ["1.3.3"],
|
|
50514
|
+
title: {
|
|
50515
|
+
en: "Sensory Characteristics",
|
|
50516
|
+
fr: "Caract\xE9ristiques sensorielles"
|
|
50517
|
+
},
|
|
50518
|
+
summary: {
|
|
50519
|
+
en: "Describe controls by name, not just by appearance or location. Instructions are understandable by more people. People who are blind or have low vision need non-visual instructions."
|
|
50520
|
+
},
|
|
50521
|
+
examples: [
|
|
50522
|
+
{
|
|
50523
|
+
lang: "html",
|
|
50524
|
+
good: '<form class="wrapper">\n <h1>Sign up to our mailing list</h1>\n <div role="note">\n Complete the form and then press the lower-right (<i>sign up</i>) button.\n </div>\n <div class="form-group">\n <label for="full-name">Your name</label>\n <input autocomplete="name" id="full-name" type="text">\n </div>\n <div class="form-group">\n <label for="email">Your email address</label>\n <input autocomplete="email" id="email" type="text">\n </div>\n <button type="reset">Cancel</button>\n <button type="submit">Sign up</button>\n</form>',
|
|
50525
|
+
note: {
|
|
50526
|
+
en: "Good: Providing textual identification of items that otherwise rely only on sensory information to be understood (G96)."
|
|
50527
|
+
}
|
|
50528
|
+
}
|
|
50529
|
+
],
|
|
50530
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/sensory-characteristics.html"
|
|
50531
|
+
},
|
|
50532
|
+
{
|
|
50533
|
+
id: "wcag-orientation",
|
|
50534
|
+
criterionId: "1.3.4",
|
|
50535
|
+
wcag: ["1.3.4"],
|
|
50536
|
+
title: {
|
|
50537
|
+
en: "Orientation",
|
|
50538
|
+
fr: "Orientation"
|
|
50539
|
+
},
|
|
50540
|
+
summary: {
|
|
50541
|
+
en: "Don't lock content to either portrait or landscape presentation. Devices can be used in any orientation. Wheelchair users and others may have devices mounted in a fixed orientation."
|
|
50542
|
+
},
|
|
50543
|
+
examples: [
|
|
50544
|
+
{
|
|
50545
|
+
lang: "html",
|
|
50546
|
+
bad: '<style>\n/* Orientation "door slam" Styling */\n\n@media all and (orientation: landscape) {\n .rotate { display: block; }\n .content { display: none; }\n}\n\n@media all and (orientation: portrait) {\n .rotate { display: none; }\n .content { display: block; }\n}\n\n.rotate {\n text-align: center;\n font-size: 2rem;\n margin-top: 4rem;\n}\n</style>',
|
|
50547
|
+
note: {
|
|
50548
|
+
en: "Bad: Failure of Success Criterion 1.3.4 due to showing a message asking to reorient device (F100)."
|
|
50549
|
+
}
|
|
50550
|
+
}
|
|
50551
|
+
],
|
|
50552
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/orientation.html"
|
|
50553
|
+
},
|
|
50554
|
+
{
|
|
50555
|
+
id: "wcag-identify-input-purpose",
|
|
50556
|
+
criterionId: "1.3.5",
|
|
50557
|
+
wcag: ["1.3.5"],
|
|
50558
|
+
title: {
|
|
50559
|
+
en: "Identify Input Purpose",
|
|
50560
|
+
fr: "Identifier la finalit\xE9 de la saisie"
|
|
50561
|
+
},
|
|
50562
|
+
summary: {
|
|
50563
|
+
en: "Use code to indicate the purpose of common inputs, where technology allows. It is easier to fill out forms. Some people with cognitive disabilities may not understand the input's purpose from the label alone."
|
|
50564
|
+
},
|
|
50565
|
+
examples: [
|
|
50566
|
+
{
|
|
50567
|
+
lang: "html",
|
|
50568
|
+
good: '<form method="post" action="step2">\n <div>\n <label for="fname">First Name</label>\n <input autocomplete="given-name" id="fname" type="text">\n </div>\n <div>\n <label for="lname">Last Name</label>\n <input autocomplete="family-name" id="lname" type="text">\n </div>\n <div>\n <label for="cc-num">Credit card number:</label>\n <input autocomplete="cc-number" id="cc-num" type="text">\n </div>\n <div>\n <label for="exp-date">Expiry Date:</label>\n <input autocomplete="cc-exp" id="exp-date" type="month">\n </div>\n <div>\n <input type="submit" value="Continue">\n </div>\n</form>',
|
|
50569
|
+
note: {
|
|
50570
|
+
en: "Good: Using HTML autocomplete attributes (H98)."
|
|
50571
|
+
}
|
|
50572
|
+
}
|
|
50573
|
+
],
|
|
50574
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/identify-input-purpose.html"
|
|
50575
|
+
},
|
|
50576
|
+
{
|
|
50577
|
+
id: "wcag-use-of-color",
|
|
50578
|
+
criterionId: "1.4.1",
|
|
50579
|
+
wcag: ["1.4.1"],
|
|
50580
|
+
title: {
|
|
50581
|
+
en: "Use of Color",
|
|
50582
|
+
fr: "Utilisation de la couleur"
|
|
50583
|
+
},
|
|
50584
|
+
summary: {
|
|
50585
|
+
en: "Use information in addition to color, such as shape or text, to convey meaning. Color is not the only way of distinguishing information. Not everyone sees colors or sees them the same way."
|
|
50586
|
+
},
|
|
50587
|
+
examples: [
|
|
50588
|
+
{
|
|
50589
|
+
lang: "html",
|
|
50590
|
+
bad: '<head>\n <style>\n p a:link {text-decoration: none}\n p a:visited {text-decoration: none}\n p a:active {text-decoration: none}\n p a:hover {text-decoration: underline; color: red;}\n </style>\n</head>\n<body>\n <p>There are many resources to find out more about the \n <a href="rain-in-spain.html">rain in Spain</a>.\n </p>\n</body>',
|
|
50591
|
+
good: '<style>\n .required {\n color:#ec0000;\n }\n</style>\n<label for="lastname" class="required">Last name (required):</label>\n<input autocomplete="family-name" id="lastname" type="text" value="">',
|
|
50592
|
+
note: {
|
|
50593
|
+
en: "Good: Including a text cue for colored form control labels (G205). Bad: Failure of Success Criterion 1.4.1 due to creating links that are not visually evident without color vision (F73)."
|
|
50594
|
+
}
|
|
50595
|
+
}
|
|
50596
|
+
],
|
|
50597
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html"
|
|
50598
|
+
},
|
|
50599
|
+
{
|
|
50600
|
+
id: "wcag-audio-control",
|
|
50601
|
+
criterionId: "1.4.2",
|
|
50602
|
+
wcag: ["1.4.2"],
|
|
50603
|
+
title: {
|
|
50604
|
+
en: "Audio Control",
|
|
50605
|
+
fr: "Contr\xF4le du son"
|
|
50606
|
+
},
|
|
50607
|
+
summary: {
|
|
50608
|
+
en: "If you play audio content automatically, let people turn it down or off. A page that plays music or sounds doesn't disrupt people. Sound distracts some people, and also interferes with screen readers."
|
|
50609
|
+
},
|
|
50610
|
+
examples: [],
|
|
50611
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/audio-control.html"
|
|
50612
|
+
},
|
|
50613
|
+
{
|
|
50614
|
+
id: "wcag-contrast-minimum",
|
|
50615
|
+
criterionId: "1.4.3",
|
|
50616
|
+
wcag: ["1.4.3"],
|
|
50617
|
+
title: {
|
|
50618
|
+
en: "Contrast (Minimum)",
|
|
50619
|
+
fr: "Contraste (minimum)"
|
|
50620
|
+
},
|
|
50621
|
+
summary: {
|
|
50622
|
+
en: "Provide sufficient contrast between text and its background. Text can be seen by more people. Some people cannot read faint text."
|
|
50623
|
+
},
|
|
50624
|
+
examples: [
|
|
50625
|
+
{
|
|
50626
|
+
lang: "html",
|
|
50627
|
+
bad: '<!doctype>\n <html lang="en">\n <head>\n <title>Setting the canvas background</title>\n <style>\n body {background-color:white}\n </style>\n </head>\n <body>\n <p>My background is white.</p>\n </body>\n</html>',
|
|
50628
|
+
note: {
|
|
50629
|
+
en: "Bad: Failure of Success Criterion 1.4.3, 1.4.6 and 1.4.8 due to specifying foreground colors without specifying background colors or vice versa (F24)."
|
|
50630
|
+
}
|
|
50631
|
+
}
|
|
50632
|
+
],
|
|
50633
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html"
|
|
50634
|
+
},
|
|
50635
|
+
{
|
|
50636
|
+
id: "wcag-resize-text",
|
|
50637
|
+
criterionId: "1.4.4",
|
|
50638
|
+
wcag: ["1.4.4"],
|
|
50639
|
+
title: {
|
|
50640
|
+
en: "Resize Text",
|
|
50641
|
+
fr: "Redimensionnement du texte"
|
|
50642
|
+
},
|
|
50643
|
+
summary: {
|
|
50644
|
+
en: "Ensure text can be doubled in size. Text can be enlarged. Some people can only read text when it is bigger."
|
|
50645
|
+
},
|
|
50646
|
+
examples: [
|
|
50647
|
+
{
|
|
50648
|
+
lang: "css",
|
|
50649
|
+
good: "#nav_menu { width: 20em; height: 100em; }\n#nav_list { font-size: 100%; }",
|
|
50650
|
+
note: {
|
|
50651
|
+
en: "Good: Specifying the size of text containers using em units (C28)."
|
|
50652
|
+
}
|
|
50653
|
+
},
|
|
50654
|
+
{
|
|
50655
|
+
lang: "html",
|
|
50656
|
+
bad: '<div style="font-size:100%; width:120px; height:100px; border: thin solid gray;"> \n Now is the time for all good men to come to the aid of their country. \n</div>\n<p>The quick brown fox jumps over the lazy dog.</p>',
|
|
50657
|
+
note: {
|
|
50658
|
+
en: "Bad: Failure of Success Criterion 1.4.4 when resizing visually rendered text up to 200 percent causes the text, image or controls to be clipped, truncated or obscured (F69)."
|
|
50659
|
+
}
|
|
50660
|
+
}
|
|
50661
|
+
],
|
|
50662
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/resize-text.html"
|
|
50663
|
+
},
|
|
50664
|
+
{
|
|
50665
|
+
id: "wcag-images-of-text",
|
|
50666
|
+
criterionId: "1.4.5",
|
|
50667
|
+
wcag: ["1.4.5"],
|
|
50668
|
+
title: {
|
|
50669
|
+
en: "Images of Text",
|
|
50670
|
+
fr: "Texte sous forme d\u2019image"
|
|
50671
|
+
},
|
|
50672
|
+
summary: {
|
|
50673
|
+
en: "Use text instead of pictures of text. Users can adjust how text is presented. People cannot alter how text looks in images."
|
|
50674
|
+
},
|
|
50675
|
+
examples: [
|
|
50676
|
+
{
|
|
50677
|
+
lang: "html",
|
|
50678
|
+
good: "<p>The JavaScript method to convert a string to uppercase is <code>toUpperCase()</code>.</p>",
|
|
50679
|
+
note: {
|
|
50680
|
+
en: "Good: Using CSS to control visual presentation of text (C22)."
|
|
50681
|
+
}
|
|
50682
|
+
}
|
|
50683
|
+
],
|
|
50684
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/images-of-text.html"
|
|
50685
|
+
},
|
|
50686
|
+
{
|
|
50687
|
+
id: "wcag-reflow",
|
|
50688
|
+
criterionId: "1.4.10",
|
|
50689
|
+
wcag: ["1.4.10"],
|
|
50690
|
+
title: {
|
|
50691
|
+
en: "Reflow",
|
|
50692
|
+
fr: "Redistribution"
|
|
50693
|
+
},
|
|
50694
|
+
summary: {
|
|
50695
|
+
en: "Make lines of text reflow within the viewport. Content can be enlarged without increasing line length. People who need bigger text find it difficult if they must scroll to read long lines."
|
|
50696
|
+
},
|
|
50697
|
+
examples: [
|
|
50698
|
+
{
|
|
50699
|
+
lang: "html",
|
|
50700
|
+
good: `<!DOCTYPE html>
|
|
50701
|
+
<html lang="en">
|
|
50702
|
+
<head>
|
|
50703
|
+
<meta charset="UTF-8">
|
|
50704
|
+
<title>CSS: Using media queries and grid CSS to reflow columns</title>
|
|
50705
|
+
<style>
|
|
50706
|
+
|
|
50707
|
+
/* Reflow Styling */
|
|
50708
|
+
header { grid-area: header; }
|
|
50709
|
+
main { grid-area: main; }
|
|
50710
|
+
aside { grid-area: aside; }
|
|
50711
|
+
footer { grid-area: footer; }
|
|
50712
|
+
|
|
50713
|
+
.grid,
|
|
50714
|
+
.subgrid {
|
|
50715
|
+
display: grid;
|
|
50716
|
+
grid-template-columns: minmax(0, 1fr);
|
|
50717
|
+
}
|
|
50718
|
+
|
|
50719
|
+
.grid {
|
|
50720
|
+
grid-template-areas:
|
|
50721
|
+
'header'
|
|
50722
|
+
'main'
|
|
50723
|
+
'aside'
|
|
50724
|
+
'footer';
|
|
50725
|
+
width: 100%;
|
|
50726
|
+
}
|
|
50727
|
+
|
|
50728
|
+
.subgrid {
|
|
50729
|
+
width: calc(100% + 2rem);
|
|
50730
|
+
margin: 0 -1rem;
|
|
50731
|
+
}
|
|
50732
|
+
|
|
50733
|
+
.grid-item,
|
|
50734
|
+
.subgrid-item {
|
|
50735
|
+
padding: 1rem;
|
|
50736
|
+
}
|
|
50737
|
+
|
|
50738
|
+
@media all and (min-width: 576px) {
|
|
50739
|
+
.subgrid {
|
|
50740
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
50741
|
+
margin-bottom: 1rem;
|
|
50742
|
+
}
|
|
50743
|
+
.subgrid-item {
|
|
50744
|
+
padding-bottom: 0.25rem;
|
|
50745
|
+
}
|
|
50746
|
+
}
|
|
50747
|
+
|
|
50748
|
+
@media all and (min-width: 992px) {
|
|
50749
|
+
.grid {
|
|
50750
|
+
grid-template-areas:
|
|
50751
|
+
'header header header'
|
|
50752
|
+
'main main aside'
|
|
50753
|
+
'footer footer footer';
|
|
50754
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr);
|
|
50755
|
+
}
|
|
50756
|
+
}
|
|
50757
|
+
|
|
50758
|
+
</style>
|
|
50759
|
+
|
|
50760
|
+
</head>
|
|
50761
|
+
|
|
50762
|
+
<body class="grid">
|
|
50763
|
+
|
|
50764
|
+
<header class="grid-item">
|
|
50765
|
+
...
|
|
50766
|
+
</header>
|
|
50767
|
+
|
|
50768
|
+
<main class="grid-item">
|
|
50769
|
+
...
|
|
50770
|
+
...
|
|
50771
|
+
<div class="subgrid">
|
|
50772
|
+
<div class="subgrid-item">
|
|
50773
|
+
...
|
|
50774
|
+
</div>
|
|
50775
|
+
<div class="subgrid-item">
|
|
50776
|
+
...
|
|
50777
|
+
</div>
|
|
50778
|
+
</div>
|
|
50779
|
+
</main>
|
|
50780
|
+
|
|
50781
|
+
<aside class="grid-item">
|
|
50782
|
+
...
|
|
50783
|
+
</aside>
|
|
50784
|
+
|
|
50785
|
+
<footer class="grid-item">
|
|
50786
|
+
...
|
|
50787
|
+
</footer>
|
|
50788
|
+
|
|
50789
|
+
</body>
|
|
50790
|
+
</html>`,
|
|
50791
|
+
note: {
|
|
50792
|
+
en: "Good: Using media queries and grid CSS to reflow columns (C32)."
|
|
50793
|
+
}
|
|
50794
|
+
}
|
|
50795
|
+
],
|
|
50796
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/reflow.html"
|
|
50797
|
+
},
|
|
50798
|
+
{
|
|
50799
|
+
id: "wcag-non-text-contrast",
|
|
50800
|
+
criterionId: "1.4.11",
|
|
50801
|
+
wcag: ["1.4.11"],
|
|
50802
|
+
title: {
|
|
50803
|
+
en: "Non-text Contrast",
|
|
50804
|
+
fr: "Contraste du contenu non textuel"
|
|
50805
|
+
},
|
|
50806
|
+
summary: {
|
|
50807
|
+
en: "Ensure meaningful visual cues achieve 3:1 against the background. Important visual information meets the same minimum contrast required for larger text. Some people cannot see elements with low contrast."
|
|
50378
50808
|
},
|
|
50379
|
-
impact: "high",
|
|
50380
50809
|
examples: [
|
|
50381
50810
|
{
|
|
50382
50811
|
lang: "css",
|
|
50383
|
-
bad: "
|
|
50384
|
-
good: "
|
|
50812
|
+
bad: ":focus {outline: none}",
|
|
50813
|
+
good: "*:focus {\n /* inner indicator */\n outline: 2px #F9F9F9 solid;\n outline-offset: 0;\n /* outer indicator */\n box-shadow: 0 0 0 4px #193146;\n}",
|
|
50814
|
+
note: {
|
|
50815
|
+
en: "Good: Creating a two-color focus indicator to ensure sufficient contrast with all components (C40). Bad: Failure of Success Criterion 1.4.11, 2.4.7 and 2.4.13 due to styling element outlines and borders in a way that removes or renders non-visible the visual focus indicator (F78)."
|
|
50816
|
+
}
|
|
50817
|
+
}
|
|
50818
|
+
],
|
|
50819
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/non-text-contrast.html"
|
|
50820
|
+
},
|
|
50821
|
+
{
|
|
50822
|
+
id: "wcag-text-spacing",
|
|
50823
|
+
criterionId: "1.4.12",
|
|
50824
|
+
wcag: ["1.4.12"],
|
|
50825
|
+
title: {
|
|
50826
|
+
en: "Text Spacing",
|
|
50827
|
+
fr: "Espacement du texte"
|
|
50828
|
+
},
|
|
50829
|
+
summary: {
|
|
50830
|
+
en: "Users can adjust text spacing to make it easier to read. Some people need text with different spacing or font characteristics."
|
|
50831
|
+
},
|
|
50832
|
+
examples: [
|
|
50833
|
+
{
|
|
50834
|
+
lang: "html",
|
|
50835
|
+
bad: '<div style="font-size:100%; width:130px; height:125px; border: thin solid gray;">\n <p style="margin:0;">Now is the time for all good men to come to \n the aid of their country.</p>\n</div>\n<p style="margin:0;">The quick brown fox jumps over the lazy dog.</p>',
|
|
50836
|
+
good: "<style>\n/* CSS: No height property is set.*/\n</style>",
|
|
50837
|
+
note: {
|
|
50838
|
+
en: "Good: Allowing for text spacing override (C36). Bad: Failure of Success Criterion 1.4.12 due to clipped or overlapped content when text spacing is adjusted (F104)."
|
|
50839
|
+
}
|
|
50840
|
+
}
|
|
50841
|
+
],
|
|
50842
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/text-spacing.html"
|
|
50843
|
+
},
|
|
50844
|
+
{
|
|
50845
|
+
id: "wcag-content-on-hover-or-focus",
|
|
50846
|
+
criterionId: "1.4.13",
|
|
50847
|
+
wcag: ["1.4.13"],
|
|
50848
|
+
title: {
|
|
50849
|
+
en: "Content on Hover or Focus",
|
|
50850
|
+
fr: "Contenu au survol ou au focus"
|
|
50851
|
+
},
|
|
50852
|
+
summary: {
|
|
50853
|
+
en: "If hover or focus causes content changes, ensure interaction is predictable. More users can perceive and dismiss non-persistent content. Unpredictable temporary content can be hard for some to consume and may disrupt others."
|
|
50854
|
+
},
|
|
50855
|
+
examples: [
|
|
50856
|
+
{
|
|
50857
|
+
lang: "html",
|
|
50858
|
+
good: '<p>This is the \n <a class="a-and-tooltip" id="parent" href="index.html">trigger\n <span id="popup" role="tooltip">And this additional text \n gives additional context on the trigger term\n </span>\n </a>.\n Text and popup are <strong>in one link (a)</strong> element.\n</p>',
|
|
50859
|
+
note: {
|
|
50860
|
+
en: "Good: Making content on focus or hover hoverable, dismissible, and persistent (SCR39)."
|
|
50861
|
+
}
|
|
50862
|
+
}
|
|
50863
|
+
],
|
|
50864
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/content-on-hover-or-focus.html"
|
|
50865
|
+
},
|
|
50866
|
+
{
|
|
50867
|
+
id: "wcag-keyboard",
|
|
50868
|
+
criterionId: "2.1.1",
|
|
50869
|
+
wcag: ["2.1.1"],
|
|
50870
|
+
title: {
|
|
50871
|
+
en: "Keyboard",
|
|
50872
|
+
fr: "Clavier"
|
|
50873
|
+
},
|
|
50874
|
+
summary: {
|
|
50875
|
+
en: "Ensure pointer actions have a keyboard equivalent. Everything can be done with a keyboard except freehand movements. Many people rely on the keyboard interface, including blind and some mobility impaired people."
|
|
50876
|
+
},
|
|
50877
|
+
examples: [
|
|
50878
|
+
{
|
|
50879
|
+
lang: "html",
|
|
50880
|
+
bad: '<p><img onmousedown="nextPage();" src="nextarrow.gif" alt="Go to next page"></p>',
|
|
50881
|
+
good: '<a href="https://example.com">Example Site</a>',
|
|
50385
50882
|
note: {
|
|
50386
|
-
en: "
|
|
50387
|
-
fr: "Un cycle de 0,15 s clignote environ sept fois par seconde. Respecter prefers-reduced-motion est une bonne pratique mais ne suffit pas : le comportement par d\xE9faut doit d\xE9j\xE0 \xEAtre s\xFBr."
|
|
50883
|
+
en: "Good: Using HTML form controls and links (H91). Bad: Failure of Success Criterion 2.1.1 due to using only pointing-device-specific event handlers (including gesture) for a function (F54)."
|
|
50388
50884
|
}
|
|
50389
50885
|
}
|
|
50390
50886
|
],
|
|
50887
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/keyboard.html"
|
|
50888
|
+
},
|
|
50889
|
+
{
|
|
50890
|
+
id: "wcag-no-keyboard-trap",
|
|
50891
|
+
criterionId: "2.1.2",
|
|
50892
|
+
wcag: ["2.1.2"],
|
|
50893
|
+
title: {
|
|
50894
|
+
en: "No Keyboard Trap",
|
|
50895
|
+
fr: "Pas de pi\xE8ge au clavier"
|
|
50896
|
+
},
|
|
50897
|
+
summary: {
|
|
50898
|
+
en: "Ensure users always know how to navigate away from components. Keyboard users don't get stuck. People who rely on the keyboard often have no other means to navigate."
|
|
50899
|
+
},
|
|
50900
|
+
examples: [],
|
|
50901
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/no-keyboard-trap.html"
|
|
50902
|
+
},
|
|
50903
|
+
{
|
|
50904
|
+
id: "wcag-character-key-shortcuts",
|
|
50905
|
+
criterionId: "2.1.4",
|
|
50906
|
+
wcag: ["2.1.4"],
|
|
50907
|
+
title: {
|
|
50908
|
+
en: "Character Key Shortcuts",
|
|
50909
|
+
fr: "Raccourcis clavier utilisant des caract\xE8res"
|
|
50910
|
+
},
|
|
50911
|
+
summary: {
|
|
50912
|
+
en: "Ensure character-only shortcut keys can be turned off or modified. Reduce accidental activation of keyboard shortcuts. Character-key shortcuts are easy to accidentally trigger, especially with speech input."
|
|
50913
|
+
},
|
|
50914
|
+
examples: [],
|
|
50915
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/character-key-shortcuts.html"
|
|
50916
|
+
},
|
|
50917
|
+
{
|
|
50918
|
+
id: "wcag-timing-adjustable",
|
|
50919
|
+
criterionId: "2.2.1",
|
|
50920
|
+
wcag: ["2.2.1"],
|
|
50921
|
+
title: {
|
|
50922
|
+
en: "Timing Adjustable",
|
|
50923
|
+
fr: "R\xE9glage du d\xE9lai"
|
|
50924
|
+
},
|
|
50925
|
+
summary: {
|
|
50926
|
+
en: "Let users turn off, adjust, or extend time limits. Users have adequate time to complete tasks. People with disabilities may need more time to complete activities."
|
|
50927
|
+
},
|
|
50928
|
+
examples: [
|
|
50929
|
+
{
|
|
50930
|
+
lang: "html",
|
|
50931
|
+
bad: `<!doctype>
|
|
50932
|
+
<html lang="en">
|
|
50933
|
+
<head>
|
|
50934
|
+
<title>Do not use this!</title>
|
|
50935
|
+
<meta http-equiv="refresh" content="5; url=https://www.example.com/newpage">
|
|
50936
|
+
</head>
|
|
50937
|
+
<body>
|
|
50938
|
+
<p>
|
|
50939
|
+
If your browser supports Refresh, you'll be transported to our
|
|
50940
|
+
<a href="https://www.example.com/newpage">new site</a> in 5 seconds,
|
|
50941
|
+
otherwise select the link manually.
|
|
50942
|
+
</p>
|
|
50943
|
+
</body>
|
|
50944
|
+
</html>`,
|
|
50945
|
+
good: `<!doctype html>
|
|
50946
|
+
<html lang="en">
|
|
50947
|
+
<head>
|
|
50948
|
+
<meta charset="utf-8">
|
|
50949
|
+
<title>Stock Market Quotes</title>
|
|
50950
|
+
<script>
|
|
50951
|
+
function timeControl() {
|
|
50952
|
+
// set timer for 4 min 40 sec, then ask user to confirm.
|
|
50953
|
+
setTimeout('userCheck()', 280000);
|
|
50954
|
+
}
|
|
50955
|
+
|
|
50956
|
+
function userCheck() {
|
|
50957
|
+
// set page refresh for 20 sec
|
|
50958
|
+
var id=setTimeout('pageReload()', 20000);
|
|
50959
|
+
// If user selects "OK" the timer is reset
|
|
50960
|
+
// else the page will refresh from the server.
|
|
50961
|
+
if (confirm("This page is set to refresh in 20 seconds.
|
|
50962
|
+
Would you like more time?"))
|
|
50963
|
+
{
|
|
50964
|
+
clearTimeout(id);
|
|
50965
|
+
timeControl();
|
|
50966
|
+
}
|
|
50967
|
+
}
|
|
50968
|
+
|
|
50969
|
+
function pageReload() {
|
|
50970
|
+
window.location.reload(true);
|
|
50971
|
+
}
|
|
50972
|
+
|
|
50973
|
+
timeControl();
|
|
50974
|
+
</script>
|
|
50975
|
+
</head>
|
|
50976
|
+
<body>
|
|
50977
|
+
<h1>Stock Market Quotes</h1>
|
|
50978
|
+
...
|
|
50979
|
+
</body>
|
|
50980
|
+
</html>`,
|
|
50981
|
+
note: {
|
|
50982
|
+
en: "Good: Providing a script that warns the user a time limit is about to expire (SCR16). Bad: Failure due to using meta redirect with a time limit (F40)."
|
|
50983
|
+
}
|
|
50984
|
+
}
|
|
50985
|
+
],
|
|
50986
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/timing-adjustable.html"
|
|
50987
|
+
},
|
|
50988
|
+
{
|
|
50989
|
+
id: "wcag-pause-stop-hide",
|
|
50990
|
+
criterionId: "2.2.2",
|
|
50991
|
+
wcag: ["2.2.2"],
|
|
50992
|
+
title: {
|
|
50993
|
+
en: "Pause, Stop, Hide",
|
|
50994
|
+
fr: "Mettre en pause, arr\xEAter, masquer"
|
|
50995
|
+
},
|
|
50996
|
+
summary: {
|
|
50997
|
+
en: "Let users control content changes that occur in parallel with other content. Fewer users are distracted by content that updates or moves. Some people with cognitive disabilities and attention deficits are distracted by continuous movement."
|
|
50998
|
+
},
|
|
50999
|
+
examples: [
|
|
51000
|
+
{
|
|
51001
|
+
lang: "html",
|
|
51002
|
+
bad: '<script>\n // blink "on" state\n function show(){\n document.getElementById("blink1").style.visibility = "visible";\n window.setTimeout(hide, 450);\n }\n \n // blink "off" state\n function hide(){\n document.getElementById("blink1").style.visibility = "hidden";\n window.setTimeout(show, 450);\n }\n\n // kick it off\n show();\n</script>',
|
|
51003
|
+
good: '...\n<div id="scroller">\n <p id="tag">This text will scroll and a Pause/Scroll link will be present \n when JavaScript and CSS are supported and active.</p>\n</div>\n...',
|
|
51004
|
+
note: {
|
|
51005
|
+
en: "Good: Using script to scroll content, and providing a mechanism to pause it (SCR33). Bad: Failure of Success Criterion 2.2.2 due to a script that causes a blink effect without a mechanism to stop the blinking at 5 seconds or less (F50)."
|
|
51006
|
+
}
|
|
51007
|
+
}
|
|
51008
|
+
],
|
|
51009
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/pause-stop-hide.html"
|
|
51010
|
+
},
|
|
51011
|
+
{
|
|
51012
|
+
id: "wcag-three-flashes-or-below-threshold",
|
|
51013
|
+
criterionId: "2.3.1",
|
|
51014
|
+
wcag: ["2.3.1"],
|
|
51015
|
+
title: {
|
|
51016
|
+
en: "Three Flashes or Below Threshold",
|
|
51017
|
+
fr: "Pas plus de trois flashs ou sous le seuil critique"
|
|
51018
|
+
},
|
|
51019
|
+
summary: {
|
|
51020
|
+
en: "Avoid content that flashes, or keep it under thresholds. Content does not trigger seizures. Flashing content can cause migraines, dizziness, nausea, and seizures."
|
|
51021
|
+
},
|
|
51022
|
+
examples: [],
|
|
50391
51023
|
reference: "https://www.w3.org/WAI/WCAG22/Understanding/three-flashes-or-below-threshold.html"
|
|
50392
51024
|
},
|
|
50393
51025
|
{
|
|
50394
|
-
id: "
|
|
51026
|
+
id: "wcag-bypass-blocks",
|
|
51027
|
+
criterionId: "2.4.1",
|
|
51028
|
+
wcag: ["2.4.1"],
|
|
51029
|
+
title: {
|
|
51030
|
+
en: "Bypass Blocks",
|
|
51031
|
+
fr: "Contourner des blocs"
|
|
51032
|
+
},
|
|
51033
|
+
summary: {
|
|
51034
|
+
en: "Provide a means of skipping repeating content. Users can more easily navigate by keyboard. Users reliant on the keyboard interface can move around pages efficiently."
|
|
51035
|
+
},
|
|
51036
|
+
examples: [
|
|
51037
|
+
{
|
|
51038
|
+
lang: "html",
|
|
51039
|
+
good: '<h1>Search Technical Periodicals</h1>\n <h2>Search</h2>\n <form action="/search" role="search">\n <label for="searchInput">Enter search topic:</label>\n <input id="searchInput" type="text">\n <input type="submit" value="Search">\n </form>\n <section>\n <h2>Available Periodicals</h2>\n <ul>\n <li><a href="https://example.com/pcoder">Professional Coder</a></li>\n <li><a href="https://example.com/algo">Algorithms</a></li>\n <li><a href="https://example.com/jse">Journal of Software Engineering</a></li>\n </ul>\n </section>\n <section>\n <h2>Search Results</h2>\n ... search results are returned in this section ...\n </section>',
|
|
51040
|
+
note: {
|
|
51041
|
+
en: "Good: Providing heading elements at the beginning of each section of content (H69)."
|
|
51042
|
+
}
|
|
51043
|
+
}
|
|
51044
|
+
],
|
|
51045
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/bypass-blocks.html"
|
|
51046
|
+
},
|
|
51047
|
+
{
|
|
51048
|
+
id: "wcag-page-titled",
|
|
51049
|
+
criterionId: "2.4.2",
|
|
51050
|
+
wcag: ["2.4.2"],
|
|
51051
|
+
title: {
|
|
51052
|
+
en: "Page Titled",
|
|
51053
|
+
fr: "Titre de page"
|
|
51054
|
+
},
|
|
51055
|
+
summary: {
|
|
51056
|
+
en: "Provide a descriptive page title using appropriate technology. Each web page has a meaningful title. Page titles help users identify and distinguish different pages."
|
|
51057
|
+
},
|
|
51058
|
+
examples: [
|
|
51059
|
+
{
|
|
51060
|
+
lang: "html",
|
|
51061
|
+
good: '<!doctype html>\n<html lang="en">\n <head>\n <title>The World Wide Web Consortium</title> \n </head>\n <body>\n ... \n </body> \n</html>',
|
|
51062
|
+
note: {
|
|
51063
|
+
en: "Good: Providing a title using the title element (H25)."
|
|
51064
|
+
}
|
|
51065
|
+
}
|
|
51066
|
+
],
|
|
51067
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/page-titled.html"
|
|
51068
|
+
},
|
|
51069
|
+
{
|
|
51070
|
+
id: "wcag-focus-order",
|
|
51071
|
+
criterionId: "2.4.3",
|
|
51072
|
+
wcag: ["2.4.3"],
|
|
51073
|
+
title: {
|
|
51074
|
+
en: "Focus Order",
|
|
51075
|
+
fr: "Parcours du focus"
|
|
51076
|
+
},
|
|
51077
|
+
summary: {
|
|
51078
|
+
en: "Elements receive focus in an order that preserves meaning. Keyboard users navigate content in a correct order. Navigating a site or application with only the keyboard will make sense."
|
|
51079
|
+
},
|
|
51080
|
+
examples: [
|
|
51081
|
+
{
|
|
51082
|
+
lang: "html",
|
|
51083
|
+
bad: '<ol>\n <li><a href="main.html" tabindex="1">Homepage</a></li>\n <li><a href="chapter1.html" tabindex="4">Chapter 1</a></li>\n <li><a href="chapter2.html" tabindex="3">Chapter 2</a></li>\n <li><a href="chapter3.html" tabindex="2">Chapter 3</a></li>\n</ol>',
|
|
51084
|
+
good: '<!doctype html>\n<html lang="en">\n <head>\n <meta charset="utf-8">\n <meta name="viewport" content="width=device-width,\n initial-scale=1, shrink-to-fit=no">\n <title>Turbo Encabulator News</title>\n </head>\n <body>\n <main>\n <h1>All The News About Turbo Encabulators</h1>\n <button class="open-modal" type="button">Sign up to our mailing list!</button>\n </main>\n <dialog aria-labelledby="dialog-heading" id="mailing-list-dialog">\n <h1 id="dialog-heading" tabindex="-1">Sign up to our mailing list</h1>\n <form>\n <p class="req-note">All form fields are required.</p>\n <div>\n <label for="fname">First Name</label>\n <input aria-required="true" autocomplete="given-name" id="fname" type="text">\n </div>\n <div>\n <label for="lname">Last Name</label>\n <input aria-required="true" autocomplete="family-name" id="lname" type="text">\n </div>\n <div>\n <label for="email">Email address</label>\n <input aria-required="true" autocomplete="email" id="email" type="text">\n </div>\n <button class="sign-up" type="submit">Sign up</button>\n </form>\n <form method="dialog">\n <button aria-label="close" class="close-modal">×</button>\n </form>\n </dialog>\n </body>\n</html>',
|
|
51085
|
+
note: {
|
|
51086
|
+
en: "Good: Creating modal dialogs with the HTML dialog element (H102). Bad: Failure of Success Criterion 2.4.3 due to using tabindex to create a tab order that does not preserve meaning and operability (F44)."
|
|
51087
|
+
}
|
|
51088
|
+
}
|
|
51089
|
+
],
|
|
51090
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/focus-order.html"
|
|
51091
|
+
},
|
|
51092
|
+
{
|
|
51093
|
+
id: "wcag-link-purpose-in-context",
|
|
51094
|
+
criterionId: "2.4.4",
|
|
51095
|
+
wcag: ["2.4.4"],
|
|
51096
|
+
title: {
|
|
51097
|
+
en: "Link Purpose (In Context)",
|
|
51098
|
+
fr: "Fonction du lien (selon le contexte)"
|
|
51099
|
+
},
|
|
51100
|
+
summary: {
|
|
51101
|
+
en: "Provide descriptive names or context for all links. Users understand what each link will do. People with visual and cognitive disabilities can navigate more easily."
|
|
51102
|
+
},
|
|
51103
|
+
examples: [
|
|
51104
|
+
{
|
|
51105
|
+
lang: "html",
|
|
51106
|
+
bad: `<p>A British businessman has racked up 2 million flyer miles and plans to
|
|
51107
|
+
travel on the world's first commercial tourism flights to space.</p>
|
|
51108
|
+
<p><a href="ff.html">Read More...</a></p>`,
|
|
51109
|
+
good: '<a href="routes.html">\n Current routes at Boulders Climbing Gym\n</a>',
|
|
51110
|
+
note: {
|
|
51111
|
+
en: "Good: Providing link text that describes the purpose of a link for anchor elements (H30). Bad: Failure of Success Criterion 2.4.4 due to providing link context only in content that is not related to the link (F63)."
|
|
51112
|
+
}
|
|
51113
|
+
}
|
|
51114
|
+
],
|
|
51115
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/link-purpose-in-context.html"
|
|
51116
|
+
},
|
|
51117
|
+
{
|
|
51118
|
+
id: "wcag-multiple-ways",
|
|
50395
51119
|
criterionId: "2.4.5",
|
|
50396
51120
|
wcag: ["2.4.5"],
|
|
50397
51121
|
title: {
|
|
50398
|
-
en: "
|
|
50399
|
-
fr: "
|
|
51122
|
+
en: "Multiple Ways",
|
|
51123
|
+
fr: "Acc\xE8s multiples"
|
|
50400
51124
|
},
|
|
50401
51125
|
summary: {
|
|
50402
|
-
en: "
|
|
50403
|
-
|
|
51126
|
+
en: "Provide at least two options for reaching the same content. Users can get to content in multiple ways. Not everyone can navigate content in the same way."
|
|
51127
|
+
},
|
|
51128
|
+
examples: [],
|
|
51129
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/multiple-ways.html"
|
|
51130
|
+
},
|
|
51131
|
+
{
|
|
51132
|
+
id: "wcag-headings-and-labels",
|
|
51133
|
+
criterionId: "2.4.6",
|
|
51134
|
+
wcag: ["2.4.6"],
|
|
51135
|
+
title: {
|
|
51136
|
+
en: "Headings and Labels",
|
|
51137
|
+
fr: "En-t\xEAtes et \xE9tiquettes"
|
|
51138
|
+
},
|
|
51139
|
+
summary: {
|
|
51140
|
+
en: "Provide descriptive headings and labels A page's content is described in headings and labels People can orient themselves, especially those with cognitive or visual disabilities."
|
|
50404
51141
|
},
|
|
50405
|
-
impact: "medium",
|
|
50406
51142
|
examples: [
|
|
50407
51143
|
{
|
|
50408
51144
|
lang: "html",
|
|
50409
|
-
|
|
50410
|
-
good: '<nav aria-label="Main">\n <a href="/products">Products</a>\n <a href="/support">Support</a>\n</nav>\n<form role="search" action="/search">\n <label for="q">Search the site</label>\n <input id="q" name="q" type="search">\n <button type="submit">Search</button>\n</form>\n<a href="/sitemap">Sitemap</a>',
|
|
51145
|
+
good: "<h1>Disaster preparation</h1>\n<h2>Flood preparation</h2>\n<h2>Fire preparation</h2>",
|
|
50411
51146
|
note: {
|
|
50412
|
-
en: "
|
|
50413
|
-
fr: "Deux m\xE9canismes, pas deux liens vers le m\xEAme menu. Une recherche et un plan du site sont chacun un second moyen ; une barre de navigation dupliqu\xE9e non."
|
|
51147
|
+
en: "Good: Providing descriptive headings (G130)."
|
|
50414
51148
|
}
|
|
50415
51149
|
}
|
|
50416
51150
|
],
|
|
50417
|
-
reference: "https://www.w3.org/WAI/WCAG22/Understanding/
|
|
51151
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/headings-and-labels.html"
|
|
50418
51152
|
},
|
|
50419
51153
|
{
|
|
50420
|
-
id: "focus-
|
|
51154
|
+
id: "wcag-focus-visible",
|
|
51155
|
+
criterionId: "2.4.7",
|
|
51156
|
+
wcag: ["2.4.7"],
|
|
51157
|
+
title: {
|
|
51158
|
+
en: "Focus Visible",
|
|
51159
|
+
fr: "Visibilit\xE9 du focus"
|
|
51160
|
+
},
|
|
51161
|
+
summary: {
|
|
51162
|
+
en: "Ensure each item receiving focus has a visible indicator. Users know which element has keyboard focus. Without a focus indicator, sighted keyboard users cannot operate the page."
|
|
51163
|
+
},
|
|
51164
|
+
examples: [
|
|
51165
|
+
{
|
|
51166
|
+
lang: "html",
|
|
51167
|
+
bad: '<input type="submit" onFocus="this.blur();">',
|
|
51168
|
+
good: '<nav id="main-nav">\n <ul>\n <li>Home</li>\n <li><a href="/services">Services</a></li>\n <li><a href="/projects">Projects</a></li>\n <li><a href="/demos">Demos</a></li>\n <li><a href="/about-us">About us</a></li>\n <li><a href="/contact-us">Contact us</a></li>\n <li><a href="/links">Links</a></li>\n </ul>\n<nav>',
|
|
51169
|
+
note: {
|
|
51170
|
+
en: "Good: Using CSS to change the presentation of a user interface component when it receives focus (C15). Bad: Failure of Success Criteria 2.1.1, 2.4.7, 2.4.13, and 3.2.1 due to using script to remove focus when focus is received (F55)."
|
|
51171
|
+
}
|
|
51172
|
+
}
|
|
51173
|
+
],
|
|
51174
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/focus-visible.html"
|
|
51175
|
+
},
|
|
51176
|
+
{
|
|
51177
|
+
id: "wcag-focus-not-obscured-minimum",
|
|
50421
51178
|
criterionId: "2.4.11",
|
|
50422
51179
|
wcag: ["2.4.11"],
|
|
50423
51180
|
title: {
|
|
50424
|
-
en: "
|
|
50425
|
-
fr: "
|
|
51181
|
+
en: "Focus Not Obscured (Minimum)",
|
|
51182
|
+
fr: "Focus non masqu\xE9 (minimum)"
|
|
50426
51183
|
},
|
|
50427
51184
|
summary: {
|
|
50428
|
-
en: "
|
|
50429
|
-
fr: "Quand un composant re\xE7oit le focus clavier, il ne doit pas \xEAtre enti\xE8rement recouvert par un contenu de l'auteur : en-t\xEAte ou pied de page collant, bandeau cookies. Une personne naviguant au clavier qui ne voit plus o\xF9 est le focus a perdu la page."
|
|
51185
|
+
en: "Ensure when an item gets keyboard focus, it is at least partially visible. Keep the focused item visible. People who can't use a mouse need to see what has keyboard focus."
|
|
50430
51186
|
},
|
|
50431
|
-
impact: "high",
|
|
50432
51187
|
examples: [
|
|
50433
51188
|
{
|
|
50434
|
-
lang: "
|
|
50435
|
-
|
|
50436
|
-
|
|
51189
|
+
lang: "html",
|
|
51190
|
+
good: `<!doctype html>
|
|
51191
|
+
<html lang="en">
|
|
51192
|
+
<head>
|
|
51193
|
+
<meta charset="utf-8">
|
|
51194
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
51195
|
+
<title>Using CSS scroll-padding to un-obscure content</title>
|
|
51196
|
+
<style>
|
|
51197
|
+
...
|
|
51198
|
+
|
|
51199
|
+
:root{
|
|
51200
|
+
--height-dialog: 400px;
|
|
51201
|
+
--breathing-room: 20px;
|
|
51202
|
+
--scroll-padding: calc(var(--height-dialog) + var(--breathing-room));
|
|
51203
|
+
}
|
|
51204
|
+
|
|
51205
|
+
.wrapper {
|
|
51206
|
+
display:grid;
|
|
51207
|
+
gap:1rem;
|
|
51208
|
+
grid-template-columns:repeat(9, 1fr);
|
|
51209
|
+
grid-template-rows:8rem auto minmax(10rem, max-content);
|
|
51210
|
+
min-block-size: 100vh;
|
|
51211
|
+
}
|
|
51212
|
+
|
|
51213
|
+
.wrapper > * {
|
|
51214
|
+
border:1px solid var(--black);
|
|
51215
|
+
padding:1rem;
|
|
51216
|
+
}
|
|
51217
|
+
|
|
51218
|
+
header {
|
|
51219
|
+
grid-column:1 / -1;
|
|
51220
|
+
grid-row:1;
|
|
51221
|
+
}
|
|
51222
|
+
|
|
51223
|
+
main {
|
|
51224
|
+
grid-column:1 / 8;
|
|
51225
|
+
}
|
|
51226
|
+
|
|
51227
|
+
aside {
|
|
51228
|
+
grid-column:8 / 10;
|
|
51229
|
+
}
|
|
51230
|
+
|
|
51231
|
+
footer {
|
|
51232
|
+
grid-column:1 / -1;
|
|
51233
|
+
}
|
|
51234
|
+
|
|
51235
|
+
@media (max-width:50rem) {
|
|
51236
|
+
main {
|
|
51237
|
+
grid-column:1 / -1;
|
|
51238
|
+
}
|
|
51239
|
+
|
|
51240
|
+
aside {
|
|
51241
|
+
grid-column:1 / -1;
|
|
51242
|
+
}
|
|
51243
|
+
}
|
|
51244
|
+
|
|
51245
|
+
.fixed-position-banner {
|
|
51246
|
+
background:var(--banner-background);
|
|
51247
|
+
border:3px solid var(--banner-border);
|
|
51248
|
+
margin-block-end:0.5rem;
|
|
51249
|
+
padding:1rem 1rem 5rem;
|
|
51250
|
+
position:relative;
|
|
51251
|
+
width:calc(100vw - 1rem);
|
|
51252
|
+
}
|
|
51253
|
+
|
|
51254
|
+
@media (min-width: 50rem) {
|
|
51255
|
+
html {
|
|
51256
|
+
padding-bottom:var(--height-dialog);
|
|
51257
|
+
scroll-padding-bottom:var(--scroll-padding);
|
|
51258
|
+
}
|
|
51259
|
+
|
|
51260
|
+
.fixed-position-banner {
|
|
51261
|
+
margin-block-end:0;
|
|
51262
|
+
position:fixed;
|
|
51263
|
+
inset:auto 0 0 0;
|
|
51264
|
+
}
|
|
51265
|
+
}
|
|
51266
|
+
...
|
|
51267
|
+
</style>
|
|
51268
|
+
</head>
|
|
51269
|
+
<body>
|
|
51270
|
+
<dialog class="fixed-position-banner">
|
|
51271
|
+
<h2 tabindex="-1">Fixed-Position Banner</h2>
|
|
51272
|
+
<button aria-label="close fixed-position banner" class="close-banner" type="button">
|
|
51273
|
+
...
|
|
51274
|
+
</button>
|
|
51275
|
+
</dialog>
|
|
51276
|
+
<div class="wrapper">
|
|
51277
|
+
<header>
|
|
51278
|
+
<p>Header Content</p>
|
|
51279
|
+
</header>
|
|
51280
|
+
<main>
|
|
51281
|
+
<h1>Main Content</h1>
|
|
51282
|
+
</main>
|
|
51283
|
+
<aside>
|
|
51284
|
+
<h2>Sidebar Content</h2>
|
|
51285
|
+
<p><a href="https://example.com">Here's an example link in the sidebar</a>.</p>
|
|
51286
|
+
</aside>
|
|
51287
|
+
<footer>
|
|
51288
|
+
<h2>Footer Content</h2>
|
|
51289
|
+
<p><a href="https://example.com">Here's an example link in the footer</a>.</p>
|
|
51290
|
+
</footer>
|
|
51291
|
+
</div>
|
|
51292
|
+
<script>
|
|
51293
|
+
window.addEventListener('DOMContentLoaded', () => {
|
|
51294
|
+
const elFixedBanner = document.querySelector('dialog');
|
|
51295
|
+
const elCloseBannerBtn = document.querySelector(".close-banner");
|
|
51296
|
+
|
|
51297
|
+
elFixedBanner.show();
|
|
51298
|
+
|
|
51299
|
+
const getDialogHeight = () => {
|
|
51300
|
+
const height = elFixedBanner.offsetHeight;
|
|
51301
|
+
document.documentElement.style.setProperty('--height-dialog', \`\${height}px\`);
|
|
51302
|
+
document.documentElement.style.setProperty('--breathing-room', \`\${height ? 20 : 0}px\`);
|
|
51303
|
+
}
|
|
51304
|
+
|
|
51305
|
+
const observer = new ResizeObserver(getDialogHeight);
|
|
51306
|
+
observer.observe(elFixedBanner);
|
|
51307
|
+
|
|
51308
|
+
elCloseBannerBtn.addEventListener("click", function(e){
|
|
51309
|
+
elFixedBanner.close();
|
|
51310
|
+
}, false);
|
|
51311
|
+
});
|
|
51312
|
+
</script>
|
|
51313
|
+
</body>
|
|
51314
|
+
</html>`,
|
|
50437
51315
|
note: {
|
|
50438
|
-
en: "
|
|
50439
|
-
fr: "scroll-margin emp\xEAche le navigateur de coller l'\xE9l\xE9ment focalis\xE9 contre la barre fixe. \xC0 v\xE9rifier en tabulant r\xE9ellement dans la page, pas en lisant la feuille de styles : ce crit\xE8re se tranche au rendu."
|
|
51316
|
+
en: "Good: Using CSS scroll-padding to un-obscure content (C43)."
|
|
50440
51317
|
}
|
|
50441
51318
|
}
|
|
50442
51319
|
],
|
|
50443
51320
|
reference: "https://www.w3.org/WAI/WCAG22/Understanding/focus-not-obscured-minimum.html"
|
|
50444
51321
|
},
|
|
50445
51322
|
{
|
|
50446
|
-
id: "pointer-
|
|
50447
|
-
criterionId: "2.5.
|
|
50448
|
-
wcag: ["2.5.
|
|
51323
|
+
id: "wcag-pointer-gestures",
|
|
51324
|
+
criterionId: "2.5.1",
|
|
51325
|
+
wcag: ["2.5.1"],
|
|
50449
51326
|
title: {
|
|
50450
|
-
en: "
|
|
50451
|
-
fr: "
|
|
51327
|
+
en: "Pointer Gestures",
|
|
51328
|
+
fr: "Gestes pour le contr\xF4le du pointeur"
|
|
50452
51329
|
},
|
|
50453
51330
|
summary: {
|
|
50454
|
-
en: "
|
|
50455
|
-
|
|
51331
|
+
en: "Provide single-point operation for all functions. Let users operate touchscreens with one finger and reduced gestures. Not everyone can perform complex and multi-touch gestures."
|
|
51332
|
+
},
|
|
51333
|
+
examples: [],
|
|
51334
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/pointer-gestures.html"
|
|
51335
|
+
},
|
|
51336
|
+
{
|
|
51337
|
+
id: "wcag-pointer-cancellation",
|
|
51338
|
+
criterionId: "2.5.2",
|
|
51339
|
+
wcag: ["2.5.2"],
|
|
51340
|
+
title: {
|
|
51341
|
+
en: "Pointer Cancellation",
|
|
51342
|
+
fr: "Annulation de l\u2019action du pointeur"
|
|
51343
|
+
},
|
|
51344
|
+
summary: {
|
|
51345
|
+
en: "Make pointer cancellation predictable and consistent. Reduce accidental activation of controls by mouse or touch. Make it easier for anyone to recover from something they didn\u2019t mean to do."
|
|
50456
51346
|
},
|
|
50457
|
-
impact: "high",
|
|
50458
51347
|
examples: [
|
|
50459
51348
|
{
|
|
50460
51349
|
lang: "html",
|
|
50461
|
-
bad: '
|
|
50462
|
-
good: '<ul id="queue" data-sortable="drag">\n <li draggable="true">\n First task\n <button type="button" data-move="up">Move up</button>\n <button type="button" data-move="down">Move down</button>\n </li>\n</ul>',
|
|
51350
|
+
bad: '<!-- modal dialog with a form -->\n...\n<button id="close" type="button">Close</button>\n...',
|
|
50463
51351
|
note: {
|
|
50464
|
-
en: "
|
|
50465
|
-
fr: "Le glissement reste ; un chemin en pointeur simple est ajout\xE9 \xE0 c\xF4t\xE9. L'exception est le cas o\xF9 le glissement est essentiel \xE0 la fonction, comme le dessin \xE0 main lev\xE9e."
|
|
51352
|
+
en: "Bad: Failure of Success Criterion 2.5.2 due to activating a control on the down-event (F101)."
|
|
50466
51353
|
}
|
|
50467
51354
|
}
|
|
50468
51355
|
],
|
|
51356
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/pointer-cancellation.html"
|
|
51357
|
+
},
|
|
51358
|
+
{
|
|
51359
|
+
id: "wcag-label-in-name",
|
|
51360
|
+
criterionId: "2.5.3",
|
|
51361
|
+
wcag: ["2.5.3"],
|
|
51362
|
+
title: {
|
|
51363
|
+
en: "Label in Name",
|
|
51364
|
+
fr: "\xC9tiquette dans le nom"
|
|
51365
|
+
},
|
|
51366
|
+
summary: {
|
|
51367
|
+
en: "Where practical, make the control\u2019s text label and name match. The visual label for controls is a trigger for speech activation. People who operate with voice interaction use the visible labels in their commands."
|
|
51368
|
+
},
|
|
51369
|
+
examples: [
|
|
51370
|
+
{
|
|
51371
|
+
lang: "html",
|
|
51372
|
+
bad: '<button id="sitesearch" aria-label="Find in this site">Go</button>',
|
|
51373
|
+
good: '<p>Go to our <a href="url-to-page-about-code.html">Code of conduct</a></p>',
|
|
51374
|
+
note: {
|
|
51375
|
+
en: "Good: Matching the accessible name to the visible label (G211). Bad: Failure due to the accessible name not containing the visible label text (F96)."
|
|
51376
|
+
}
|
|
51377
|
+
}
|
|
51378
|
+
],
|
|
51379
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/label-in-name.html"
|
|
51380
|
+
},
|
|
51381
|
+
{
|
|
51382
|
+
id: "wcag-motion-actuation",
|
|
51383
|
+
criterionId: "2.5.4",
|
|
51384
|
+
wcag: ["2.5.4"],
|
|
51385
|
+
title: {
|
|
51386
|
+
en: "Motion Actuation",
|
|
51387
|
+
fr: "Activation par le mouvement"
|
|
51388
|
+
},
|
|
51389
|
+
summary: {
|
|
51390
|
+
en: "Don't rely solely on device motion to control page content. Content is not dependent on a user's ability to move a device. Some people cannot hold or move a device steadily."
|
|
51391
|
+
},
|
|
51392
|
+
examples: [],
|
|
51393
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/motion-actuation.html"
|
|
51394
|
+
},
|
|
51395
|
+
{
|
|
51396
|
+
id: "wcag-dragging-movements",
|
|
51397
|
+
criterionId: "2.5.7",
|
|
51398
|
+
wcag: ["2.5.7"],
|
|
51399
|
+
title: {
|
|
51400
|
+
en: "Dragging Movements",
|
|
51401
|
+
fr: "Mouvements de glissement"
|
|
51402
|
+
},
|
|
51403
|
+
summary: {
|
|
51404
|
+
en: "For any action that involves dragging, provide a simple pointer alternative. Don\u2019t rely on dragging for user actions. Some people cannot use a mouse to drag items."
|
|
51405
|
+
},
|
|
51406
|
+
examples: [],
|
|
50469
51407
|
reference: "https://www.w3.org/WAI/WCAG22/Understanding/dragging-movements.html"
|
|
50470
51408
|
},
|
|
50471
51409
|
{
|
|
50472
|
-
id: "
|
|
51410
|
+
id: "wcag-target-size-minimum",
|
|
50473
51411
|
criterionId: "2.5.8",
|
|
50474
51412
|
wcag: ["2.5.8"],
|
|
50475
51413
|
title: {
|
|
50476
|
-
en: "
|
|
50477
|
-
fr: "
|
|
51414
|
+
en: "Target Size (Minimum)",
|
|
51415
|
+
fr: "Taille de la cible (minimum)"
|
|
50478
51416
|
},
|
|
50479
51417
|
summary: {
|
|
50480
|
-
en: "
|
|
50481
|
-
fr: "Une cible de moins de 24\xD724 pixels CSS doit \xEAtre assez espac\xE9e pour qu'un cercle de 24 pixels centr\xE9 dessus ne touche aucune autre cible. Des contr\xF4les petits et serr\xE9s sont difficiles \xE0 atteindre en cas de tremblement ou d'usage \xE0 une main sur \xE9cran tactile."
|
|
51418
|
+
en: "Ensure targets meet a minimum size or have sufficient spacing around them. Make controls easier to activate. Some people with physical impairments cannot click small buttons that are close together."
|
|
50482
51419
|
},
|
|
50483
|
-
impact: "medium",
|
|
50484
51420
|
examples: [
|
|
50485
51421
|
{
|
|
50486
|
-
lang: "
|
|
50487
|
-
|
|
50488
|
-
good: ".icon-button {\n min-width: 24px;\n min-height: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}",
|
|
51422
|
+
lang: "html",
|
|
51423
|
+
good: '<nav aria-label="pagination">\n <ol>\n <li><a class="previous">previous</a></li>\n <li><a aria-current="page">1</li>\n <li><a href="/page-2">2</a></li>\n <li><a href="/page-3">3</a></li>\n <li><a href="/page-4">4</a></li>\n <li><a href="/page-5">5</a></li>\n <li><a href="/pages-6-10">next</a></li>\n </ol>\n</nav>',
|
|
50489
51424
|
note: {
|
|
50490
|
-
en: "
|
|
50491
|
-
fr: "Les 24 px concernent la cible, pas l'ic\xF4ne : le padding compte. Les liens en ligne dans une phrase sont except\xE9s, comme les cibles dimensionn\xE9es par le navigateur."
|
|
51425
|
+
en: "Good: Using min-height and min-width on target container to ensure sufficient target spacing (C42)."
|
|
50492
51426
|
}
|
|
50493
51427
|
}
|
|
50494
51428
|
],
|
|
50495
51429
|
reference: "https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html"
|
|
50496
51430
|
},
|
|
50497
51431
|
{
|
|
50498
|
-
id: "
|
|
51432
|
+
id: "wcag-language-of-page",
|
|
51433
|
+
criterionId: "3.1.1",
|
|
51434
|
+
wcag: ["3.1.1"],
|
|
51435
|
+
title: {
|
|
51436
|
+
en: "Language of Page",
|
|
51437
|
+
fr: "Langue de la page"
|
|
51438
|
+
},
|
|
51439
|
+
summary: {
|
|
51440
|
+
en: "Indicate the predominant language on a page. Assistive technology can determine the language of a page. People using assistive technology get information in the correct language."
|
|
51441
|
+
},
|
|
51442
|
+
examples: [
|
|
51443
|
+
{
|
|
51444
|
+
lang: "html",
|
|
51445
|
+
good: '<!doctype html>\n<html lang="fr">\n<head>\n <meta charset="utf-8">\n <title>document \xE9crit en fran\xE7ais</title>\n</head>\n<body>\n ... document \xE9crit en fran\xE7ais ...\n</body>\n</html>',
|
|
51446
|
+
note: {
|
|
51447
|
+
en: "Good: Using the language attribute on the HTML element (H57)."
|
|
51448
|
+
}
|
|
51449
|
+
}
|
|
51450
|
+
],
|
|
51451
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/language-of-page.html"
|
|
51452
|
+
},
|
|
51453
|
+
{
|
|
51454
|
+
id: "wcag-language-of-parts",
|
|
51455
|
+
criterionId: "3.1.2",
|
|
51456
|
+
wcag: ["3.1.2"],
|
|
51457
|
+
title: {
|
|
51458
|
+
en: "Language of Parts",
|
|
51459
|
+
fr: "Langue d\u2019un passage"
|
|
51460
|
+
},
|
|
51461
|
+
summary: {
|
|
51462
|
+
en: "Indicate when words are in a different language. Assistive technology can identify the languages used within a page. People using assistive technology get information in the correct language."
|
|
51463
|
+
},
|
|
51464
|
+
examples: [],
|
|
51465
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/language-of-parts.html"
|
|
51466
|
+
},
|
|
51467
|
+
{
|
|
51468
|
+
id: "wcag-on-focus",
|
|
51469
|
+
criterionId: "3.2.1",
|
|
51470
|
+
wcag: ["3.2.1"],
|
|
51471
|
+
title: {
|
|
51472
|
+
en: "On Focus",
|
|
51473
|
+
fr: "Au focus"
|
|
51474
|
+
},
|
|
51475
|
+
summary: {
|
|
51476
|
+
en: "Do not change a user's context when items get focus. Content can be navigated more predictably. Content that behaves predictably is especially important to people with disabilities."
|
|
51477
|
+
},
|
|
51478
|
+
examples: [
|
|
51479
|
+
{
|
|
51480
|
+
lang: "html",
|
|
51481
|
+
bad: '<input type="submit" onFocus="this.blur();">',
|
|
51482
|
+
note: {
|
|
51483
|
+
en: "Bad: Failure of Success Criteria 2.1.1, 2.4.7, 2.4.13, and 3.2.1 due to using script to remove focus when focus is received (F55)."
|
|
51484
|
+
}
|
|
51485
|
+
}
|
|
51486
|
+
],
|
|
51487
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/on-focus.html"
|
|
51488
|
+
},
|
|
51489
|
+
{
|
|
51490
|
+
id: "wcag-on-input",
|
|
51491
|
+
criterionId: "3.2.2",
|
|
51492
|
+
wcag: ["3.2.2"],
|
|
51493
|
+
title: {
|
|
51494
|
+
en: "On Input",
|
|
51495
|
+
fr: "\xC0 la saisie"
|
|
51496
|
+
},
|
|
51497
|
+
summary: {
|
|
51498
|
+
en: "Forewarn users if their context will change based on their input. Content can be operated more predictably. Content that behaves predictably is especially important to people with disabilities."
|
|
51499
|
+
},
|
|
51500
|
+
examples: [
|
|
51501
|
+
{
|
|
51502
|
+
lang: "html",
|
|
51503
|
+
bad: '<form method="get" id="form1">\n <input type="text" name="text1" size="3" maxlength="3"> - \n <input type="text" name="text2" size="3" maxlength="3"> - \n <input type="text" name="text3" size="4" maxlength="4" onchange="form1.submit();">\n </form>',
|
|
51504
|
+
good: '<form action="/subscribe" method="post">\n <p>Enter your email address to subscribe to our mailing list.</p>\n <label for="address">Your email address:</label>\n <input autocomplete="email" id="address" name="address" type="text"> \n <input type="submit" value="Subscribe">\n</form>',
|
|
51505
|
+
note: {
|
|
51506
|
+
en: "Good: Providing submit buttons (H32). Bad: Failure of Success Criterion 3.2.2 due to automatically submitting a form and presenting new content without prior warning when the last field in the form is given a value (F36)."
|
|
51507
|
+
}
|
|
51508
|
+
}
|
|
51509
|
+
],
|
|
51510
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/on-input.html"
|
|
51511
|
+
},
|
|
51512
|
+
{
|
|
51513
|
+
id: "wcag-consistent-navigation",
|
|
51514
|
+
criterionId: "3.2.3",
|
|
51515
|
+
wcag: ["3.2.3"],
|
|
51516
|
+
title: {
|
|
51517
|
+
en: "Consistent Navigation",
|
|
51518
|
+
fr: "Navigation coh\xE9rente"
|
|
51519
|
+
},
|
|
51520
|
+
summary: {
|
|
51521
|
+
en: "Consistently order navigation that repeats across multiple pages. Content can be navigated more predictably. Content that behaves predictably is especially important to people with disabilities."
|
|
51522
|
+
},
|
|
51523
|
+
examples: [
|
|
51524
|
+
{
|
|
51525
|
+
lang: "html",
|
|
51526
|
+
bad: '<nav>\n <ul>\n <li><a href="brazil.html">Brazil</a></li>\n <li><a href="canada.html">Canada</a></li>\n <li><a href="germany.html">Germany</a></li>\n <li><a href="poland.html">Poland</a></li>\n </ul>\n</nav>',
|
|
51527
|
+
note: {
|
|
51528
|
+
en: "Bad: Failure of Success Criterion 3.2.3 due to presenting navigation links in a different relative order on different pages (F66)."
|
|
51529
|
+
}
|
|
51530
|
+
}
|
|
51531
|
+
],
|
|
51532
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/consistent-navigation.html"
|
|
51533
|
+
},
|
|
51534
|
+
{
|
|
51535
|
+
id: "wcag-consistent-identification",
|
|
51536
|
+
criterionId: "3.2.4",
|
|
51537
|
+
wcag: ["3.2.4"],
|
|
51538
|
+
title: {
|
|
51539
|
+
en: "Consistent Identification",
|
|
51540
|
+
fr: "Identification coh\xE9rente"
|
|
51541
|
+
},
|
|
51542
|
+
summary: {
|
|
51543
|
+
en: "Identify repeating functions consistently. Actions are more predictable across pages. Consistently identified actions are especially important to people with disabilities."
|
|
51544
|
+
},
|
|
51545
|
+
examples: [],
|
|
51546
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/consistent-identification.html"
|
|
51547
|
+
},
|
|
51548
|
+
{
|
|
51549
|
+
id: "wcag-consistent-help",
|
|
50499
51550
|
criterionId: "3.2.6",
|
|
50500
51551
|
wcag: ["3.2.6"],
|
|
50501
51552
|
title: {
|
|
50502
|
-
en: "Help
|
|
50503
|
-
fr: "
|
|
51553
|
+
en: "Consistent Help",
|
|
51554
|
+
fr: "Aide coh\xE9rente"
|
|
50504
51555
|
},
|
|
50505
51556
|
summary: {
|
|
50506
|
-
en: "
|
|
50507
|
-
|
|
51557
|
+
en: "Put help in the same place when it is on multiple pages. Make it easier to find help and support. People who need help can find it more easily if it's in the same place."
|
|
51558
|
+
},
|
|
51559
|
+
examples: [],
|
|
51560
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/consistent-help.html"
|
|
51561
|
+
},
|
|
51562
|
+
{
|
|
51563
|
+
id: "wcag-error-identification",
|
|
51564
|
+
criterionId: "3.3.1",
|
|
51565
|
+
wcag: ["3.3.1"],
|
|
51566
|
+
title: {
|
|
51567
|
+
en: "Error Identification",
|
|
51568
|
+
fr: "Identification des erreurs"
|
|
51569
|
+
},
|
|
51570
|
+
summary: {
|
|
51571
|
+
en: "Provide descriptive notification of errors. Users know an error exists and what is wrong. Flagging errors helps people with reduced sight and cognitive disabilities resolve them."
|
|
50508
51572
|
},
|
|
50509
|
-
impact: "low",
|
|
50510
51573
|
examples: [
|
|
50511
51574
|
{
|
|
50512
51575
|
lang: "html",
|
|
50513
|
-
|
|
50514
|
-
good: '<header>\n <nav>...</nav>\n <a href="/contact">Contact us</a>\n</header>',
|
|
51576
|
+
good: '<form name="signup" id="signup" method="post" action="">\n <p id="errors" aria-live="assertive"></p>\n <div>\n <label for="first">First Name (required)</label>\n <input aria-invalid="false" autocomplete="given-name" id="first" name="first" type="text">\n </div>\n <div>\n <label for="last">Last Name (required)</label>\n <input aria-invalid="false" autocomplete="family-name" id="last" name="last" type="text">\n </div>\n <div>\n <label for="email">Email (required)</label>\n <input aria-invalid="false" autocomplete="email" id="email" name="email" type="text">\n </div>\n <div>\n <button id="button" type="submit">Sign Up</button>\n </div>\n</form>',
|
|
50515
51577
|
note: {
|
|
50516
|
-
en: "
|
|
50517
|
-
fr: "M\xEAme ordre relatif, pas les m\xEAmes pixels : une mise en page responsive peut le d\xE9placer. Le crit\xE8re porte sur sa position dans la page, de fa\xE7on constante."
|
|
51578
|
+
en: "Good: Using aria-invalid to Indicate An Error Field (ARIA21)."
|
|
50518
51579
|
}
|
|
50519
51580
|
}
|
|
50520
51581
|
],
|
|
50521
|
-
reference: "https://www.w3.org/WAI/WCAG22/Understanding/
|
|
51582
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/error-identification.html"
|
|
50522
51583
|
},
|
|
50523
51584
|
{
|
|
50524
|
-
id: "
|
|
51585
|
+
id: "wcag-labels-or-instructions",
|
|
51586
|
+
criterionId: "3.3.2",
|
|
51587
|
+
wcag: ["3.3.2"],
|
|
51588
|
+
title: {
|
|
51589
|
+
en: "Labels or Instructions",
|
|
51590
|
+
fr: "\xC9tiquettes ou instructions"
|
|
51591
|
+
},
|
|
51592
|
+
summary: {
|
|
51593
|
+
en: "Provide labels or instructions for inputs. Users know what information to enter. Everyone, especially those with cognitive disabilities, will know how to respond."
|
|
51594
|
+
},
|
|
51595
|
+
examples: [
|
|
51596
|
+
{
|
|
51597
|
+
lang: "html",
|
|
51598
|
+
good: '<label for="firstname">First name (required):</label> \n<input id="firstname" name="firstname" type="text">',
|
|
51599
|
+
note: {
|
|
51600
|
+
en: "Good: Indicating required form controls using label or legend (H90)."
|
|
51601
|
+
}
|
|
51602
|
+
}
|
|
51603
|
+
],
|
|
51604
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/labels-or-instructions.html"
|
|
51605
|
+
},
|
|
51606
|
+
{
|
|
51607
|
+
id: "wcag-error-suggestion",
|
|
50525
51608
|
criterionId: "3.3.3",
|
|
50526
51609
|
wcag: ["3.3.3"],
|
|
50527
51610
|
title: {
|
|
50528
|
-
en: "
|
|
50529
|
-
fr: "
|
|
51611
|
+
en: "Error Suggestion",
|
|
51612
|
+
fr: "Suggestion apr\xE8s une erreur"
|
|
50530
51613
|
},
|
|
50531
51614
|
summary: {
|
|
50532
|
-
en:
|
|
50533
|
-
fr: "Quand une saisie est refus\xE9e et qu'une correction est connue, le message l'indique. \xAB Invalide \xBB n'apprend \xE0 l'utilisateur que son \xE9chec ; le format attendu, ou la valeur valide la plus proche, lui dit quoi faire."
|
|
51615
|
+
en: "Where errors are detected, suggest known ways to correct them. Users get suggestions on how to resolve errors. People can address errors faster and with reduced effort."
|
|
50534
51616
|
},
|
|
50535
|
-
impact: "high",
|
|
50536
51617
|
examples: [
|
|
50537
51618
|
{
|
|
50538
51619
|
lang: "html",
|
|
50539
|
-
|
|
50540
|
-
|
|
51620
|
+
good: `<dialog aria-labelledby="alert-heading" id="date-alert" role="alertdialog">
|
|
51621
|
+
<h1 id="alert-heading">Error</h1>
|
|
51622
|
+
<p>Employee's Birth Date is after their hire date. Please verify the birth date and hire date.</p>
|
|
51623
|
+
<button command="close" commandfor="date-alert" type="button">Return to page and correct error</button>
|
|
51624
|
+
</dialog>`,
|
|
50541
51625
|
note: {
|
|
50542
|
-
en: "
|
|
50543
|
-
fr: "La suggestion doit \xEAtre associ\xE9e programmatiquement au champ, pas seulement plac\xE9e \xE0 c\xF4t\xE9 : c'est aria-describedby qui la fait annoncer avec la saisie."
|
|
51626
|
+
en: "Good: Using aria-alertdialog to Identify Errors (ARIA18)."
|
|
50544
51627
|
}
|
|
50545
51628
|
}
|
|
50546
51629
|
],
|
|
50547
51630
|
reference: "https://www.w3.org/WAI/WCAG22/Understanding/error-suggestion.html"
|
|
50548
51631
|
},
|
|
50549
51632
|
{
|
|
50550
|
-
id: "
|
|
51633
|
+
id: "wcag-error-prevention-legal-financial-data",
|
|
51634
|
+
criterionId: "3.3.4",
|
|
51635
|
+
wcag: ["3.3.4"],
|
|
51636
|
+
title: {
|
|
51637
|
+
en: "Error Prevention (Legal, Financial, Data)",
|
|
51638
|
+
fr: "Pr\xE9vention des erreurs (juridiques, financi\xE8res, de donn\xE9es)"
|
|
51639
|
+
},
|
|
51640
|
+
summary: {
|
|
51641
|
+
en: "Provide ways for users to confirm, correct, or reverse important submissions. Users can avoid submitting incorrect important information. People with disabilities may be more likely to make mistakes, or not notice them."
|
|
51642
|
+
},
|
|
51643
|
+
examples: [],
|
|
51644
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/error-prevention-legal-financial-data.html"
|
|
51645
|
+
},
|
|
51646
|
+
{
|
|
51647
|
+
id: "wcag-redundant-entry",
|
|
50551
51648
|
criterionId: "3.3.7",
|
|
50552
51649
|
wcag: ["3.3.7"],
|
|
50553
51650
|
title: {
|
|
50554
|
-
en: "
|
|
50555
|
-
fr: "
|
|
51651
|
+
en: "Redundant Entry",
|
|
51652
|
+
fr: "Saisie redondante"
|
|
50556
51653
|
},
|
|
50557
51654
|
summary: {
|
|
50558
|
-
en: "
|
|
50559
|
-
|
|
51655
|
+
en: "Don't ask for the same information twice in the same activity. Make it easier for users to complete multi-step processes. Some people with cognitive disabilities have difficulty remembering what they entered before."
|
|
51656
|
+
},
|
|
51657
|
+
examples: [],
|
|
51658
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/redundant-entry.html"
|
|
51659
|
+
},
|
|
51660
|
+
{
|
|
51661
|
+
id: "wcag-accessible-authentication-minimum",
|
|
51662
|
+
criterionId: "3.3.8",
|
|
51663
|
+
wcag: ["3.3.8"],
|
|
51664
|
+
title: {
|
|
51665
|
+
en: "Accessible Authentication (Minimum)",
|
|
51666
|
+
fr: "Authentification accessible (minimum)"
|
|
51667
|
+
},
|
|
51668
|
+
summary: {
|
|
51669
|
+
en: "Don't make people solve, recall, or transcribe something to log in. Make logins possible with less mental effort. Some people with cognitive disabilities cannot solve puzzles, memorize a username and password, or retype one-time passcodes."
|
|
50560
51670
|
},
|
|
50561
|
-
impact: "medium",
|
|
50562
51671
|
examples: [
|
|
50563
51672
|
{
|
|
50564
51673
|
lang: "html",
|
|
50565
|
-
|
|
50566
|
-
good: '<fieldset>\n <legend>Delivery address</legend>\n <label for="same">\n <input type="checkbox" id="same" name="same" checked>\n Same as my billing address\n </label>\n <label for="d-street">Street</label>\n <input id="d-street" name="d-street" value="12 Rue de Rivoli">\n</fieldset>',
|
|
51674
|
+
good: '<form method="post" action="login">\n <div>\n <label for="email">Email</label>\n <input autocomplete="email" id="email" type="email" ...>\n </div>\n <div>\n <label for="password">Password</label>\n <input autocomplete="current-password" id="password" type="password" ...>\n </div>\n <input type="submit" value="Login">\n </div>\n</form>',
|
|
50567
51675
|
note: {
|
|
50568
|
-
en: "
|
|
50569
|
-
fr: "Des exceptions existent quand la ressaisie est essentielle : confirmation de mot de passe, test de m\xE9moire. La commodit\xE9 n'en fait pas partie."
|
|
51676
|
+
en: "Good: Providing properly marked up email and password inputs (H100)."
|
|
50570
51677
|
}
|
|
50571
51678
|
}
|
|
50572
51679
|
],
|
|
50573
|
-
reference: "https://www.w3.org/WAI/WCAG22/Understanding/
|
|
51680
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/accessible-authentication-minimum.html"
|
|
50574
51681
|
},
|
|
50575
51682
|
{
|
|
50576
|
-
id: "
|
|
50577
|
-
criterionId: "
|
|
50578
|
-
wcag: ["
|
|
51683
|
+
id: "wcag-name-role-value",
|
|
51684
|
+
criterionId: "4.1.2",
|
|
51685
|
+
wcag: ["4.1.2"],
|
|
50579
51686
|
title: {
|
|
50580
|
-
en: "
|
|
50581
|
-
fr: "
|
|
51687
|
+
en: "Name, Role, Value",
|
|
51688
|
+
fr: "Nom, r\xF4le et valeur"
|
|
50582
51689
|
},
|
|
50583
51690
|
summary: {
|
|
50584
|
-
en: "
|
|
50585
|
-
fr: "Aucune \xE9tape d'authentification ne doit reposer sur la m\xE9morisation, la transcription ou la r\xE9solution d'une \xE9nigme, sauf alternative. Bloquer le collage dans un champ de mot de passe est l'\xE9chec le plus courant : cela casse tous les gestionnaires de mots de passe."
|
|
51691
|
+
en: "Give components correct names, roles, states, and values. People using assistive technology understand all components. Assistive technology only works well when code is done properly."
|
|
50586
51692
|
},
|
|
50587
|
-
impact: "high",
|
|
50588
51693
|
examples: [
|
|
50589
51694
|
{
|
|
50590
51695
|
lang: "html",
|
|
50591
|
-
bad:
|
|
50592
|
-
|
|
51696
|
+
bad: `<p>
|
|
51697
|
+
<span onclick="toggleCheckbox('chkbox')">
|
|
51698
|
+
<img src="unchecked.gif" id="chkbox" alt=""> Include Signature
|
|
51699
|
+
</span>
|
|
51700
|
+
</p>`,
|
|
51701
|
+
good: '<a href="https://example.com">Example Site</a>',
|
|
50593
51702
|
note: {
|
|
50594
|
-
en:
|
|
50595
|
-
fr: 'autocomplete="current-password" permet \xE0 un gestionnaire de remplir le champ, ce qui est la fa\xE7on document\xE9e de satisfaire ce crit\xE8re. Un CAPTCHA \xE0 \xE9nigme exige une alternative non cognitive \xE0 c\xF4t\xE9.'
|
|
51703
|
+
en: "Good: Using HTML form controls and links (H91). Bad: Failure of Success Criterion 4.1.2 due to using script to make div or span a user interface control in HTML without providing a role for the control (F59)."
|
|
50596
51704
|
}
|
|
50597
51705
|
}
|
|
50598
51706
|
],
|
|
50599
|
-
reference: "https://www.w3.org/WAI/WCAG22/Understanding/
|
|
51707
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html"
|
|
51708
|
+
},
|
|
51709
|
+
{
|
|
51710
|
+
id: "wcag-status-messages",
|
|
51711
|
+
criterionId: "4.1.3",
|
|
51712
|
+
wcag: ["4.1.3"],
|
|
51713
|
+
title: {
|
|
51714
|
+
en: "Status Messages",
|
|
51715
|
+
fr: "Messages d\u2019\xE9tat"
|
|
51716
|
+
},
|
|
51717
|
+
summary: {
|
|
51718
|
+
en: "Let assistive technology notify users about status changes that don't take focus. Make users aware of important changes in content. People who do not see messages need to be informed about them."
|
|
51719
|
+
},
|
|
51720
|
+
examples: [
|
|
51721
|
+
{
|
|
51722
|
+
lang: "html",
|
|
51723
|
+
good: '<div id="activityLog" role="log">\n <h4 id="logHeading">Recent activity</h4>\n <ul id="logentries"">\n <li>08:03 UserX logged off</li>\n </ul>\n</div>',
|
|
51724
|
+
note: {
|
|
51725
|
+
en: "Good: Using role=log to identify sequential information updates (ARIA23)."
|
|
51726
|
+
}
|
|
51727
|
+
}
|
|
51728
|
+
],
|
|
51729
|
+
reference: "https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html"
|
|
50600
51730
|
}
|
|
50601
51731
|
]
|
|
50602
51732
|
};
|
|
@@ -50606,8 +51736,8 @@ var datasets = /* @__PURE__ */ new Map();
|
|
|
50606
51736
|
function add(ds) {
|
|
50607
51737
|
datasets.set(ds.pack, ds);
|
|
50608
51738
|
}
|
|
50609
|
-
add(wcag_default2);
|
|
50610
51739
|
add(rgaa_default2);
|
|
51740
|
+
add(wcag_default2);
|
|
50611
51741
|
function registerRuntimeGuidance(ds) {
|
|
50612
51742
|
add(ds);
|
|
50613
51743
|
}
|