Corrections d’accessibilité dans le code de votre thème Magento
Validiscan corrige les échecs d’accessibilité dans les templates .phtml, le XML de layout et les feuilles de style LESS ou CSS de votre thème Magento 2. Rien n’atteint votre boutique en ligne avant que votre développeur ait fusionné ou appliqué les modifications et déployé le thème.
Dernière mise à jour :
Sur cette page : 6 réponses
Que modifie Validiscan dans un thème Magento ?
Validiscan ne modifie que les fichiers de votre thème frontend Magento 2, le dossier qui contient son theme.xml, en général sous app/design/frontend. Une modification de tout autre fichier échoue à la validation et n’est jamais livrée, et aucune correction n’installe d’extension ni n’ajoute de script qui réécrit vos pages dans le navigateur du visiteur.
Les templates et les styles que votre thème ne surcharge pas proviennent de son thème parent, comme Luma ou Blank, ou des modules de Magento. Les recettes ne copient pas ces fichiers dans votre thème : lorsqu’un échec vient d’un fichier que votre thème ne surcharge pas, la recette ne fait aucune modification et le constat est laissé à une personne. Les contenus et les réglages que vous conservez dans l’Admin de Magento, comme les pages et les blocs CMS, le contenu de Page Builder, la locale d’une vue de magasin ou les réglages HTML Head, ne sont pas des fichiers du thème : les corrections ne les modifient donc pas. Les contenus tiers intégrés, comme les widgets de paiement ou de chat, ne sont pas compris dans un projet.
Détails : les dossiers, l’aspect d’une modification et l’endroit où les recettes ajoutent leurs styles
Validiscan ne modifie que les fichiers du thème frontend Magento 2 de votre boutique, le dossier qui contient son theme.xml, en général sous app/design/frontend : les templates .phtml et .html, le XML de layout, les sources LESS et les feuilles de style compilées sous web/css, les scripts sous web/js et le fichier de traduction allemand dans i18n. Une modification de tout autre fichier, comme le code de Magento lui-même, une extension ou un produit de la compilation, échoue à la validation, et une modification qui échoue à la validation ne peut pas être approuvée : elle n’est donc jamais livrée.
Chaque changement est une modification ordinaire d’un fichier du thème, que votre développeur peut lire ligne par ligne. Les nouvelles règles de style qu’ajoute une correction se trouvent dans un bloc à la fin de la feuille de style, entre des commentaires qui portent le nom de la recette, par exemple /* validiscan:. Les modifications plus petites, comme une valeur de couleur corrigée ou un outline: none retiré, sont faites là où se trouve déjà le code. Les mots qu’une correction ajoute à un template .phtml passent par la fonction de traduction de Magento, __(), et sont échappés comme le texte propre au thème ; dans les fichiers HTML que le thème conserve sous Magento_Cms/content, les recettes utilisent à la place la directive trans de Magento. Magento conserve les pages et les blocs CMS dans l’Admin de Magento : une modification de l’un de ces fichiers n’atteint donc votre boutique que là où votre projet charge ce fichier dans ses pages ou ses blocs CMS. Aucune correction n’installe d’extension ni n’ajoute de script qui réécrit vos pages dans le navigateur du visiteur, comme le fait un overlay.
Les recettes du contour de focus, des cibles tactiles, du lien d’évitement et des nouveaux boutons ajoutent leurs règles de style à la fin de la feuille de style principale du thème : son _extend.less ou son _theme.less sous web/css/source, avec un nouveau _extend.less lorsqu’un thème construit sur Luma ou Blank n’a ni l’un ni l’autre, ainsi que le web/css/styles-m.css compilé lorsque le thème en fournit un. Sur un thème qui n’est pas construit sur Luma ou Blank et qui n’a là ni sources LESS ni ce fichier compilé, les recettes du contour de focus, des cibles tactiles et des boutons ne font aucune modification, et la recette du lien d’évitement ajoute le lien sans styles.
Comment Validiscan accède-t-il à votre thème Magento ?
Par un dépôt GitHub ou un ZIP du dossier du thème téléversé dans le portail client, car Validiscan prépare chaque correction sur une copie du code source de votre thème Magento. Le choix dépend de l’endroit où se trouve le code : un dépôt donne lieu à une pull request, un ZIP à un lot de correctifs.
| Voie d’accès | Ce que vous fournissez | Les modifications reviennent sous forme de |
|---|---|---|
| Par votre dépôt GitHub | L’accès au dépôt, qui peut contenir le thème seul ou l’ensemble de votre projet Magento, par l’application GitHub de Validiscan ou un jeton d’accès | Une pull request |
| À partir d’un ZIP du dossier du thème | Le dossier de votre thème sous app/, en un seul fichier ZIP de 100 Mo au maximum, téléversé dans le portail client par un administrateur de votre organisation | Un lot de correctifs |
Par votre dépôt GitHub
Si le code de votre thème est conservé dans un dépôt GitHub, vous donnez à Validiscan l’accès à ce dépôt. Vous installez l’application GitHub de Validiscan sur le dépôt, ou vous donnez à Validiscan un jeton d’accès pour ce dépôt. La configuration de Validiscan fixe les autorisations de l’application GitHub : accès en lecture et en écriture au contenu du dépôt et à ses pull requests, accès en lecture à ses métadonnées, et rien d’autre.
Le dépôt peut contenir le thème seul ou l’ensemble de votre projet Magento. Les recettes retrouvent le thème grâce à son theme.xml dans app/, ou à la racine d’un dépôt qui ne contient que le thème, à côté de son registration.php. Si le dépôt contient plusieurs thèmes frontend, une recette travaille sur le thème dans lequel l’élément en échec a été trouvé, et ne change rien lorsqu’elle ne peut pas déterminer de quel thème il s’agit. Un thème situé ailleurs dans un projet, par exemple sous forme de paquet Composer sous vendor, se trouve hors des chemins qu’une correction peut modifier. Les modifications arrivent sous forme de pull request.
À partir d’un ZIP du dossier du thème
Sans dépôt GitHub, votre développeur prépare un ZIP du thème. Le portail client donne cette instruction : « Demandez à votre développeur un ZIP du dossier de votre thème sous app/design/frontend. » Un administrateur de votre organisation téléverse ensuite le fichier dans le portail client, sous la forme d’un seul fichier ZIP de 100 Mo au maximum. Validiscan prépare les modifications sur cette copie de votre thème et les renvoie sous forme de lot de correctifs.
Sans l’une ou l’autre de ces deux voies, Validiscan n’a aucun code à modifier, et aucune correction n’est préparée.
Comment les modifications parviennent-elles à votre boutique ?
Sur Magento, les modifications arrivent sous forme de pull request ou de lot de correctifs, et votre développeur décide quand elles passent en ligne. Validiscan ne livre que des modifications relues et approuvées et ne modifie pas la version en ligne de votre boutique ; la livraison d’une copie non publiée du thème utilise la bibliothèque de thèmes de Shopify et n’existe que pour Shopify.
- Validiscan livre les modifications qu’il a relues et approuvées : une pull request sur une nouvelle branche, ou un lot de correctifs pour votre développeur.
- Votre développeur relit les modifications. Pour une pull request, la liste de contrôle demande un environnement de prévisualisation ou de préproduction, et non la version en ligne de la boutique, ainsi qu’une vérification des pages concernées, y compris au clavier seul.
- Votre développeur fusionne la pull request ou applique le lot de correctifs.
- Votre développeur compile les feuilles de style et déploie le thème : les modifications du LESS prennent effet une fois les fichiers statiques du thème déployés.
- Une fois les modifications en ligne, un scan de vérification contrôle de nouveau les pages concernées.
Une pull request
Avec l’accès à votre dépôt, Validiscan crée une nouvelle branche nommée validiscan/, enregistre chaque correction dans un commit distinct et ouvre une seule pull request, avec un tableau récapitulatif, une explication de chaque modification et une liste de contrôle pour la relecture. Rien n’est poussé vers votre branche par défaut. La liste de contrôle demande à votre développeur de déployer la branche dans un environnement de prévisualisation ou de préproduction, et non sur la version en ligne de la boutique, puis d’y vérifier les pages concernées, y compris au clavier seul, avant de fusionner.
Un lot de correctifs
À partir du ZIP téléversé, Validiscan prépare une archive zip et l’envoie à votre développeur. Elle contient PATCH.md, avec chaque modification et la façon de l’appliquer, toutes les modifications dans un seul fichier de correctif qui s’applique avec git apply, un fichier de correctif par correction, les fichiers modifiés en entier et un README.md. Votre développeur applique les modifications, les teste et déploie le thème. Ce que contiennent une pull request et un lot de correctifs
Compiler les styles
Un thème fondé sur Luma ou Blank conserve ses styles sous forme de sources LESS, et Magento les compile pour produire le CSS qu’il sert. L’outil de déploiement des fichiers statiques de Magento, bin/, compile les fichiers LESS et publie le résultat, comme le décrit la documentation d’Adobe sur le prétraitement du CSS et du LESS. Les modifications du LESS prennent donc effet une fois que votre développeur a déployé les fichiers statiques du thème modifié. Lorsque le thème fournit aussi un web/css/styles-m.css compilé, Magento sert ce fichier tel quel : les recettes y font donc la même modification, et les deux fichiers restent synchronisés. Où placer les corrections dans un thème Magento, et ce qu’une mise à jour du thème peut défaire
Que modifient les recettes dans un thème Magento ?
Chacune des 20 recettes de Validiscan pour les thèmes Magento est une modification déterministe pour un type d’échec : le même code reçoit toujours la même modification. Une recette n’intervient que là où le code du thème montre quelle modification est la bonne ; là où il ne le montre pas, elle ne change rien.
Structure de la page et navigation
-
Langue de la page reprise de la locale de votre boutique html-lang Lorsque la surcharge du template racine par votre thème produit son propre
langou n’en produit aucun, le template produit de nouveau les attributs propres à Magento, et chaque page reçoit unlangvalide.Magento définit la langue d’une page à partir de la locale de sa vue de magasin, par exemple
enpour la localeen_US, et la produit par son template racine. Lorsque votre thème surcharge ce template et produit son proprelang, en général le code de localeen_US, qui n’est pas une balise de langue valide, ou n’en produit aucun, le template produit de nouveau les attributs propres à Magento : chaque page reçoit ainsi unlangvalide. Unlangdéfini dans le XML de layout sous la forme d’une locale, commede_DE, devientde-DE. Une page dont le contenu est dans une autre langue que celle de sa vue de magasin, comme une page juridique allemande dans une boutique anglaise, vous revient : servez-la depuis une vue de magasin dans cette langue, ou indiquez la langue dans le contenu lui-même.- Règles couvertes
-
-
html-has-langAUTO contrôle assuré par vs-lang -
html-lang-validAUTO contrôle assuré par vs-lang -
vs-langAUTO
-
- Types de fichiers modifiés
-
.phtml
fixes the vs-lang finding in root.phtml and validates Données d’exemple app/design/frontend/Validiscan/fixture/Magento_Theme/templates/root.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Theme/templates/root.phtml (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Theme/templates/root.phtml (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 15 15 ?> 16 16 <!doctype html> 17 17 <!-- VALIDISCAN-SEEDED vs-lang: root.phtml prints the Magento locale code (en_US) instead of a BCP 47 language tag --> 18 Supprimée <html lang="<?= $block->escapeHtmlAttr($htmlLocale) ?>"> 18 Ajoutée <html <?= /* @noEscape */ $htmlAttributes ?>> 19 19 <head <?= /* @noEscape */ $headAttributes ?>> 20 20 <?= /* @noEscape */ $requireJs ?> 21 21 <?= /* @noEscape */ $headContent ?> -
Lien d’évitement, zone principale et menus nommés skip-link-main Le lien d’évitement de Luma et la zone
<main>reviennent là où votre thème les a perdus, et les zones de navigation sans nom en reçoivent un lorsque le code montre leur fonction.Le thème Luma de Magento a, en haut de chaque page, un lien « Skip to Content » qui mène au début du contenu principal, et ce contenu est la zone
<main>de la page. Un thème peut perdre l’un et l’autre. Lorsque le thème a retiré le lien dans son XML de layout, la recette annule ce retrait. Lorsque le template d’en-tête propre au thème ne produit jamais le lien, la recette l’y ajoute avec les classes de Luma ; si les feuilles de style du thème le laissaient sans mise en forme, la recette ajoute des styles qui le gardent masqué jusqu’à ce qu’il reçoive le focus clavier. Lorsque le XML de layout produit le contenu principal sous la forme d’un autre élément, comme un<div>, il redevient<main>. Les zones de navigation sans nom en reçoivent un qui dit ce qu’elles contiennent, par exemple Main menu, Footer links ou Breadcrumbs ; une zone dont le code ne montre pas la fonction, ou qui partagerait son nom avec une autre, est laissée à une personne. Le contenu situé hors de l’en-tête, de la zone principale et du pied de page, comme une barre de promotion, n’est pas déplacé : le déplacer est une modification de votre layout que votre développeur fait dans le XML de layout.- Règles couvertes
-
-
bypassAUTO contrôle assuré par vs-headings-landmarks -
landmark-one-mainAUTO contrôle assuré par vs-headings-landmarks -
regionAUTO -
skip-linkAUTO -
vs-headings-landmarksAUTO -
landmark-uniqueASSISTED
-
- Types de fichiers modifiés
-
.css.less.phtml.xml
fixes the vs-headings-landmarks finding and validates Données d’exemple app/design/frontend/Validiscan/fixture/Magento_Cms/layout/cms_index_index.xml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Cms/layout/cms_index_index.xml (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Cms/layout/cms_index_index.xml (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 6 6 <div>, so the home page has no <main> landmark (and, with the page title hidden by 7 7 display:none in _theme.less, no h1 either). 8 8 Fixed variant: keep htmlTag="main"; hide the title visually only (clip), not with display:none. --> 9 Supprimée <referenceContainer name="main.content" htmlTag="div" htmlId="maincontent" htmlClass="page-main"/> 9 Ajoutée <referenceContainer name="main.content" htmlTag="main" htmlId="maincontent" htmlClass="page-main"/> 10 10 <referenceBlock name="breadcrumbs" remove="true"/> 11 11 </body> 12 12 </page> app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/footer.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/footer.phtml (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/footer.phtml (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 19 19 ?> 20 20 <!-- VALIDISCAN-SEEDED list + landmark-unique: list items wrapped in a div inside the ul; second unlabelled nav --> 21 21 <?php /* Fixed variant: <nav class="footer-nav" aria-label="Footer links"> with the <li> elements directly in the <ul>. */ ?> 22 Supprimée <nav class="footer-nav"> 22 Ajoutée <nav class="footer-nav" aria-label="<?= $escaper->escapeHtmlAttr(__('Footer links')) ?>"> 23 23 <ul class="footer links"> 24 24 <div class="footer-col"> 25 25 <?php foreach ($links as $link): ?> app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/header.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/header.phtml (lignes ajoutées : 1, lignes supprimées : 0)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/header.phtml (lignes ajoutées : 1, lignes supprimées : 0) Ligne avant Ligne après Modification Code 13 13 <header class="page-header"> 14 14 <div class="panel wrapper"> 15 15 <div class="panel header"> 16 Ajoutée <a class="action skip contentarea" href="#contentarea"><span><?= $escaper->escapeHtml(__('Skip to Content')) ?></span></a> 16 17 <!-- VALIDISCAN-SEEDED vs-headings-landmarks: the skip link was removed from the header panel --> 17 18 <?php /* Fixed variant: <a class="action skip contentarea" href="#contentarea"><span>Skip to Content</span></a> */ ?> 18 19 <?php if ($linksMoved): ?> app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/topmenu.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/topmenu.phtml (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/topmenu.phtml (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 15 15 <div class="section-item-content nav-sections-item-content" id="store.menu" data-role="content"> 16 16 <!-- VALIDISCAN-SEEDED aria-required-children + landmark-unique: menubar whose children are plain list items; nav without a label --> 17 17 <?php /* Fixed variant: <nav ... aria-label="Main menu"> and a plain <ul> (no menubar role). */ ?> 18 Supprimée <nav class="navigation" data-action="navigation"> 18 Ajoutée <nav class="navigation" data-action="navigation" aria-label="<?= $escaper->escapeHtmlAttr(__('Main menu')) ?>"> 19 19 <ul role="menubar" data-mage-init='{"menu":{"responsive":true,"expanded":true,"position":{"my":"left top","at":"left bottom"}}}'> 20 20 <?php foreach ($items as $item): ?> 21 21 <li class="level0 <?= $escaper->escapeHtmlAttr($item['class']) ?> level-top"><a href="<?= $escaper->escapeUrl($item['url']) ?>" class="level-top"><span><?= $escaper->escapeHtml($item['label']) ?></span></a></li> app/design/frontend/Validiscan/fixture/web/css/source/_theme.less Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/source/_theme.less (lignes ajoutées : 24, lignes supprimées : 0)
Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/source/_theme.less (lignes ajoutées : 24, lignes supprimées : 0) Ligne avant Ligne après Modification Code 1264 1264 height: 18px; 1265 1265 stroke-width: 3; 1266 1266 } 1267 Ajoutée 1268 Ajoutée /* validiscan:skip-link-main */ 1269 Ajoutée .action.skip:not(:focus) { 1270 Ajoutée position: absolute; 1271 Ajoutée width: 1px; 1272 Ajoutée height: 1px; 1273 Ajoutée margin: -1px; 1274 Ajoutée padding: 0; 1275 Ajoutée overflow: hidden; 1276 Ajoutée clip: rect(0 0 0 0); 1277 Ajoutée white-space: nowrap; 1278 Ajoutée border: 0; 1279 Ajoutée } 1280 Ajoutée .action.skip:focus { 1281 Ajoutée position: absolute; 1282 Ajoutée top: 4px; 1283 Ajoutée left: 4px; 1284 Ajoutée z-index: 100; 1285 Ajoutée padding: 8px 12px; 1286 Ajoutée background: #fff; 1287 Ajoutée color: #1a1a1a; 1288 Ajoutée text-decoration: underline; 1289 Ajoutée } 1290 Ajoutée /* /validiscan:skip-link-main */ app/design/frontend/Validiscan/fixture/web/css/styles-m.css Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/styles-m.css (lignes ajoutées : 24, lignes supprimées : 0)
Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/styles-m.css (lignes ajoutées : 24, lignes supprimées : 0) Ligne avant Ligne après Modification Code 1232 1232 height: 18px; 1233 1233 stroke-width: 3; 1234 1234 } 1235 Ajoutée 1236 Ajoutée /* validiscan:skip-link-main */ 1237 Ajoutée .action.skip:not(:focus) { 1238 Ajoutée position: absolute; 1239 Ajoutée width: 1px; 1240 Ajoutée height: 1px; 1241 Ajoutée margin: -1px; 1242 Ajoutée padding: 0; 1243 Ajoutée overflow: hidden; 1244 Ajoutée clip: rect(0 0 0 0); 1245 Ajoutée white-space: nowrap; 1246 Ajoutée border: 0; 1247 Ajoutée } 1248 Ajoutée .action.skip:focus { 1249 Ajoutée position: absolute; 1250 Ajoutée top: 4px; 1251 Ajoutée left: 4px; 1252 Ajoutée z-index: 100; 1253 Ajoutée padding: 8px 12px; 1254 Ajoutée background: #fff; 1255 Ajoutée color: #1a1a1a; 1256 Ajoutée text-decoration: underline; 1257 Ajoutée } 1258 Ajoutée /* /validiscan:skip-link-main */ -
Un titre sur chaque page document-title-template Les titres vides que votre thème définit dans le XML de layout sont retirés, de sorte que le titre propre de Magento s’applique de nouveau.
Magento donne à chaque page un titre propre, comme le nom du produit ou de la catégorie, ou « Search results for: » suivi du terme recherché, avec le préfixe ou le suffixe défini pour votre boutique. Un thème peut le remplacer par un
<title>vide dans le XML de layout, et la page n’a alors aucun titre. La recette retire ces titres vides, de sorte que le titre propre de Magento s’applique de nouveau. Les titres qui contiennent du texte sont votre formulation et restent tels quels. Si aucun fichier de layout du thème ne vide le titre, la recette ne change rien : le titre vient alors de la page elle-même et des réglages HTML Head de l’Admin de Magento.- Règles couvertes
-
-
document-titleAUTO
-
- Types de fichiers modifiés
-
.xml
removes the blank search results title and validates Données d’exemple app/design/frontend/Validiscan/fixture/Magento_CatalogSearch/layout/catalogsearch_result_index.xml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_CatalogSearch/layout/catalogsearch_result_index.xml (lignes ajoutées : 0, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_CatalogSearch/layout/catalogsearch_result_index.xml (lignes ajoutées : 0, lignes supprimées : 1) Ligne avant Ligne après Modification Code 4 4 <!-- VALIDISCAN-SEEDED document-title: a "hide the SEO title" customisation sets an empty page title, 5 5 so the rendered <title></title> is empty. The visible h1 is set separately by the page.main.title block. 6 6 Fixed variant: <title>Search results for: 'jacket'</title>. --> 7 Supprimée <title> </title> 8 7 </head> 9 8 <body> 10 9 <referenceBlock name="search_result_list" template="Magento_Catalog::product/list.phtml"/> -
Des titres sans niveau sauté heading-levels Un titre qui saute un niveau remonte avec les titres qui le suivent dans son template, lorsque le niveau du titre qui précède peut être lu ; un titre de page masqué avec
display: noneest masqué visuellement à la place.Un titre qui saute un niveau, comme un h4 juste après un h2, remonte au niveau suivant, et les titres qui le suivent dans le même template, à son niveau ou à un niveau plus profond, remontent avec lui. Les classes restent, de sorte que les styles que le thème définit par classe continuent de s’appliquer ; votre développeur vérifie les styles que le thème définit par la balise du titre. Lorsque le niveau du titre qui précède ne peut être lu ni dans le scan ni dans le même template, le titre est laissé à une personne. Magento affiche le titre de chaque page sous forme de h1. Un thème qui masque le titre sur une page avec
display: nonesupprime le seul h1 de la page : la recette le masque donc visuellement à la place, comme les styles propres à Magento masquent du texte, et le h1 reste dans le plan que les lecteurs d’écran utilisent. Un titre retiré dans le XML de layout est laissé à une personne, car le rétablir changerait l’aspect de la page.- Règles couvertes
-
-
heading-orderAUTO contrôle assuré par vs-headings-landmarks -
page-has-heading-oneAUTO contrôle assuré par vs-headings-landmarks -
vs-headings-landmarksAUTO
-
- Types de fichiers modifiés
-
.css.html.less
keeps the hidden home page title as the h1 and validates Données d’exemple app/design/frontend/Validiscan/fixture/web/css/source/_theme.less Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/source/_theme.less (lignes ajoutées : 6, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/source/_theme.less (lignes ajoutées : 6, lignes supprimées : 1) Ligne avant Ligne après Modification Code 1093 1093 1094 1094 // VALIDISCAN-SEEDED vs-headings-landmarks: the home page title is display:none, so the page has no h1. 1095 1095 .cms-index-index .page-title-wrapper { 1096 Supprimée display: none; 1096 Ajoutée position: absolute; 1097 Ajoutée width: 1px; 1098 Ajoutée height: 1px; 1099 Ajoutée overflow: hidden; 1100 Ajoutée clip: rect(0 0 0 0); 1101 Ajoutée white-space: nowrap; 1097 1102 } 1098 1103 1099 1104 // VALIDISCAN-SEEDED color-contrast: #929292 on white is 3.1:1. app/design/frontend/Validiscan/fixture/web/css/styles-m.css Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/styles-m.css (lignes ajoutées : 6, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/styles-m.css (lignes ajoutées : 6, lignes supprimées : 1) Ligne avant Ligne après Modification Code 1070 1070 } 1071 1071 1072 1072 .cms-index-index .page-title-wrapper { 1073 Supprimée display: none; 1073 Ajoutée position: absolute; 1074 Ajoutée width: 1px; 1075 Ajoutée height: 1px; 1076 Ajoutée overflow: hidden; 1077 Ajoutée clip: rect(0 0 0 0); 1078 Ajoutée white-space: nowrap; 1074 1079 } 1075 1080 1076 1081 .block-promo .info, moves the journal headings from h4 to h3 and validates Données d’exemple app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html (lignes ajoutées : 3, lignes supprimées : 3)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html (lignes ajoutées : 3, lignes supprimées : 3) Ligne avant Ligne après Modification Code 152 152 <!-- VALIDISCAN-SEEDED vs-headings-landmarks (h2 followed by h4) + vs-link-purpose ("Read more" links to three different pages) --> 153 153 <div class="journal-items"> 154 154 <article class="journal-item"> 155 Supprimée <h4 class="journal-title">Layering for wet autumn days</h4> 155 Ajoutée <h3 class="journal-title">Layering for wet autumn days</h3> 156 156 <p>How a light shell over a warm mid-layer keeps you dry on the way to work.</p> 157 157 <a class="journal-link" href="/magento/juno-jacket.html">Read more</a> 158 158 </article> 159 159 <article class="journal-item"> 160 Supprimée <h4 class="journal-title">Caring for technical shells</h4> 160 Ajoutée <h3 class="journal-title">Caring for technical shells</h3> 161 161 <p>Washing, drying and re-proofing: three steps that keep a rain shell working for years.</p> 162 162 <a class="journal-link" href="/magento/nadia-elements-shell.html">Read more</a> 163 163 </article> 164 164 <article class="journal-item"> 165 Supprimée <h4 class="journal-title">Running through the dark season</h4> 165 Ajoutée <h3 class="journal-title">Running through the dark season</h3> 166 166 <p>Reflective details, lights and route planning for early morning runs.</p> 167 167 <a class="journal-link" href="/magento/ingrid-running-jacket.html">Read more</a> 168 168 </article>
Utilisation au clavier et focus
-
Un contour de focus visible focus-visible-styles Un seul contour pour le focus clavier, dans la couleur de marque du thème, ajustée jusqu’à un contraste d’au moins 3:1 avec l’arrière-plan de la page.
La feuille de style du thème reçoit un seul contour pour le focus clavier : 2 pixels, en trait plein, à 2 pixels de l’élément, dans la couleur de marque du thème. La couleur vient d’une variable de couleur de marque ou de couleur primaire, à défaut du bouton principal, à défaut de la couleur des liens, et elle est ajustée jusqu’à atteindre un contraste d’au moins 3:1 avec l’arrière-plan de la page. Les zones qui ont un arrière-plan propre, comme une barre supérieure sombre, reçoivent une couleur de contour qui a ce contraste à cet endroit. Les règles du thème qui retirent le contour des liens, des boutons et d’autres commandes au focus sont supprimées, sauf si elles montrent le focus d’une autre façon, par exemple avec une bordure ou une ombre.
- Règles couvertes
-
-
vs-focus-visibleAUTO
-
- Types de fichiers modifiés
-
.css.less
adds the outline, removes the outline: none rule and validates Données d’exemple app/design/frontend/Validiscan/fixture/web/css/source/_theme.less Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/source/_theme.less (lignes ajoutées : 10, lignes supprimées : 12)
Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/source/_theme.less (lignes ajoutées : 10, lignes supprimées : 12) Ligne avant Ligne après Modification Code 1079 1079 color: #fff; 1080 1080 } 1081 1081 1082 Supprimée // VALIDISCAN-SEEDED vs-focus-visible: the theme removes the focus ring from links and actions. 1083 Supprimée .navigation a:focus, 1084 Supprimée .header.links a:focus, 1085 Supprimée .product-item-link:focus, 1086 Supprimée .footer a:focus, 1087 Supprimée .action:focus, 1088 Supprimée .logo:focus, 1089 Supprimée .block-promo:focus, 1090 Supprimée .journal-link:focus { 1091 Supprimée outline: none; 1092 Supprimée } 1093 Supprimée 1094 1082 // VALIDISCAN-SEEDED vs-headings-landmarks: the home page title is display:none, so the page has no h1. 1095 1083 .cms-index-index .page-title-wrapper { 1096 1084 display: none; 1264 1252 height: 18px; 1265 1253 stroke-width: 3; 1266 1254 } 1255 Ajoutée 1256 Ajoutée /* validiscan:focus-visible-styles */ 1257 Ajoutée :focus-visible { 1258 Ajoutée outline: 2px solid #1979c3; 1259 Ajoutée outline-offset: 2px; 1260 Ajoutée } 1261 Ajoutée .panel.wrapper :focus-visible { 1262 Ajoutée outline-color: #a1d0f3; 1263 Ajoutée } 1264 Ajoutée /* /validiscan:focus-visible-styles */ app/design/frontend/Validiscan/fixture/web/css/styles-m.css Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/styles-m.css (lignes ajoutées : 10, lignes supprimées : 11)
Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/styles-m.css (lignes ajoutées : 10, lignes supprimées : 11) Ligne avant Ligne après Modification Code 1058 1058 color: #fff; 1059 1059 } 1060 1060 1061 Supprimée .navigation a:focus, 1062 Supprimée .header.links a:focus, 1063 Supprimée .product-item-link:focus, 1064 Supprimée .footer a:focus, 1065 Supprimée .action:focus, 1066 Supprimée .logo:focus, 1067 Supprimée .block-promo:focus, 1068 Supprimée .journal-link:focus { 1069 Supprimée outline: none; 1070 Supprimée } 1071 Supprimée 1072 1061 .cms-index-index .page-title-wrapper { 1073 1062 display: none; 1074 1063 } 1232 1221 height: 18px; 1233 1222 stroke-width: 3; 1234 1223 } 1224 Ajoutée 1225 Ajoutée /* validiscan:focus-visible-styles */ 1226 Ajoutée :focus-visible { 1227 Ajoutée outline: 2px solid #1979c3; 1228 Ajoutée outline-offset: 2px; 1229 Ajoutée } 1230 Ajoutée .panel.wrapper :focus-visible { 1231 Ajoutée outline-color: #a1d0f3; 1232 Ajoutée } 1233 Ajoutée /* /validiscan:focus-visible-styles */ -
Un ordre de tabulation qui suit la page remove-positive-tabindex Dès qu’un élément signalé porte un
tabindexsupérieur à 0, tous lestabindexpositifs fixes des templates du thème sont retirés ou fixés à 0.Un
tabindexsupérieur à 0 fait passer un élément en tête de l’ordre de tabulation. De telles valeurs ne fonctionnent que les unes par rapport aux autres sur l’ensemble de la page : dès qu’il est établi qu’un élément signalé en porte une dans les templates du thème, la recette retire tous lestabindexpositifs fixes des templates du thème, y compris sur des éléments que le constat n’énumérait pas. Les liens, les boutons et les champs de formulaire perdent l’attribut ; les autres éléments reçoiventtabindex="0", afin qu’ils restent atteignables pendant que la touche Tab suit l’ordre de la page. Untabindexque du code PHP calcule est laissé à une personne. Le contrôlevs-focus-orderde Validiscan signale aussi un focus qui saute d’un endroit à l’autre de la page pour d’autres raisons, par exemple un contenu placé ailleurs par ses styles ; il est MANUAL, et ses constats s’accompagnent donc d’indications, et non de cette modification.- Règles couvertes
-
-
tabindexAUTO -
vs-focus-orderMANUAL
-
- Types de fichiers modifiés
-
.phtml
removes tabindex 1-4 from the login form and the CAPTCHA and validates Données d’exemple app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/captcha-math.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/captcha-math.phtml (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/captcha-math.phtml (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 14 14 <div class="field captcha required" role="group" aria-labelledby="captcha-question" data-captcha-type="math"> 15 15 <label for="captcha_user_login" class="label" id="captcha-question"><span><?= $escaper->escapeHtml(__('Security question: what is %1 + %2?', $a, $b)) ?></span></label> 16 16 <div class="control captcha"> 17 Supprimée <input name="captcha[user_login]" type="text" class="input-text required-entry" id="captcha_user_login" autocomplete="off" inputmode="numeric" tabindex="3" data-captcha-answer-hash="<?= $escaper->escapeHtmlAttr(md5((string) ($a + $b))) ?>"> 17 Ajoutée <input name="captcha[user_login]" type="text" class="input-text required-entry" id="captcha_user_login" autocomplete="off" inputmode="numeric" data-captcha-answer-hash="<?= $escaper->escapeHtmlAttr(md5((string) ($a + $b))) ?>"> 18 18 </div> 19 19 </div> app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/login.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/login.phtml (lignes ajoutées : 3, lignes supprimées : 3)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/login.phtml (lignes ajoutées : 3, lignes supprimées : 3) Ligne avant Ligne après Modification Code 27 27 <div class="field email required"> 28 28 <label class="label" for="email"><span><?= $escaper->escapeHtml(__('Email')) ?></span></label> 29 29 <div class="control"> 30 Supprimée <input name="login[username]" value="<?= $escaper->escapeHtmlAttr($username) ?>" autocomplete="off" id="email" type="email" class="input-text mage-error" title="<?= $escaper->escapeHtmlAttr(__('Email')) ?>" aria-invalid="true" tabindex="1" onpaste="return false;" data-mage-init='{"mage/trim-input":{}}'> 30 Ajoutée <input name="login[username]" value="<?= $escaper->escapeHtmlAttr($username) ?>" autocomplete="off" id="email" type="email" class="input-text mage-error" title="<?= $escaper->escapeHtmlAttr(__('Email')) ?>" aria-invalid="true" onpaste="return false;" data-mage-init='{"mage/trim-input":{}}'> 31 31 <div for="email" generated="true" class="mage-error" id="email-error"><?= $escaper->escapeHtml(__('Please enter a valid email address (Ex: johndoe@domain.com).')) ?></div> 32 32 </div> 33 33 </div> 35 35 <div class="field password required"> 36 36 <label for="pass" class="label"><span><?= $escaper->escapeHtml(__('Password')) ?></span></label> 37 37 <div class="control"> 38 Supprimée <input name="login[password]" type="password" autocomplete="off" class="input-text" id="pass" title="<?= $escaper->escapeHtmlAttr(__('Password')) ?>" tabindex="2" onpaste="return false;" oncopy="return false;"> 38 Ajoutée <input name="login[password]" type="password" autocomplete="off" class="input-text" id="pass" title="<?= $escaper->escapeHtmlAttr(__('Password')) ?>" onpaste="return false;" oncopy="return false;"> 39 39 </div> 40 40 </div> 41 41 <!-- VALIDISCAN-SEEDED vs-accessible-auth: arithmetic CAPTCHA with no alternative --> 42 42 <?= $block->getChildHtml('form_additional_info') /* math CAPTCHA module: div.field.captcha, input#captcha_user_login tabindex="3" */ ?> 43 43 <div class="actions-toolbar"> 44 Supprimée <div class="primary"><button type="submit" class="action login primary" name="send" id="send2" tabindex="4"><span><?= $escaper->escapeHtml(__('Sign In')) ?></span></button></div> 44 Ajoutée <div class="primary"><button type="submit" class="action login primary" name="send" id="send2"><span><?= $escaper->escapeHtml(__('Sign In')) ?></span></button></div> 45 45 <div class="secondary"><a class="action remind" href="<?= $escaper->escapeUrl($block->getUrl('contact')) ?>"><span><?= $escaper->escapeHtml(__('Forgot Your Password? Contact us')) ?></span></a></div> 46 46 </div> 47 47 </fieldset>
Zoom et cibles tactiles
-
Zoom autorisé sur téléphone meta-viewport-zoom La balise viewport du thème perd
user-scalable=noet toutmaximum-scaleinférieur à 2, afin que les visiteurs puissent zoomer sur la page avec un téléphone ; une valeur que du code PHP calcule est consignée pour votre développeur.La recette retire
user-scalable=noet toutmaximum-scaleinférieur à 2 de la balise viewport dans le XML de layout du thème, commedefault_head_blocks.xml, où Luma la déclare, ou dans ses templates, afin que les visiteurs puissent zoomer sur la page avec un téléphone. Pour la règle de bonne pratiquemeta-viewport-large, la limite est de 5. Les autres réglages du viewport restent tels quels. Une valeur de viewport que du code PHP calcule est consignée à l’intention de votre développeur, qui la vérifie. Si la balise qui bloque le zoom ne vient pas du thème, par exemple des réglages HTML Head de l’Admin de Magento ou d’un module, la recette ne change rien.- Règles couvertes
-
-
meta-viewportAUTO -
meta-viewport-largeAUTO
-
- Types de fichiers modifiés
-
.xml
removes the zoom block from default_head_blocks.xml and validates Données d’exemple app/design/frontend/Validiscan/fixture/Magento_Theme/layout/default_head_blocks.xml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Theme/layout/default_head_blocks.xml (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Theme/layout/default_head_blocks.xml (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 3 3 <head> 4 4 <!-- VALIDISCAN-SEEDED meta-viewport: pinch zoom disabled (Luma 2.0-2.3 default kept by the theme). 5 5 Fixed variant: content="width=device-width, initial-scale=1". --> 6 Supprimée <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"/> 6 Ajoutée <meta name="viewport" content="width=device-width, initial-scale=1"/> 7 7 <meta name="format-detection" content="telephone=no"/> 8 8 <css src="css/styles-m.css"/> 9 9 <css src="css/styles-l.css" media="screen and (min-width: 768px)"/> -
Des cibles tactiles plus grandes target-size-padding Les boutons et les liens que le scan a trouvés trop petits reçoivent une taille minimale de 24 × 24 pixels, par des classes que la feuille de style du thème peut cibler.
Les boutons et les liens que le scan a trouvés trop petits, comme les icônes de réseaux sociaux ou les boutons de quantité, reçoivent une taille minimale de 24 × 24 pixels dans un bloc à la fin de la feuille de style du thème. Le bloc reprend les sélecteurs avec lesquels le thème les a rendus petits, ou leurs propres classes, et définit une largeur et une hauteur minimales, qui l’emportent sur une largeur ou une hauteur plus petite. Les icônes à l’intérieur et la mise en page autour restent telles quelles. Un lien ou un autre élément inline sans règle
displaypasse eninline-flex, car les éléments inline ignorent une taille minimale. Une commande sans classe que la feuille de style peut cibler est laissée à une personne.- Règles couvertes
-
-
vs-target-sizeAUTO
-
- Types de fichiers modifiés
-
.css.less
sizes the three flagged controls and validates Données d’exemple app/design/frontend/Validiscan/fixture/web/css/source/_theme.less Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/source/_theme.less (lignes ajoutées : 9, lignes supprimées : 0)
Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/source/_theme.less (lignes ajoutées : 9, lignes supprimées : 0) Ligne avant Ligne après Modification Code 1264 1264 height: 18px; 1265 1265 stroke-width: 3; 1266 1266 } 1267 Ajoutée 1268 Ajoutée /* validiscan:target-size-padding */ 1269 Ajoutée .social-link, 1270 Ajoutée .actions-secondary .action, 1271 Ajoutée .qty-step { 1272 Ajoutée min-width: 24px; 1273 Ajoutée min-height: 24px; 1274 Ajoutée } 1275 Ajoutée /* /validiscan:target-size-padding */ app/design/frontend/Validiscan/fixture/web/css/styles-m.css Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/styles-m.css (lignes ajoutées : 9, lignes supprimées : 0)
Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/styles-m.css (lignes ajoutées : 9, lignes supprimées : 0) Ligne avant Ligne après Modification Code 1232 1232 height: 18px; 1233 1233 stroke-width: 3; 1234 1234 } 1235 Ajoutée 1236 Ajoutée /* validiscan:target-size-padding */ 1237 Ajoutée .social-link, 1238 Ajoutée .actions-secondary .action, 1239 Ajoutée .qty-step { 1240 Ajoutée min-width: 24px; 1241 Ajoutée min-height: 24px; 1242 Ajoutée } 1243 Ajoutée /* /validiscan:target-size-padding */
Mouvement, diaporamas et son
-
Moins de mouvement lorsque le visiteur le demande reduced-motion-guard Lorsque l’appareil d’un visiteur demande de réduire les mouvements, les animations, les transitions de 5 secondes ou plus et le défilement fluide que déclenchent les feuilles de style du thème sont désactivés.
Lorsque l’appareil d’un visiteur est réglé pour réduire les mouvements, un bloc à la fin de chaque feuille de style du thème désactive les animations, les transitions de 5 secondes ou plus et le défilement fluide que cette feuille de style déclenche, sélecteur par sélecteur. Lorsque les scripts du thème dans
web/jsdémarrent un slider avec le défilement automatique activé, le slider démarre sans défilement automatique pour ces visiteurs. Une règle imbriquée dans une autre règle LESS est consignée à l’intention de votre développeur. Les animations du code de Magento ou des extensions ne figurent pas dans les fichiers du thème et demandent leur propre protection.- Règles couvertes
-
-
vs-motionAUTO
-
- Types de fichiers modifiés
-
.css.less
guards the badge and slider animations and validates Données d’exemple app/design/frontend/Validiscan/fixture/web/css/source/_theme.less Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/source/_theme.less (lignes ajoutées : 9, lignes supprimées : 0)
Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/source/_theme.less (lignes ajoutées : 9, lignes supprimées : 0) Ligne avant Ligne après Modification Code 1264 1264 height: 18px; 1265 1265 stroke-width: 3; 1266 1266 } 1267 Ajoutée 1268 Ajoutée /* validiscan:reduced-motion-guard */ 1269 Ajoutée @media (prefers-reduced-motion: reduce) { 1270 Ajoutée .product-label, 1271 Ajoutée .slick-track { 1272 Ajoutée animation: none; 1273 Ajoutée } 1274 Ajoutée } 1275 Ajoutée /* /validiscan:reduced-motion-guard */ app/design/frontend/Validiscan/fixture/web/css/styles-m.css Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/styles-m.css (lignes ajoutées : 9, lignes supprimées : 0)
Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/styles-m.css (lignes ajoutées : 9, lignes supprimées : 0) Ligne avant Ligne après Modification Code 1232 1232 height: 18px; 1233 1233 stroke-width: 3; 1234 1234 } 1235 Ajoutée 1236 Ajoutée /* validiscan:reduced-motion-guard */ 1237 Ajoutée @media (prefers-reduced-motion: reduce) { 1238 Ajoutée .product-label, 1239 Ajoutée .slick-track { 1240 Ajoutée animation: none; 1241 Ajoutée } 1242 Ajoutée } 1243 Ajoutée /* /validiscan:reduced-motion-guard */ -
Des diaporamas qui ne bougent que lorsque le visiteur le demande slider-pause-control Pas de bouton de pause sur Magento : le défilement automatique est désactivé sur les sliders Page Builder des fichiers du thème, qui ne changent alors que lorsque le visiteur utilise les points ou les flèches.
Sur Magento, cette recette n’ajoute pas de bouton de pause. Le slider de Page Builder fonctionne avec les propres scripts de Magento, et un thème ne peut pas lui donner de bouton de pause sans surcharger le code de Magento. La recette utilise à la place le réglage propre au slider : sur chaque slider Page Builder à défilement automatique présent dans les fichiers du thème, le défilement automatique est désactivé, comme le fait l’interrupteur Autoplay de Page Builder, et les flèches sont activées là où le slider n’aurait sinon aucun moyen de passer d’une diapositive à l’autre. Les animations CSS sans fin qui font bouger un slider d’elles-mêmes sont retirées. Les diapositives ne changent alors que lorsque le visiteur utilise les points ou les flèches : rien ne bouge tout seul, il n’y a donc rien à mettre en pause. Un slider stocké dans la base de données de Magento n’est pas un fichier du thème : vous désactivez son défilement automatique avec le réglage Autoplay de Page Builder. Un slider que les propres scripts du thème démarrent avec le défilement automatique, comme un slider Slick ou Swiper, a besoin d’un bouton de pause relié à ce script, ce qui est laissé à une personne.
- Règles couvertes
-
-
vs-carouselAUTO
-
- Types de fichiers modifiés
-
.css.html.less
turns off the Page Builder autoplay and the track animation, and validates Données d’exemple app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 3 3 class="pagebuilder-slider slick-slider" 4 4 data-content-type="slider" 5 5 data-appearance="default" 6 Supprimée data-autoplay="true" 6 Ajoutée data-autoplay="false" 7 7 data-autoplay-speed="3000" 8 8 data-fade="false" 9 9 data-infinite-loop="true" app/design/frontend/Validiscan/fixture/web/css/source/_theme.less Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/source/_theme.less (lignes ajoutées : 0, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/source/_theme.less (lignes ajoutées : 0, lignes supprimées : 1) Ligne avant Ligne après Modification Code 1176 1176 .slick-track { 1177 1177 display: flex; 1178 1178 width: 300%; 1179 Supprimée animation: nw-slider-autoplay 9s ease-in-out infinite; 1180 1179 } 1181 1180 .slick-slide { 1182 1181 flex: 0 0 33.3333%; app/design/frontend/Validiscan/fixture/web/css/styles-m.css Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/styles-m.css (lignes ajoutées : 0, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/styles-m.css (lignes ajoutées : 0, lignes supprimées : 1) Ligne avant Ligne après Modification Code 1147 1147 .slick-track { 1148 1148 display: flex; 1149 1149 width: 300%; 1150 Supprimée animation: nw-slider-autoplay 9s ease-in-out infinite; 1151 1150 } 1152 1151 .slick-slide { 1153 1152 flex: 0 0 33.3333%; -
Ni texte clignotant ni texte défilant remove-blink-marquee Les éléments
<blink>et<marquee>des templates du thème deviennent des éléments statiques ettext-decoration: blinkquitte les feuilles de style du thème, de sorte qu’aucun texte ne bouge ni ne clignote tout seul.Les éléments
<blink>et<marquee>des templates du thème deviennent des éléments statiques, avec le même contenu, les mêmes classes et les mêmes id : un<span>pour blink, un<div>pour marquee. Les attributs propres au marquee, comme sa vitesse et sa direction de défilement, sont retirés, de même que le styletext-decoration: blinkdans les feuilles de style du thème : aucun texte ne bouge ni ne clignote donc tout seul.- Règles couvertes
-
-
blinkAUTO -
marqueeAUTO
-
- Types de fichiers modifiés
-
.html.phtml
makes an added ticker static and validates Données d’exemple app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html (lignes ajoutées : 2, lignes supprimées : 2)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html (lignes ajoutées : 2, lignes supprimées : 2) Ligne avant Ligne après Modification Code 1 Supprimée <marquee class="news-ticker" behavior="scroll" direction="left" scrollamount="4"> 1 Ajoutée <div class="news-ticker"> 2 2 <p>Autumn sale: 20% off all jackets</p> 3 Supprimée </marquee> 3 Ajoutée </div> 4 4 <!-- VALIDISCAN-SEEDED vs-carousel + vs-motion + aria-hidden-focus: Page Builder slider autoplays (data-autoplay and a CSS animation) with no pause control; hidden slides keep focusable links; dots have no names --> 5 5 <div 6 6 class="pagebuilder-slider slick-slider" app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/top-promo.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/top-promo.phtml (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Theme/templates/html/top-promo.phtml (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 5 5 // Fixed variant: moved into the header (header.container) and styled with line-height 1.5, no fixed height. 6 6 ?> 7 7 <!-- VALIDISCAN-SEEDED region + vs-text-spacing: the promo text sits outside every landmark in a fixed 26px-high box --> 8 Supprimée <div class="top-promo"><p class="top-promo-text"><blink><?= $block->escapeHtml(__('Free shipping on orders over €75')) ?></blink><br><?= $block->escapeHtml(__('Free 30-day returns on every jacket')) ?></p></div> 8 Ajoutée <div class="top-promo"><p class="top-promo-text"><span><?= $block->escapeHtml(__('Free shipping on orders over €75')) ?></span><br><?= $block->escapeHtml(__('Free 30-day returns on every jacket')) ?></p></div> -
Aucun son qui démarre tout seul mute-autoplay Une vidéo des templates du thème qui se lance toute seule est rendue muette et un contenu audio ne démarre plus tout seul, sauf si du code PHP active la lecture automatique ; sur Magento, la recette n’est pas utilisée pour les constats de
vs-media.Une vidéo des templates du thème qui se lance toute seule reçoit
mutedetplaysinline: elle continue ainsi de jouer en silence et dans la page sur téléphone. Un contenu audio ne démarre plus tout seul. Les lecteurs YouTube et Vimeo intégrés qui démarrent seuls sont réglés pour démarrer sans le son. La lecture automatique qu’active du code PHP est laissée à une personne. Dans un scan Validiscan, le son qui démarre tout seul est signalé par le contrôle des médiasvs-mediade Validiscan, qui remplace la règle d’axe-core que cette recette couvre.vs-media, qui couvre aussi les sous-titres et les transcriptions, est MANUAL : sur Magento, un tel constat s’accompagne donc d’indications plutôt que de cette modification.- Règles couvertes
-
-
no-autoplay-audioAUTO contrôle assuré par vs-media
-
- Types de fichiers modifiés
-
.phtml
mutes the autoplaying product video and validates Données d’exemple app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/view/details.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/view/details.phtml (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/view/details.phtml (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 44 44 <h3 class="data item title"><?= $escaper->escapeHtml(__('Product video')) ?></h3> 45 45 <!-- VALIDISCAN-SEEDED vs-media: product video without a captions track --> 46 46 <?php /* Fixed variant: <track kind="captions" src="...juno-jacket-care.en.vtt" srclang="en" label="English" default>. */ ?> 47 Supprimée <video class="product-video-player" autoplay loop controls preload="none" width="560" height="315" poster="<?= $escaper->escapeUrl($product->getData('care_video_poster')) ?>"> 47 Ajoutée <video class="product-video-player" autoplay loop controls preload="none" width="560" height="315" poster="<?= $escaper->escapeUrl($product->getData('care_video_poster')) ?>" muted playsinline> 48 48 <source src="<?= $escaper->escapeUrl($videoUrl) ?>" type="video/mp4"> 49 49 </video> 50 50 <p><?= $escaper->escapeHtml($product->getData('care_video_caption')) ?></p>
Formulaires, panier et contenu intégré
-
Des étiquettes reliées à leurs champs label-association Un texte d’étiquette qui figure déjà sur la page avant un champ y est relié, sous forme de
<label>ou pararia-labelledby.Un champ de formulaire dont le texte d’étiquette figure déjà sur la page, avant le champ, est relié à ce texte. Un
<label>sansforen reçoit un qui pointe vers le champ. Un texte d’étiquette dans un<span>ou un<strong>, comme un texte « Sort By » portant la classesorter-labelde Luma à côté du menu de tri d’une page de catégorie, devient un<label>avec les mêmes classes. Un texte d’étiquette dans un élément de bloc, comme<div class="label">, garde sa balise et est relié pararia-labelledby. Le texte doit se trouver dans un conteneur sans autre champ, de sorte qu’il ne puisse pas appartenir à un autre. Les lecteurs d’écran lisent alors l’étiquette lorsque le champ reçoit le focus. Un champ qui n’a qu’un texte indicatif (placeholder) est laissé à une personne, car rédiger une étiquette est une décision de contenu.- Règles couvertes
-
-
labelAUTO contrôle assuré par vs-forms-ecommerce -
select-nameASSISTED -
vs-forms-ecommerceAUTO
-
- Types de fichiers modifiés
-
.phtml
turns the "Sort By" text into the sorter label and validates Données d’exemple app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/list/toolbar.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/list/toolbar.phtml (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/list/toolbar.phtml (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 12 12 <div class="toolbar-sorter sorter"> 13 13 <!-- VALIDISCAN-SEEDED select-name + vs-forms-ecommerce: the "Sort By" text is a span, not a label for the select --> 14 14 <?php /* Fixed variant: <label class="sorter-label" for="sorter">Sort By</label>. */ ?> 15 Supprimée <span class="sorter-label"><?= $escaper->escapeHtml(__('Sort By')) ?></span> 15 Ajoutée <label class="sorter-label" for="sorter"><?= $escaper->escapeHtml(__('Sort By')) ?></label> 16 16 <select id="sorter" data-role="sorter" class="sorter-options"> 17 17 <?php foreach ($block->getAvailableOrders() as $key => $order): ?> 18 18 <option value="<?= $escaper->escapeHtmlAttr($key) ?>"<?= $block->isOrderCurrent($key) ? ' selected' : '' ?>><?= $escaper->escapeHtml(__($order)) ?></option> -
Des champs de compte, d’adresse et de contact que les navigateurs peuvent remplir autocomplete-tokens Les champs des templates du thème qui demandent des données propres au client, dans les formulaires d’adresse, de compte, de connexion, de contact et de newsletter, reçoivent la valeur
autocompletequi correspond à ce qu’ils demandent, sauf si le code d’un template l’écrit.Les champs des templates du thème qui demandent des données propres au client, dans les formulaires d’adresse, de compte, de connexion, de contact et de newsletter, reçoivent la valeur
autocompletequi correspond à ce qu’ils demandent, comme l’adresse e-mail, le nom, le numéro de téléphone, l’adresse postale, le code postal ou le mot de passe. La valeur est déduite du type, du nom, de l’id, de l’étiquette, du texte indicatif et du titre du champ, selon les mêmes règles que le contrôle des formulaires de Validiscan, et les champs de facturation et de livraison reçoivent leur section, comme dansshipping given-name. Dès qu’un champ d’un formulaire est signalé, tous les champs de ce formulaire sont traités. Les mots de passe reçoiventnew-passworddans les formulaires d’inscription et de réinitialisation et dans les formulaires qui comportent plusieurs champs de mot de passe, etcurrent-passwordailleurs. Les champs de code promo, de recherche, de destinataire de cadeau, de commentaire, de quantité et de CAPTCHA ne reçoivent jamais de valeur. Une valeur que le code d’un template écrit, ou une valeur valide qui semble erronée pour le champ, est laissée à une personne.- Règles couvertes
-
-
autocomplete-validAUTO contrôle assuré par vs-forms-ecommerce -
vs-forms-ecommerceAUTO
-
- Types de fichiers modifiés
-
.phtml
adds tokens to the newsletter, login and contact forms and validates Données d’exemple app/design/frontend/Validiscan/fixture/Magento_Contact/templates/form.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Contact/templates/form.phtml (lignes ajoutées : 3, lignes supprimées : 3)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Contact/templates/form.phtml (lignes ajoutées : 3, lignes supprimées : 3) Ligne avant Ligne après Modification Code 21 21 <!-- VALIDISCAN-SEEDED vs-forms-ecommerce: name, email and phone lack autocomplete; required only via the CSS asterisk --> 22 22 <div class="field name required"> 23 23 <label class="label" for="name"><span><?= $escaper->escapeHtml(__('Name')) ?></span></label> 24 Supprimée <div class="control"><input name="name" id="name" title="<?= $escaper->escapeHtmlAttr(__('Name')) ?>" value="<?= $escaper->escapeHtmlAttr($viewModel->getUserName()) ?>" class="input-text" type="text"></div> 24 Ajoutée <div class="control"><input name="name" id="name" title="<?= $escaper->escapeHtmlAttr(__('Name')) ?>" value="<?= $escaper->escapeHtmlAttr($viewModel->getUserName()) ?>" class="input-text" type="text" autocomplete="name"></div> 25 25 </div> 26 26 <div class="field email required"> 27 27 <label class="label" for="email"><span><?= $escaper->escapeHtml(__('Email')) ?></span></label> 28 Supprimée <div class="control"><input name="email" id="email" title="<?= $escaper->escapeHtmlAttr(__('Email')) ?>" value="<?= $escaper->escapeHtmlAttr($viewModel->getUserEmail()) ?>" class="input-text" type="email"></div> 28 Ajoutée <div class="control"><input name="email" id="email" title="<?= $escaper->escapeHtmlAttr(__('Email')) ?>" value="<?= $escaper->escapeHtmlAttr($viewModel->getUserEmail()) ?>" class="input-text" type="email" autocomplete="email"></div> 29 29 </div> 30 30 <div class="field telephone"> 31 31 <label class="label" for="telephone"><span><?= $escaper->escapeHtml(__('Phone Number')) ?></span></label> 32 Supprimée <div class="control"><input name="telephone" id="telephone" title="<?= $escaper->escapeHtmlAttr(__('Phone Number')) ?>" value="<?= $escaper->escapeHtmlAttr($viewModel->getUserTelephone()) ?>" class="input-text" type="tel"></div> 32 Ajoutée <div class="control"><input name="telephone" id="telephone" title="<?= $escaper->escapeHtmlAttr(__('Phone Number')) ?>" value="<?= $escaper->escapeHtmlAttr($viewModel->getUserTelephone()) ?>" class="input-text" type="tel" autocomplete="tel"></div> 33 33 </div> 34 34 <div class="field comment required"> 35 35 <label class="label" for="comment"><span><?= $escaper->escapeHtml(__('What’s on your mind?')) ?></span></label> app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/login.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/login.phtml (lignes ajoutées : 2, lignes supprimées : 2)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/login.phtml (lignes ajoutées : 2, lignes supprimées : 2) Ligne avant Ligne après Modification Code 27 27 <div class="field email required"> 28 28 <label class="label" for="email"><span><?= $escaper->escapeHtml(__('Email')) ?></span></label> 29 29 <div class="control"> 30 Supprimée <input name="login[username]" value="<?= $escaper->escapeHtmlAttr($username) ?>" autocomplete="off" id="email" type="email" class="input-text mage-error" title="<?= $escaper->escapeHtmlAttr(__('Email')) ?>" aria-invalid="true" tabindex="1" onpaste="return false;" data-mage-init='{"mage/trim-input":{}}'> 30 Ajoutée <input name="login[username]" value="<?= $escaper->escapeHtmlAttr($username) ?>" autocomplete="email" id="email" type="email" class="input-text mage-error" title="<?= $escaper->escapeHtmlAttr(__('Email')) ?>" aria-invalid="true" tabindex="1" onpaste="return false;" data-mage-init='{"mage/trim-input":{}}'> 31 31 <div for="email" generated="true" class="mage-error" id="email-error"><?= $escaper->escapeHtml(__('Please enter a valid email address (Ex: johndoe@domain.com).')) ?></div> 32 32 </div> 33 33 </div> 35 35 <div class="field password required"> 36 36 <label for="pass" class="label"><span><?= $escaper->escapeHtml(__('Password')) ?></span></label> 37 37 <div class="control"> 38 Supprimée <input name="login[password]" type="password" autocomplete="off" class="input-text" id="pass" title="<?= $escaper->escapeHtmlAttr(__('Password')) ?>" tabindex="2" onpaste="return false;" oncopy="return false;"> 38 Ajoutée <input name="login[password]" type="password" autocomplete="current-password" class="input-text" id="pass" title="<?= $escaper->escapeHtmlAttr(__('Password')) ?>" tabindex="2" onpaste="return false;" oncopy="return false;"> 39 39 </div> 40 40 </div> 41 41 <!-- VALIDISCAN-SEEDED vs-accessible-auth: arithmetic CAPTCHA with no alternative --> app/design/frontend/Validiscan/fixture/Magento_Newsletter/templates/subscribe.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Newsletter/templates/subscribe.phtml (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Newsletter/templates/subscribe.phtml (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 18 18 <!-- VALIDISCAN-SEEDED vs-forms-ecommerce (label): newsletter email only has a placeholder, no label and no autocomplete --> 19 19 <div class="field newsletter"> 20 20 <div class="control"> 21 Supprimée <input name="email" type="email" id="newsletter" placeholder="<?= $escaper->escapeHtmlAttr(__('Enter your email address')) ?>" data-mage-init='{"mage/trim-input":{}}' data-validate="{required:true, 'validate-email':true}"> 21 Ajoutée <input name="email" type="email" id="newsletter" placeholder="<?= $escaper->escapeHtmlAttr(__('Enter your email address')) ?>" data-mage-init='{"mage/trim-input":{}}' data-validate="{required:true, 'validate-email':true}" autocomplete="email"> 22 22 </div> 23 23 </div> 24 24 <div class="actions"> -
Les changements de prix, de stock et de panier annoncés live-region-cart-variant Les conteneurs des templates du thème que réécrivent les scripts de Magento, comme le bloc de prix et le compteur du mini-panier, deviennent des régions live ; les scripts ne sont pas modifiés.
Les scripts propres à Magento réécrivent le texte à l’intérieur de conteneurs fixes lorsqu’un client choisit une taille ou une couleur ou ajoute un produit au panier. La recette transforme ces conteneurs, dans les templates du thème, en régions live, de sorte que les lecteurs d’écran lisent la nouvelle valeur sans que le client ait à s’y déplacer. Le bloc de prix et le compteur du mini-panier sont lus en entier lorsqu’ils changent ; le message de stock et les messages de la page, comme la note indiquant qu’un produit a été ajouté au panier, reçoivent
role="status". Les scripts eux-mêmes ne sont pas modifiés. Lorsque le thème désigne toute la page comme une région live, ce qui pousse les lecteurs d’écran à lire chaque changement à voix haute, cette désignation est retirée. Lorsque c’est le script d’une extension qui l’ajoute pendant l’exécution de la page, le cas est laissé à une personne.- Règles couvertes
-
-
vs-live-updatesAUTO
-
- Types de fichiers modifiés
-
.phtml
makes the price box and the stock message live regions and validates Données d’exemple app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/price/final_price.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/price/final_price.phtml (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/price/final_price.phtml (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 13 13 // Fixed variant: the product-page box carries aria-live="polite" aria-atomic="true" and the stock 14 14 // message (product/view/type/default.phtml) is role="status". 15 15 ?> 16 Supprimée <div class="price-box price-final_price" data-role="priceBox" data-product-id="<?= (int) $product->getId() ?>" data-price-box="product-id-<?= (int) $product->getId() ?>"<?php if ($isProductPage): ?> data-base-price="<?= (float) $amount ?>"<?php endif; ?>> 16 Ajoutée <div class="price-box price-final_price" data-role="priceBox" data-product-id="<?= (int) $product->getId() ?>" data-price-box="product-id-<?= (int) $product->getId() ?>"<?php if ($isProductPage): ?> data-base-price="<?= (float) $amount ?>"<?php endif; ?> aria-live="polite" aria-atomic="true"> 17 17 <span class="normal-price"><span class="price-container price-final_price tax weee"><span id="product-price-<?= (int) $product->getId() ?>" data-price-amount="<?= (float) $amount ?>" data-price-type="finalPrice" class="price-wrapper"><span class="price"><?= $escaper->escapeHtml($block->renderAmount($block->getPriceType('final_price')->getAmount(), ['display_label' => false])) ?></span></span></span></span> 18 18 </div> app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/view/type/default.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/view/type/default.phtml (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/view/type/default.phtml (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 11 11 ?> 12 12 <div class="product-info-stock-sku"> 13 13 <?php if ($block->displayProductStockStatus()): ?> 14 Supprimée <div class="stock available" title="<?= $escaper->escapeHtmlAttr(__('Availability')) ?>"><span><?= $escaper->escapeHtml(__('In stock')) ?></span></div> 14 Ajoutée <div class="stock available" title="<?= $escaper->escapeHtmlAttr(__('Availability')) ?>" role="status"><span><?= $escaper->escapeHtml(__('In stock')) ?></span></div> 15 15 <?php endif; ?> 16 16 <div class="product attribute sku"><strong class="type"><?= $escaper->escapeHtml(__('SKU')) ?></strong> <div class="value" itemprop="sku"><?= $escaper->escapeHtml($product->getSku()) ?></div></div> 17 17 </div> -
Des titres pour les cartes et les vidéos intégrées iframe-title Un cadre intégré sans titre reçoit un titre traduisible qui dit ce qu’il montre, lorsque le code le révèle.
Un cadre intégré sans titre, comme une carte, une vidéo YouTube ou Vimeo, un calendrier, un formulaire ou un widget d’avis, reçoit un titre traduisible qui dit ce qu’il montre. La recette déduit ce que montre le cadre de son adresse, y compris les parties fixes d’une adresse que construit du code PHP, ainsi que de ses classes, de son id et de son nom. Un cadre dont le code ne révèle pas le contenu ne reçoit aucun titre de la recette et est laissé à une personne.
- Règles couvertes
-
-
frame-titleAUTO
-
- Types de fichiers modifiés
-
.phtml
titles the store map on the contact page and validates Données d’exemple app/design/frontend/Validiscan/fixture/Magento_Contact/templates/form.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Contact/templates/form.phtml (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Contact/templates/form.phtml (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 48 48 <p>Nordwind Outfitters (fixture)<br>Musterstraße 12<br>10115 Berlin, Germany</p> 49 49 <p><?= $escaper->escapeHtml(__('Monday to Saturday, 10:00 to 19:00')) ?></p> 50 50 <!-- VALIDISCAN-SEEDED frame-title: the store map iframe has no title --> 51 Supprimée <iframe src="<?= $escaper->escapeUrl($block->getBaseUrl() . 'media/wysiwyg/store-map.html') ?>" width="480" height="260" loading="lazy"></iframe> 51 Ajoutée <iframe src="<?= $escaper->escapeUrl($block->getBaseUrl() . 'media/wysiwyg/store-map.html') ?>" width="480" height="260" loading="lazy" title="<?= $escaper->escapeHtmlAttr(__('Store location map')) ?>"></iframe> 52 52 </div> 53 53 </div>
Contraste, images et commandes qui demandent du jugement
Le contraste du texte, les alternatives textuelles des images et les noms des commandes qui n’en ont pas demandent généralement du jugement : quelle couleur convient à votre marque, quels mots décrivent une image. Les règles qui les signalent ont le niveau ASSISTED, comme le montrent les listes ci-dessous. Pour un constat d’une règle ASSISTED, l’IA ne rédige une modification que si vous avez accepté la rédaction par IA, et Validiscan relit chaque modification avant sa livraison.
Les quatre recettes ci-dessous ne sont la correction standard d’aucune règle. Chacune ne couvre que les cas précis où le code du thème suffit à lui seul à prouver quelle doit être la modification. Dans un projet, button-semantics est appliquée aux constats du contrôle de diaporama vs-carousel, du niveau AUTO : le moteur de correction l’essaie lorsque la recette de slider ci-dessus ne corrige pas un tel constat. Sur Magento, les trois autres ne couvrent que des règles ASSISTED : un constat de ces règles suit la voie ASSISTED, et ces trois recettes ne lui sont pas appliquées.
-
Des couleurs de texte suffisamment contrastées contrast-tokens Une couleur de texte qui échoue au contrôle du contraste et qui est définie à un seul endroit passe à la couleur la plus proche de la même teinte qui réussit sur chaque arrière-plan mesuré ; recette non appliquée dans un projet.
Lorsqu’un texte échoue au contrôle du contraste et que sa couleur est définie à un seul endroit du thème, cet endroit passe à la couleur la plus proche de la même teinte qui atteint le contraste requis avec chaque arrière-plan que le scan a mesuré pour ce texte. Cet endroit peut être une variable LESS ou une propriété personnalisée CSS utilisée uniquement pour la couleur du texte, ou une seule règle
color. Lorsque le thème fournit unstyles-m.csscompilé, il reçoit la même modification. Une couleur utilisée à plusieurs endroits, aussi comme arrière-plan ou comme bordure, ou dans des règles dont le scan n’a pas mesuré l’arrière-plan, est laissée à une personne.- Règles couvertes
-
-
color-contrastASSISTED
-
- Types de fichiers modifiés
-
.css.less
darkens the single #929292 token and validates Données d’exemple app/design/frontend/Validiscan/fixture/web/css/source/_theme.less Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/source/_theme.less (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/source/_theme.less (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 1099 1099 // VALIDISCAN-SEEDED color-contrast: #929292 on white is 3.1:1. 1100 1100 .block-promo .info, 1101 1101 .toolbar-amount { 1102 Supprimée color: #929292; 1102 Ajoutée color: #767676; 1103 1103 } 1104 1104 1105 1105 // VALIDISCAN-SEEDED vs-reflow: the promo row keeps a 1100px minimum width at every breakpoint. app/design/frontend/Validiscan/fixture/web/css/styles-m.css Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/styles-m.css (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/web/css/styles-m.css (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 1075 1075 1076 1076 .block-promo .info, 1077 1077 .toolbar-amount { 1078 Supprimée color: #929292; 1078 Ajoutée color: #767676; 1079 1079 } 1080 1080 1081 1081 .block-promo-wrapper { -
Des images décoratives masquées aux lecteurs d’écran decorative-image-alt Seules les images dont le template prouve qu’elles sont décoratives reçoivent un
altvide ouaria-hidden; recette non appliquée dans un projet.Une image n’est marquée comme décorative que lorsque le template prouve qu’elle n’apporte rien : elle se trouve dans un lien ou un bouton qui a déjà un texte ou un nom, comme une vignette de promotion avec son propre titre ; c’est une icône, de 48 pixels au plus ou avec une classe ou un nom de fichier d’icône, placée à côté de sa propre étiquette textuelle ; ou c’est un espaceur ou un séparateur. Un
<img>reçoit alors unaltvide, et une icône SVG reçoitaria-hidden="true", de sorte que les lecteurs d’écran l’ignorent au lieu de lire un nom de fichier. Toute autre image est traitée comme du contenu, et son alternative textuelle demande des mots qu’une personne choisit.- Règles couvertes
-
-
image-altASSISTED -
role-img-altASSISTED -
svg-img-altASSISTED
-
- Types de fichiers modifiés
-
.html
marks the promo tile image decorative and validates Données d’exemple app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 111 111 <div class="block-promo-wrapper block-promo-hp"> 112 112 <!-- VALIDISCAN-SEEDED image-alt: promo image without an alt attribute --> 113 113 <a class="block-promo home-main" href="/magento/women/tops-women/jackets-women.html"> 114 Supprimée <img src="/magento/media/wysiwyg/home/home-main.svg" width="400" height="240" /> 114 Ajoutée <img src="/magento/media/wysiwyg/home/home-main.svg" width="400" height="240" alt="" /> 115 115 <span class="content" 116 116 ><!-- VALIDISCAN-SEEDED color-contrast: .info text is #929292 on white (3.1:1) --><span 117 117 class="info" -
Des noms pour les boutons et les liens qui n’ont qu’une icône icon-accessible-name Les boutons et les liens qui n’affichent qu’une icône et dont le code révèle la fonction reçoivent un
aria-label, dans la formulation du thème Luma de Magento lorsque Luma en a une ; recette non appliquée dans un projet.Les boutons et les liens qui n’affichent qu’une icône, comme la recherche, le mini-panier, le compte, la liste de souhaits, la comparaison, le menu, la fermeture, les boutons précédent et suivant, ainsi que les choix d’un bandeau cookies, reçoivent un
aria-labelqui dit ce qu’ils font, dans la formulation du thème Luma de Magento lorsque Luma en a une, comme « Search », « My Cart » ou « Allow Cookies ». La fonction est déduite des classes, de l’id, des attributs data et de la cible de lien de la commande, de son icône et du formulaire ou du bandeau cookies qui l’entoure. Une commande dont le code ne révèle pas la fonction, comme un lien de réseau social construit dans une boucle à partir d’une adresse stockée sous forme de données, ou un lien dont le seul contenu est une photo de produit, est laissée à une personne, car son nom dépend de votre contenu.- Règles couvertes
-
-
button-nameASSISTED -
link-nameASSISTED -
vs-cookie-bannerASSISTED
-
- Types de fichiers modifiés
-
.phtml
names the icon-only search button and validates Données d’exemple app/design/frontend/Validiscan/fixture/Magento_Search/templates/form.mini.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Search/templates/form.mini.phtml (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Search/templates/form.mini.phtml (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 20 20 <div class="actions"> 21 21 <!-- VALIDISCAN-SEEDED button-name: icon-only search button without text, title or aria-label --> 22 22 <?php /* Fixed variant: <button type="submit" title="Search" class="action search"><span class="sr-only">Search</span>(icon, aria-hidden)</button>; the form gets role="search" aria-label="Site search". */ ?> 23 Supprimée <button type="submit" class="action search"><svg class="icon" viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="M20 20l-4-4"/></svg></button> 23 Ajoutée <button type="submit" class="action search" aria-label="<?= $escaper->escapeHtmlAttr(__('Search')) ?>"><svg class="icon" viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="M20 20l-4-4"/></svg></button> 24 24 </div> 25 25 </form> 26 26 </div> names the minicart link and leaves the product photo link for review Données d’exemple app/design/frontend/Validiscan/fixture/Magento_Checkout/templates/cart/minicart.phtml Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Checkout/templates/cart/minicart.phtml (lignes ajoutées : 1, lignes supprimées : 1)
Modifications apportées à app/design/frontend/Validiscan/fixture/Magento_Checkout/templates/cart/minicart.phtml (lignes ajoutées : 1, lignes supprimées : 1) Ligne avant Ligne après Modification Code 13 13 ?> 14 14 <!-- VALIDISCAN-SEEDED link-name + aria-valid-attr-value: the "My Cart" text was removed from the minicart link (only an icon and an empty counter remain) and aria-expanded carries the invalid value "closed" --> 15 15 <div data-block="minicart" class="minicart-wrapper"> 16 Supprimée <a class="action showcart" href="<?= $escaper->escapeUrl($block->getShoppingCartUrl()) ?>" data-bind="scope: 'minicart_content'" aria-haspopup="true" aria-expanded="closed"> 16 Ajoutée <a class="action showcart" href="<?= $escaper->escapeUrl($block->getShoppingCartUrl()) ?>" data-bind="scope: 'minicart_content'" aria-haspopup="true" aria-expanded="closed" aria-label="<?= $escaper->escapeHtmlAttr(__('My Cart')) ?>"> 17 17 <svg class="icon" viewBox="0 0 24 24"><path d="M3 4h2l2.4 11.2a2 2 0 0 0 2 1.6h7.7a2 2 0 0 0 2-1.5L21 8H6"/><circle cx="10" cy="20" r="1.5"/><circle cx="17" cy="20" r="1.5"/></svg> 18 18 <span class="counter qty empty"><span class="counter-number"></span></span> 19 19 </a>
Détails : les niveaux, le thème de test, les contrôles de chaque modification et le texte dans les langues de votre boutique
Une recette est une modification déterministe pour un type d’échec : le même code reçoit toujours la même modification. Validiscan dispose de 20 recettes pour les thèmes Magento. Chacune n’intervient que là où le code du thème montre quelle modification est la bonne. Là où il ne le montre pas, la recette ne change rien. Elle ne devine pas.
Sous chaque recette figurent les règles qu’elle couvre, avec le niveau de chaque règle dans le catalogue de Validiscan pour Magento. AUTO signifie qu’une recette est la correction standard de la règle. ASSISTED signifie que les constats de la règle demandent généralement du jugement. MANUAL signifie que la règle demande la décision d’une personne et s’accompagne d’indications. Dans un projet, les recettes sont appliquées aux constats des règles du niveau AUTO. Lorsqu’une recette énumère aussi une règle du niveau ASSISTED ou MANUAL, un constat de cette règle suit à la place la voie ASSISTED ou MANUAL. Une règle dont le contrôle est assuré par un autre contrôle n’est pas exécutée seule lors d’un scan : cet autre contrôle signale le même échec.
Les types de fichiers et l’avant et l’après de chaque recette proviennent des tests internes de Validiscan. Ils s’exécutent sur le thème de test Magento de Validiscan, un thème enfant du thème Luma de Magento dans lequel des échecs d’accessibilité ont été introduits volontairement. Le rendu de Magento est impossible dans l’environnement de test : aucun test ne produit donc de page. Chaque test compare la modification à un diff enregistré et vérifie la source modifiée, par exemple qu’elle correspond à la version corrigée du thème de test. Les fichiers de votre thème seront différents.
Avant que Validiscan ne relise une modification, les fichiers modifiés sont contrôlés. Chaque chemin doit se trouver à l’intérieur du thème, comme décrit plus haut. Les templates .phtml passent par le contrôle de syntaxe propre à PHP, qui lit le fichier sans l’exécuter. Le XML de layout est contrôlé comme du XML, les feuilles de style subissent un contrôle de structure, et les templates HTML et le JavaScript sont analysés.
Lorsqu’une recette ajoute des mots, comme le texte d’un lien d’évitement ou le nom d’une zone de navigation, elle les écrit en anglais, dans la formulation du thème Luma de Magento lorsque Luma en a une, comme « Skip to Content ». Lorsque votre thème a un fichier de traduction allemand dans son dossier i18n, la recette y ajoute le texte allemand, sauf si la chaîne est déjà traduite. Aucun texte n’est ajouté pour les autres langues de votre boutique.
Qu’est-ce qui reste MANUAL sur Magento ?
Les échecs qui exigent une décision sur votre contenu ou sur le comportement d’une partie de la page, qu’une recette ne prend pas, comme les sous-titres et transcriptions de vos vidéos et contenus audio, restent MANUAL sur Magento. Pour un constat d’une règle MANUAL, Validiscan donne des indications, et non une modification du code.
Les règles ci-dessous sont exécutées lors d’un scan et ont le niveau MANUAL sur Magento ; les règles de bonne pratique ne sont pas énumérées.
-
meta-refreshL’actualisation différée de moins de 20 heures ne doit pas être utilisée -
nested-interactiveLes éléments interactifs ne doivent pas être imbriqués -
scrollable-region-focusableLes zones défilantes doivent être accessibles au clavier -
server-side-image-mapLes images réactives côté serveur ne doivent pas être utilisées -
vs-keyboard-trapLe focus clavier ne doit jamais rester piégé -
vs-focus-orderL’ordre de tabulation doit suivre l’ordre visuel -
vs-draggingLes éléments à faire glisser doivent offrir une alternative à pointeur unique -
vs-mediaLes vidéos ont besoin de sous-titres, l’audio d’une transcription, et rien ne doit démarrer automatiquement avec le son -
vs-documentsLes documents liés nécessitent une vérification manuelle de l’accessibilité
Détails : ce que reçoit un constat MANUAL, la règle de l’ordre de tabulation, et ce qu’un projet laisse de côté
Pour un constat d’une règle MANUAL, Validiscan donne des indications sur la façon de le corriger, et non une modification de votre code. Ces échecs exigent une décision sur votre contenu ou sur le comportement d’une partie de la page, qu’une recette ne prend pas : les sous-titres et les transcriptions de vos vidéos et de vos contenus audio, un moyen de sortir d’un widget qui piège le focus clavier, un second moyen d’utiliser une commande qui ne fonctionne qu’en la faisant glisser, un ordre de focus qui correspond à la mise en page, une page qui se recharge d’elle-même après un délai, ou l’accessibilité des PDF et des autres documents liés. Un ordre de tabulation forcé par un tabindex supérieur à 0 est aussi signalé par la règle tabindex d’axe-core, que corrige la recette de l’ordre de tabulation ci-dessus.
Le travail sur les constats MANUAL qui exigent vos propres décisions de contenu ne fait pas partie d’un projet, pas plus que les PDF. Ce que les tests d’accessibilité automatisés peuvent et ne peuvent pas prouver
Que devez-vous fournir ?
Vous fournissez l’autorisation écrite d’un scan complet, une voie d’accès à votre thème, votre réponse sur la rédaction par IA des corrections ASSISTED, un développeur qui relit les modifications, compile les feuilles de style et déploie le thème, des modifications dans l’Admin de Magento, les traductions du texte ajouté dans vos autres langues, et vos décisions sur ce qui reste MANUAL.
- Une autorisation écrite pour un scan complet de votre boutique. Un scan complet met un produit dans le panier et ouvre la première étape du tunnel de commande, sans finaliser d’achat ni saisir de données de paiement.
- Une voie d’accès à votre thème : l’accès au dépôt GitHub qui le contient, ou un ZIP du dossier du thème sous
app/design/frontend, téléversé dans le portail client. - Votre réponse à la question de savoir si l’IA peut rédiger des corrections du niveau ASSISTED. La rédaction par IA reste désactivée tant que vous n’avez pas donné votre accord.
- Un développeur qui relit les modifications, fusionne la pull request ou applique le lot de correctifs, compile les feuilles de style et déploie le thème.
- Les modifications dans l’Admin de Magento que les corrections ne font pas : la vue de magasin ou le balisage de langue pour un contenu rédigé dans une autre langue que celle de son magasin, les titres de pages et les réglages HTML Head, et le défilement automatique désactivé sur les sliders Page Builder stockés dans la base de données.
- Les traductions du texte qu’ajoutent les corrections, pour les autres langues de votre boutique. Les recettes écrivent en anglais et n’ajoutent de l’allemand que là où votre thème a déjà un fichier de traduction allemand.
- Vos décisions sur ce qui reste MANUAL, comme les sous-titres de vos vidéos.
Détails : une fois les modifications en ligne, et ce que couvre un projet
Une fois les modifications en ligne, un scan de vérification contrôle de nouveau les pages concernées, et le Remediation Evidence Package consigne le résultat. Le déroulement d’un projet, étape par étape
Un projet couvre une boutique : un domaine et un thème. Une vitrine headless, dont les pages sont construites par une application frontend distincte au lieu d’un thème, est traitée sur demande.
Sources
Une source, vérifiée pour cette page le 6 octobre 2026.
Documentation d’Adobe Commerce pour les développeurs 1
- CSS and LESS preprocessing · Adobe · vérifiée le
Commencez par une vérification gratuite de votre boutique.
Envoyez l’adresse de votre boutique. Validiscan la scanne et vous envoie chaque échec que le scan peut prouver, avec sa page et son code.
Demander une vérification gratuiteOu écrivez à info@validiscan.com.
Ce que couvre la vérification gratuite, et ce qu’elle laisse de côté- Vous envoyez
- l’adresse de votre boutique
- Pages scannées
- jusqu’à 15
- Vous recevez
- chaque échec que le scan peut prouver, avec la page et le code
- Sur votre boutique
- pages publiques uniquement ; aucune connexion, aucun achat, aucun formulaire envoyé
- Ce qu’elle n’est pas
- un audit complet