Rettelser af tilgængelighed i koden til dit tema på Magento

Validiscan retter tilgængelighedsfejl i .phtml-skabelonerne, layout-XML og LESS- eller CSS-stilarkene i dit Magento 2-tema. Intet når din live webshop, før din udvikler merger eller anvender ændringerne og ruller temaet ud.

Senest opdateret:

Hvad ændrer Validiscan i et Magento-tema?

Validiscan ændrer kun filerne i dit Magento 2-frontendtema, den mappe, der rummer dets theme.xml, som regel under app/design/frontend. En ændring af enhver anden fil består ikke valideringen og leveres aldrig, og ingen rettelse installerer en extension eller tilføjer et script, der omskriver dine sider i den besøgendes browser.

Skabeloner og stilark, som dit tema ikke overstyrer, kommer fra dets parent-tema, for eksempel Luma eller Blank, eller fra Magentos moduler. Opskrifterne kopierer ikke de filer ind i dit tema: Hvor en fejl kommer fra en fil, som dit tema ikke overstyrer, foretager opskriften ingen ændring, og fundet overlades til et menneske. Indhold og indstillinger, som du har i Magento Admin, for eksempel CMS-sider og CMS-blokke, indhold fra Page Builder, landestandarden for et store view eller indstillingerne for HTML Head, er ikke filer i temaet, så rettelserne ændrer dem ikke. Indlejret tredjepartsindhold som betalings- eller chatwidgets indgår ikke i et projekt.

Detaljer: mapperne, hvordan en ændring ser ud, og hvor opskrifterne tilføjer deres stilregler

Validiscan ændrer kun filerne i dit Magento 2-frontendtema, den mappe, der rummer dets theme.xml, som regel under app/design/frontend: .phtml- og .html-skabelonerne, layout-XML, LESS-kilderne og de kompilerede stilark under web/css, scriptene under web/js og den tyske oversættelsesfil i i18n. En ændring af enhver anden fil, for eksempel Magentos egen kode, en extension eller build-output, består ikke valideringen, og en ændring, der ikke består valideringen, kan ikke godkendes og leveres derfor aldrig.

Hver ændring er en almindelig redigering af en temafil, som din udvikler kan læse linje for linje. Nye stilregler, som en rettelse tilføjer, står i en blok sidst i stilarket mellem kommentarer, der angiver opskriftens navn, for eksempel /* validiscan:focus-visible-styles */. Mindre ændringer, for eksempel en rettet farveværdi eller en fjernet outline: none, foretages dér, hvor koden allerede står. Ord, som en rettelse tilføjer til en .phtml-skabelon, går gennem Magentos oversættelsesfunktion __() og escapes ligesom temaets egen tekst; i HTML-filer, som temaet har under Magento_Cms/content, bruger opskrifterne i stedet Magentos trans-direktiv. Magento gemmer CMS-sider og CMS-blokke i Magento Admin, så en ændring af en af disse filer når kun din webshop dér, hvor dit projekt indlæser filen i sine CMS-sider eller CMS-blokke. Ingen rettelse installerer en extension eller tilføjer et script, der omskriver dine sider i den besøgendes browser, sådan som et overlay gør.

Opskrifterne til fokusmarkeringen, klikfladerne, spring over-linket og nye knapper tilføjer deres stilregler sidst i temaets hovedstilark: dets _extend.less eller _theme.less under web/css/source, med en ny _extend.less, hvor et tema bygget på Luma eller Blank ikke har nogen af dem, og desuden i en kompileret web/css/styles-m.css, hvor temaet leveres med en. På et tema, der ikke er bygget på Luma eller Blank og hverken har LESS-kilder dér eller den kompilerede fil, foretager opskrifterne til fokusmarkeringen, klikfladerne og knapperne ingen ændring, og opskriften til spring over-linket tilføjer linket uden styling.

Hvordan får Validiscan adgang til dit Magento-tema?

Gennem et GitHub-repository eller som en ZIP-fil med temamappen, uploadet i kundeportalen, fordi Validiscan udarbejder hver rettelse i en kopi af dit Magento-temas kildekode. Hvilken der passer, afhænger af, hvor koden ligger: Et repository giver en pull request, en ZIP-fil giver en patchpakke.

De to veje ind i et Magento-tema
Vej ind Det giver du Ændringerne kommer tilbage som
Gennem dit GitHub-repository Adgang til repositoriet, der kan rumme temaet alene eller hele dit Magento-projekt, gennem Validiscans GitHub-app eller et adgangstoken En pull request
Ud fra en ZIP-fil med temamappen Din temamappe under app/design/frontend som én ZIP-fil på op til 100 MB, uploadet i kundeportalen af en administrator i din organisation En patchpakke

Gennem dit GitHub-repository

Hvis koden til dit tema ligger i et GitHub-repository, giver du Validiscan adgang til det repository. Du installerer Validiscans GitHub-app på det eller giver Validiscan et adgangstoken til det. Validiscans opsætning angiver appens tilladelser som læse- og skriveadgang til repositoriets indhold og pull requests og læseadgang til dets metadata, og intet andet.

Repositoriet kan rumme temaet alene eller hele dit Magento-projekt. Opskrifterne finder temaet via dets theme.xml i app/design/frontend/<Vendor>/<theme> eller i roden af et repository, der kun rummer temaet, ved siden af dets registration.php. Hvis repositoriet rummer flere frontendtemaer, arbejder en opskrift på det tema, hvor elementet med fejlen blev fundet, og ændrer intet, når den ikke kan afgøre, hvilket tema det er. Et tema, der ligger et andet sted i et projekt, for eksempel som en Composer-pakke under vendor, ligger uden for de stier, en rettelse må ændre. Ændringerne kommer som en pull request.

Ud fra en ZIP-fil med temamappen

Uden et GitHub-repository laver din udvikler en ZIP-fil med temaet. Kundeportalen giver denne vejledning: »Bed din udvikler om en ZIP-fil med din temamappe under app/design/frontend.« En administrator i din organisation uploader derefter filen i kundeportalen som én ZIP-fil på op til 100 MB. Validiscan udarbejder ændringerne ud fra den kopi af dit tema og sender dem tilbage som en patchpakke.

Uden nogen af de to veje har Validiscan ingen kode at ændre, og der udarbejdes ingen rettelse.

Hvordan når ændringerne frem til din webshop?

På Magento kommer ændringerne som en pull request eller som en patchpakke, og din udvikler afgør, hvornår de går live. Validiscan leverer kun ændringer, som Validiscan har gennemgået og godkendt, og ændrer ikke din live webshop; levering som en upubliceret kopi af temaet bruger Shopifys temabibliotek og findes kun for Shopify.

Fra levering til din live webshop, i fem trin
  1. Validiscan leverer de ændringer, som Validiscan har gennemgået og godkendt: en pull request på en ny branch eller en patchpakke til din udvikler.
  2. Din udvikler gennemgår ændringerne. Ved en pull request beder tjeklisten om et forhåndsvisnings- eller staging-miljø, ikke den live webshop, og om en kontrol af de berørte sider, også med tastaturet alene.
  3. Din udvikler merger pull requesten eller anvender patchpakken.
  4. Din udvikler kompilerer stilarkene og ruller temaet ud: LESS-ændringerne træder i kraft, når temaets statiske filer er rullet ud.
  5. Når ændringerne er live, kontrollerer en verifikationsscanning de berørte sider igen.

En pull request

Med adgang til dit repository opretter Validiscan en ny branch med navnet validiscan/a11y-<date>-<id>, committer hver rettelse for sig og åbner én pull request med en oversigtstabel, en forklaring af hver ændring og en tjekliste til gennemgangen. Der pushes intet til din standardbranch. Tjeklisten beder din udvikler om at rulle branchen ud i et forhåndsvisnings- eller staging-miljø, ikke i den live webshop, og om dér at kontrollere de berørte sider, også med tastaturet alene, før der merges.

En patchpakke

Ud fra den uploadede ZIP-fil udarbejder Validiscan et zip-arkiv og sender det til din udvikler. Det indeholder PATCH.md med hver ændring og en vejledning i at anvende den, alle ændringer i én patchfil, som kan anvendes med git apply, én patchfil pr. rettelse, de komplette ændrede filer og en README.md. Din udvikler anvender ændringerne, tester dem og ruller temaet ud. Hvad en pull request og en patchpakke indeholder

Sådan bygges stilarkene

Et tema baseret på Luma eller Blank har sin styling i LESS-kilder, og Magento kompilerer dem til den CSS, som webshoppen leverer. Magentos værktøj til udrulning af statiske filer, bin/magento setup:static-content:deploy, kompilerer LESS-filerne og udgiver resultatet, som Adobes dokumentation om forbehandling af CSS og LESS beskriver. LESS-ændringerne træder derfor i kraft, når din udvikler ruller det ændrede temas statiske filer ud. Hvor temaet også leveres med en kompileret web/css/styles-m.css, leverer Magento den fil, som den er, så opskrifterne foretager den samme ændring dér, og de to filer forbliver i trit. Hvor rettelser hører hjemme i et Magento-tema, og hvad en temaopdatering kan fortryde

Hvad ændrer opskrifterne i et Magento-tema?

Hver af Validiscans 20 opskrifter til Magento-temaer er en deterministisk ændring for én slags fejl: Den samme kode får altid den samme ændring. En opskrift foretager kun en ændring, hvor temaets kode viser, hvad den rigtige ændring er; hvor den ikke gør det, ændrer opskriften intet.

Sidestruktur og navigation

  • Sidens sprog ud fra webshoppens landestandard html-lang Hvor dit temas overstyring af rodskabelonen udskriver sin egen lang eller ingen, udskriver den igen Magentos egne attributter, så hver side får en gyldig lang.

    Magento angiver en sides sprog ud fra landestandarden (locale) for dens store view, for eksempel en for landestandarden en_US, og udskriver det gennem sin rodskabelon. Hvor dit tema overstyrer den skabelon og udskriver sin egen lang, typisk landestandardkoden en_US, som ikke er et gyldigt sprogtag, eller slet ingen lang, udskriver skabelonen igen Magentos egne attributter, så hver side får en gyldig lang. En lang, der er sat i layout-XML i landestandardformen, for eksempel de_DE, bliver til de-DE. En side, hvis indhold er på et andet sprog end dens store view, for eksempel en tysk juridisk side i en engelsksproget webshop, overlades til dig: Vis den fra et store view på det sprog, eller markér sproget i selve indholdet.

    Regler, den dækker
    • html-has-lang AUTO kontrolleres via vs-lang
    • html-lang-valid AUTO kontrolleres via vs-lang
    • vs-lang AUTO
    Filtyper, den ændrer
    .phtml
    fixes the vs-lang finding in root.phtml and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/Magento_Theme/templates/root.phtml Ændringer i app/design/frontend/Validiscan/fixture/Magento_Theme/templates/root.phtml: 1 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Theme/templates/root.phtml: 1 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <html lang="<?= $block->escapeHtmlAttr($htmlLocale) ?>">
    18 Tilføjet <html <?= /* @noEscape */ $htmlAttributes ?>>
    19 19 <head <?= /* @noEscape */ $headAttributes ?>>
    20 20 <?= /* @noEscape */ $requireJs ?>
    21 21 <?= /* @noEscape */ $headContent ?>
  • En titel på hver side document-title-template Tomme titler, som dit tema sætter i layout-XML, fjernes, så Magentos egen sidetitel igen gælder.

    Magento giver hver side sin egen titel, for eksempel navnet på produktet eller kategorien eller »Search results for:« og søgeordet, med det præfiks eller suffiks, der er angivet for din webshop. Et tema kan tilsidesætte den med en tom <title> i layout-XML, og siden har så ingen titel. Opskriften fjerner sådanne tomme titler, så Magentos egen titel igen gælder. Titler med tekst er din formulering og bliver, som de er. Hvis ingen layoutfil i temaet tømmer titlen, ændrer opskriften intet: Titlen kommer så fra selve siden og fra indstillingerne for HTML Head i Magento Admin.

    Regler, den dækker
    • document-title AUTO
    Filtyper, den ændrer
    .xml
    removes the blank search results title and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/Magento_CatalogSearch/layout/catalogsearch_result_index.xml Ændringer i app/design/frontend/Validiscan/fixture/Magento_CatalogSearch/layout/catalogsearch_result_index.xml: 0 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_CatalogSearch/layout/catalogsearch_result_index.xml: 0 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <title> </title>
    8 7 </head>
    9 8 <body>
    10 9 <referenceBlock name="search_result_list" template="Magento_Catalog::product/list.phtml"/>
  • Overskrifter uden oversprungne niveauer heading-levels En overskrift, der springer et niveau over, flyttes op med de overskrifter, der følger efter den i skabelonen, hvor niveauet før den kan læses; en sidetitel, der er skjult med display: none, skjules i stedet visuelt.

    En overskrift, der springer et niveau over, for eksempel en h4 lige efter en h2, flyttes op til det næste niveau, og de overskrifter, der følger efter den i samme skabelon på dens niveau eller dybere, flyttes op med den. Klasser bevares, så stilregler, som temaet sætter via klasse, stadig gælder; din udvikler kontrollerer stilregler, som temaet sætter via overskriftens tag. Hvor niveauet på overskriften før den hverken kan læses ud af scanningen eller ud af samme skabelon, overlades overskriften til et menneske. Magento udskriver hver sides titel som dens h1. Et tema, der skjuler titlen på en side med display: none, fjerner sidens eneste h1, så opskriften skjuler den i stedet visuelt, på samme måde som Magentos egne stilregler skjuler tekst, og h1-overskriften forbliver i den disposition, som skærmlæsere bruger. En titel, der er fjernet i layout-XML, overlades til et menneske, fordi det ville ændre sidens udseende at bringe den tilbage.

    Regler, den dækker
    • heading-order AUTO kontrolleres via vs-headings-landmarks
    • page-has-heading-one AUTO kontrolleres via vs-headings-landmarks
    • vs-headings-landmarks AUTO
    Filtyper, den ændrer
    .css.html.less
    keeps the hidden home page title as the h1 and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/web/css/source/_theme.less Ændringer i app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 6 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 6 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet display: none;
    1096 Tilføjet position: absolute;
    1097 Tilføjet width: 1px;
    1098 Tilføjet height: 1px;
    1099 Tilføjet overflow: hidden;
    1100 Tilføjet clip: rect(0 0 0 0);
    1101 Tilføjet 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 Ændringer i app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 6 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 6 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    1070 1070 }
    1071 1071
    1072 1072 .cms-index-index .page-title-wrapper {
    1073 Fjernet display: none;
    1073 Tilføjet position: absolute;
    1074 Tilføjet width: 1px;
    1075 Tilføjet height: 1px;
    1076 Tilføjet overflow: hidden;
    1077 Tilføjet clip: rect(0 0 0 0);
    1078 Tilføjet white-space: nowrap;
    1074 1079 }
    1075 1080
    1076 1081 .block-promo .info,
    moves the journal headings from h4 to h3 and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html Ændringer i app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html: 3 tilføjet, 3 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html: 3 tilføjet, 3 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <h4 class="journal-title">Layering for wet autumn days</h4>
    155 Tilføjet <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 Fjernet <h4 class="journal-title">Caring for technical shells</h4>
    160 Tilføjet <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 Fjernet <h4 class="journal-title">Running through the dark season</h4>
    165 Tilføjet <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>

Tastaturbrug og fokus

  • En synlig fokusmarkering focus-visible-styles Én markering af tastaturfokus i temaets brandfarve, justeret til en kontrast på mindst 3:1 mod sidens baggrund.

    Temaets stilark får én markering af tastaturfokus: en ubrudt streg på 2 pixels, 2 pixels fra elementet, i temaets brandfarve. Farven hentes fra en variabel for brand- eller primærfarven, ellers fra den primære knap, ellers fra linkfarven, og den justeres, indtil den har en kontrast på mindst 3:1 mod sidens baggrund. Områder med deres egen baggrund, for eksempel en mørk topbjælke, får en markeringsfarve, der har den kontrast dér. Temaregler, der fjerner markeringen fra links, knapper og andre betjeningselementer ved fokus, tages ud, medmindre de viser fokus på anden måde, for eksempel med en kant eller en skygge.

    Regler, den dækker
    • vs-focus-visible AUTO
    Filtyper, den ændrer
    .css.less
    adds the outline, removes the outline: none rule and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/web/css/source/_theme.less Ændringer i app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 10 tilføjet, 12 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 10 tilføjet, 12 fjernet
    Linje før Linje efter Ændring Kode
    1079 1079 color: #fff;
    1080 1080 }
    1081 1081
    1082 Fjernet // VALIDISCAN-SEEDED vs-focus-visible: the theme removes the focus ring from links and actions.
    1083 Fjernet .navigation a:focus,
    1084 Fjernet .header.links a:focus,
    1085 Fjernet .product-item-link:focus,
    1086 Fjernet .footer a:focus,
    1087 Fjernet .action:focus,
    1088 Fjernet .logo:focus,
    1089 Fjernet .block-promo:focus,
    1090 Fjernet .journal-link:focus {
    1091 Fjernet outline: none;
    1092 Fjernet }
    1093 Fjernet
    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 Tilføjet
    1256 Tilføjet /* validiscan:focus-visible-styles */
    1257 Tilføjet :focus-visible {
    1258 Tilføjet outline: 2px solid #1979c3;
    1259 Tilføjet outline-offset: 2px;
    1260 Tilføjet }
    1261 Tilføjet .panel.wrapper :focus-visible {
    1262 Tilføjet outline-color: #a1d0f3;
    1263 Tilføjet }
    1264 Tilføjet /* /validiscan:focus-visible-styles */

    app/design/frontend/Validiscan/fixture/web/css/styles-m.css Ændringer i app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 10 tilføjet, 11 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 10 tilføjet, 11 fjernet
    Linje før Linje efter Ændring Kode
    1058 1058 color: #fff;
    1059 1059 }
    1060 1060
    1061 Fjernet .navigation a:focus,
    1062 Fjernet .header.links a:focus,
    1063 Fjernet .product-item-link:focus,
    1064 Fjernet .footer a:focus,
    1065 Fjernet .action:focus,
    1066 Fjernet .logo:focus,
    1067 Fjernet .block-promo:focus,
    1068 Fjernet .journal-link:focus {
    1069 Fjernet outline: none;
    1070 Fjernet }
    1071 Fjernet
    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 Tilføjet
    1225 Tilføjet /* validiscan:focus-visible-styles */
    1226 Tilføjet :focus-visible {
    1227 Tilføjet outline: 2px solid #1979c3;
    1228 Tilføjet outline-offset: 2px;
    1229 Tilføjet }
    1230 Tilføjet .panel.wrapper :focus-visible {
    1231 Tilføjet outline-color: #a1d0f3;
    1232 Tilføjet }
    1233 Tilføjet /* /validiscan:focus-visible-styles */
  • En tab-rækkefølge, der følger siden remove-positive-tabindex Når et rapporteret element har et tabindex over 0, fjernes hvert fast positivt tabindex i temaets skabeloner eller sættes til 0.

    Et tabindex over 0 trækker et element forrest i tastaturrækkefølgen. Sådanne værdier virker kun i forhold til hinanden på hele siden, så når et rapporteret element viser sig at have et i temaets skabeloner, fjerner opskriften hvert fast positivt tabindex i temaets skabeloner, også på elementer, som fundet ikke nævnte. Links, knapper og formularfelter mister attributten; andre elementer får tabindex="0", så de stadig kan nås, mens Tab-tasten følger sidens rækkefølge. Et tabindex, som PHP-kode beregner, overlades til et menneske. Validiscans kontrol vs-focus-order rapporterer også fokus, der hopper rundt på siden af andre årsager, for eksempel indhold, som stilreglerne viser et andet sted; den har niveau MANUAL, så dens fund kommer med vejledning, ikke med denne ændring.

    Regler, den dækker
    • tabindex AUTO
    • vs-focus-order MANUAL
    Filtyper, den ændrer
    .phtml
    removes tabindex 1-4 from the login form and the CAPTCHA and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/captcha-math.phtml Ændringer i app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/captcha-math.phtml: 1 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/captcha-math.phtml: 1 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <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 Tilføjet <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 Ændringer i app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/login.phtml: 3 tilføjet, 3 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/login.phtml: 3 tilføjet, 3 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <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 Tilføjet <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 Fjernet <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 Tilføjet <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 Fjernet <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 Tilføjet <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 og klikflader

  • Zoom tilladt på mobilen meta-viewport-zoom Temaets viewport-tag mister user-scalable=no og enhver maximum-scale under 2, så besøgende kan zoome ind på siden på en mobil; en værdi, som PHP-kode beregner, føres på listen til din udvikler.

    Opskriften fjerner user-scalable=no og enhver maximum-scale under 2 fra viewport-tagget i temaets layout-XML, for eksempel default_head_blocks.xml, hvor Luma deklarerer det, eller i dets skabeloner, så besøgende kan zoome ind på siden på en mobil. For reglen for god praksis meta-viewport-large er grænsen 5. De øvrige viewport-indstillinger forbliver, som de var. En viewport-værdi, som PHP-kode beregner, føres på listen, så din udvikler kan kontrollere den. Hvis det tag, der blokerer zoom, ikke kommer fra temaet, for eksempel fra indstillingerne for HTML Head i Magento Admin eller fra et modul, ændrer opskriften intet.

    Regler, den dækker
    • meta-viewport AUTO
    • meta-viewport-large AUTO
    Filtyper, den ændrer
    .xml
    removes the zoom block from default_head_blocks.xml and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/Magento_Theme/layout/default_head_blocks.xml Ændringer i app/design/frontend/Validiscan/fixture/Magento_Theme/layout/default_head_blocks.xml: 1 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Theme/layout/default_head_blocks.xml: 1 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"/>
    6 Tilføjet <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)"/>
  • Større klikflader target-size-padding Knapper og links, som scanningen fandt for små, får en minimumsstørrelse på 24 × 24 pixels via klasser, som temaets stilark kan udpege.

    Knapper og links, som scanningen fandt for små, for eksempel ikoner til sociale medier eller knapper til antal, får en minimumsstørrelse på 24 × 24 pixels i en blok sidst i temaets stilark. Blokken genbruger de selektorer, som temaet gjorde dem små med, eller deres egne klasser, og sætter en minimumsbredde og -⁠højde, som vinder over en mindre bredde eller højde. Ikonerne inde i dem og layoutet omkring dem forbliver, som de er. Et link eller et andet inline-element uden en display-regel bliver til inline-flex, fordi inline-elementer ignorerer en minimumsstørrelse. Et betjeningselement uden en klasse, som stilarket kan udpege, overlades til et menneske.

    Regler, den dækker
    • vs-target-size AUTO
    Filtyper, den ændrer
    .css.less
    sizes the three flagged controls and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/web/css/source/_theme.less Ændringer i app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 9 tilføjet, 0 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 9 tilføjet, 0 fjernet
    Linje før Linje efter Ændring Kode
    1264 1264 height: 18px;
    1265 1265 stroke-width: 3;
    1266 1266 }
    1267 Tilføjet
    1268 Tilføjet /* validiscan:target-size-padding */
    1269 Tilføjet .social-link,
    1270 Tilføjet .actions-secondary .action,
    1271 Tilføjet .qty-step {
    1272 Tilføjet min-width: 24px;
    1273 Tilføjet min-height: 24px;
    1274 Tilføjet }
    1275 Tilføjet /* /validiscan:target-size-padding */

    app/design/frontend/Validiscan/fixture/web/css/styles-m.css Ændringer i app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 9 tilføjet, 0 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 9 tilføjet, 0 fjernet
    Linje før Linje efter Ændring Kode
    1232 1232 height: 18px;
    1233 1233 stroke-width: 3;
    1234 1234 }
    1235 Tilføjet
    1236 Tilføjet /* validiscan:target-size-padding */
    1237 Tilføjet .social-link,
    1238 Tilføjet .actions-secondary .action,
    1239 Tilføjet .qty-step {
    1240 Tilføjet min-width: 24px;
    1241 Tilføjet min-height: 24px;
    1242 Tilføjet }
    1243 Tilføjet /* /validiscan:target-size-padding */

Bevægelse, slideshows og lyd

  • Mindre bevægelse, når en besøgende beder om det reduced-motion-guard Når en besøgendes enhed beder om reduceret bevægelse, slås de animationer, overgange på 5 sekunder eller mere og den bløde scrolling fra, som temaets stilark starter.

    Når en besøgendes enhed er indstillet til at reducere bevægelse, slår en blok sidst i hvert af temaets stilark det fra, som netop det stilark starter: animationer, overgange på 5 sekunder eller mere og blød scrolling, selektor for selektor. Hvor temaets egne scripts i web/js starter en slider med automatisk afspilning slået til, starter slideren uden automatisk afspilning for de besøgende. En regel, der er indlejret i en anden LESS-regel, føres på listen til din udvikler. Animationer fra Magentos egen kode eller fra extensions ligger ikke i temaets filer og har brug for deres egen sikring.

    Regler, den dækker
    • vs-motion AUTO
    Filtyper, den ændrer
    .css.less
    guards the badge and slider animations and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/web/css/source/_theme.less Ændringer i app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 9 tilføjet, 0 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 9 tilføjet, 0 fjernet
    Linje før Linje efter Ændring Kode
    1264 1264 height: 18px;
    1265 1265 stroke-width: 3;
    1266 1266 }
    1267 Tilføjet
    1268 Tilføjet /* validiscan:reduced-motion-guard */
    1269 Tilføjet @media (prefers-reduced-motion: reduce) {
    1270 Tilføjet .product-label,
    1271 Tilføjet .slick-track {
    1272 Tilføjet animation: none;
    1273 Tilføjet }
    1274 Tilføjet }
    1275 Tilføjet /* /validiscan:reduced-motion-guard */

    app/design/frontend/Validiscan/fixture/web/css/styles-m.css Ændringer i app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 9 tilføjet, 0 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 9 tilføjet, 0 fjernet
    Linje før Linje efter Ændring Kode
    1232 1232 height: 18px;
    1233 1233 stroke-width: 3;
    1234 1234 }
    1235 Tilføjet
    1236 Tilføjet /* validiscan:reduced-motion-guard */
    1237 Tilføjet @media (prefers-reduced-motion: reduce) {
    1238 Tilføjet .product-label,
    1239 Tilføjet .slick-track {
    1240 Tilføjet animation: none;
    1241 Tilføjet }
    1242 Tilføjet }
    1243 Tilføjet /* /validiscan:reduced-motion-guard */
  • Slideshows, der kun bevæger sig, når den besøgende beder om det slider-pause-control Ingen pauseknap på Magento: Automatisk afspilning slås fra på Page Builder-sliderne i temaets filer, så de kun skifter, når den besøgende bruger prikkerne eller pilene.

    På Magento tilføjer denne opskrift ingen pauseknap. Page Builder-slideren kører på Magentos egne scripts, og et tema kan ikke give den en pauseknap uden at overstyre Magentos kode. Opskriften bruger i stedet sliderens egen indstilling: På hver Page Builder-slider med automatisk afspilning i temaets filer slås den automatiske afspilning fra, som kontakten »Autoplay« i Page Builder gør, og pile slås til, hvor slideren ellers ikke ville have nogen måde at skifte mellem slides på. Endeløse CSS-animationer, der bevæger en slider af sig selv, fjernes. Så skifter slides kun, når den besøgende bruger prikkerne eller pilene: Intet bevæger sig af sig selv, så der er intet at sætte på pause. En slider, der er gemt i Magento-databasen, er ikke en fil i temaet: Du slår dens automatiske afspilning fra med indstillingen »Autoplay« i Page Builder. En slider, som temaets egne scripts starter med automatisk afspilning, for eksempel en Slick- eller Swiper-slider, har brug for en pauseknap, der er koblet ind i det script, og det overlades til et menneske.

    Regler, den dækker
    • vs-carousel AUTO
    Filtyper, den ændrer
    .css.html.less
    turns off the Page Builder autoplay and the track animation, and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html Ændringer i app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html: 1 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html: 1 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    3 3 class="pagebuilder-slider slick-slider"
    4 4 data-content-type="slider"
    5 5 data-appearance="default"
    6 Fjernet data-autoplay="true"
    6 Tilføjet 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 Ændringer i app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 0 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 0 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    1176 1176 .slick-track {
    1177 1177 display: flex;
    1178 1178 width: 300%;
    1179 Fjernet 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 Ændringer i app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 0 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 0 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    1147 1147 .slick-track {
    1148 1148 display: flex;
    1149 1149 width: 300%;
    1150 Fjernet animation: nw-slider-autoplay 9s ease-in-out infinite;
    1151 1150 }
    1152 1151 .slick-slide {
    1153 1152 flex: 0 0 33.3333%;
  • Ingen lyd, der starter af sig selv mute-autoplay En video i temaets skabeloner, der afspilles af sig selv, gøres lydløs, og lyd starter ikke længere af sig selv, medmindre PHP-kode slår den automatiske afspilning til; på Magento bruges opskriften ikke til fund fra vs-media.

    En video i temaets skabeloner, der afspilles af sig selv, får muted og playsinline, så den fortsætter med at spille lydløst og inde på siden på mobilen. Lyd starter ikke længere af sig selv. Indlejrede YouTube- og Vimeo-afspillere, der starter af sig selv, indstilles til at starte uden lyd. Automatisk afspilning, som PHP-kode slår til, overlades til et menneske. I en Validiscan-scanning rapporteres lyd, der starter af sig selv, af Validiscans mediekontrol vs-media, som erstatter den axe-core-regel, denne opskrift dækker. vs-media, som også dækker undertekster og transskriptioner, har niveau MANUAL, så et sådant fund på Magento kommer med vejledning i stedet for denne ændring.

    Regler, den dækker
    • no-autoplay-audio AUTO kontrolleres via vs-media
    Filtyper, den ændrer
    .phtml
    mutes the autoplaying product video and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/view/details.phtml Ændringer i app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/view/details.phtml: 1 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/view/details.phtml: 1 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <video class="product-video-player" autoplay loop controls preload="none" width="560" height="315" poster="<?= $escaper->escapeUrl($product->getData('care_video_poster')) ?>">
    47 Tilføjet <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>

Formularer, kurven og indlejret indhold

  • Etiketter knyttet til deres felter label-association Etikettekst, der allerede står på siden før et felt, bliver knyttet til det som et <label> eller via aria-labelledby.

    Et formularfelt, hvis etikettekst allerede står på siden før feltet, bliver knyttet til den tekst. Et <label> uden for får en for-attribut, der peger på feltet. En etikettekst i en <span> eller <strong>, for eksempel en »Sort By«-tekst med Lumas klasse sorter-label ved siden af sorteringsmenuen på en kategoriside, bliver til et <label> med de samme klasser. En etikettekst i et blokelement, for eksempel <div class="label">, beholder sit tag og knyttes via aria-labelledby. Teksten skal stå i en container uden andre felter, så den ikke kan høre til et andet felt. Skærmlæsere læser så etiketten op, når feltet får fokus. Et felt, der kun har en pladsholdertekst, overlades til et menneske, fordi det er en beslutning om indhold at skrive en etiket.

    Regler, den dækker
    • label AUTO kontrolleres via vs-forms-ecommerce
    • select-name ASSISTED
    • vs-forms-ecommerce AUTO
    Filtyper, den ændrer
    .phtml
    turns the "Sort By" text into the sorter label and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/list/toolbar.phtml Ændringer i app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/list/toolbar.phtml: 1 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/list/toolbar.phtml: 1 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <span class="sorter-label"><?= $escaper->escapeHtml(__('Sort By')) ?></span>
    15 Tilføjet <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>
  • Konto-, adresse- og kontaktfelter, som browsere kan udfylde autocomplete-tokens Felter i temaets skabeloner, der spørger efter kundens egne oplysninger, i formularer til adresse, konto, login, kontakt og nyhedsbrev, får den autocomplete-værdi, der svarer til det, de spørger efter, medmindre skabelonkode skriver den.

    Felter i temaets skabeloner, der spørger efter kundens egne oplysninger, i formularer til adresse, konto, login, kontakt og nyhedsbrev, får den autocomplete-værdi, der svarer til det, de spørger efter, for eksempel e-mail, navn, telefonnummer, vejadresse, postnummer eller adgangskode. Værdien udledes af feltets type, navn, id, etiket, pladsholdertekst og titel efter de samme regler som Validiscans formularkontrol, og felter til fakturering og levering får deres sektion, som i shipping given-name. Når ét felt i en formular er rapporteret, behandles hvert felt i den formular. Adgangskoder får new-password i registrerings- og nulstillingsformularer og i formularer med mere end ét adgangskodefelt, og current-password ellers. Felter til rabatkode, søgning, gavemodtager, kommentar, antal og CAPTCHA får aldrig en værdi. En værdi, som skabelonkode skriver, eller en gyldig værdi, der ser forkert ud for feltet, overlades til et menneske.

    Regler, den dækker
    • autocomplete-valid AUTO kontrolleres via vs-forms-ecommerce
    • vs-forms-ecommerce AUTO
    Filtyper, den ændrer
    .phtml
    adds tokens to the newsletter, login and contact forms and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/Magento_Contact/templates/form.phtml Ændringer i app/design/frontend/Validiscan/fixture/Magento_Contact/templates/form.phtml: 3 tilføjet, 3 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Contact/templates/form.phtml: 3 tilføjet, 3 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <div class="control"><input name="name" id="name" title="<?= $escaper->escapeHtmlAttr(__('Name')) ?>" value="<?= $escaper->escapeHtmlAttr($viewModel->getUserName()) ?>" class="input-text" type="text"></div>
    24 Tilføjet <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 Fjernet <div class="control"><input name="email" id="email" title="<?= $escaper->escapeHtmlAttr(__('Email')) ?>" value="<?= $escaper->escapeHtmlAttr($viewModel->getUserEmail()) ?>" class="input-text" type="email"></div>
    28 Tilføjet <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 Fjernet <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 Tilføjet <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 Ændringer i app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/login.phtml: 2 tilføjet, 2 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Customer/templates/form/login.phtml: 2 tilføjet, 2 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <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 Tilføjet <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 Fjernet <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 Tilføjet <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 Ændringer i app/design/frontend/Validiscan/fixture/Magento_Newsletter/templates/subscribe.phtml: 1 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Newsletter/templates/subscribe.phtml: 1 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <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 Tilføjet <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">
  • Ændringer i pris, lagerstatus og kurv bliver oplæst live-region-cart-variant De containere i temaets skabeloner, som Magentos scripts omskriver, for eksempel prisboksen og minikurvens tæller, bliver live-områder; selve scriptene ændres ikke.

    Magentos egne scripts omskriver teksten i faste containere, når en kunde vælger en størrelse eller farve eller lægger et produkt i kurven. Opskriften gør de containere i temaets skabeloner til live-områder, så skærmlæsere læser den nye værdi op, uden at kunden behøver at gå derhen. Prisboksen og minikurvens tæller læses op i deres helhed, når de ændres; lagerbeskeden og sidebeskederne, for eksempel meddelelsen om, at et produkt er lagt i kurven, får role="status". Selve scriptene ændres ikke. Hvor temaet markerer hele siden som et live-område, hvilket får skærmlæsere til at læse hver ændring op, fjernes den markering. Hvor en extensions script tilføjer markeringen, mens siden kører, overlades den til et menneske.

    Regler, den dækker
    • vs-live-updates AUTO
    Filtyper, den ændrer
    .phtml
    makes the price box and the stock message live regions and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/price/final_price.phtml Ændringer i app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/price/final_price.phtml: 1 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/price/final_price.phtml: 1 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <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 Tilføjet <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 Ændringer i app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/view/type/default.phtml: 1 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Catalog/templates/product/view/type/default.phtml: 1 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    11 11 ?>
    12 12 <div class="product-info-stock-sku">
    13 13 <?php if ($block->displayProductStockStatus()): ?>
    14 Fjernet <div class="stock available" title="<?= $escaper->escapeHtmlAttr(__('Availability')) ?>"><span><?= $escaper->escapeHtml(__('In stock')) ?></span></div>
    14 Tilføjet <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>
  • Titler til indlejrede kort og videoer iframe-title En indlejret ramme uden titel får en oversættelig titel, der siger, hvad den viser, hvor koden afslører det.

    En indlejret ramme uden titel, for eksempel et kort, en YouTube- eller Vimeo-video, en kalender, en formular eller en widget med anmeldelser, får en oversættelig titel, der siger, hvad den viser. Opskriften læser, hvad rammen viser, ud fra dens adresse, herunder de faste dele af en adresse, som PHP-kode bygger, og ud fra dens klasser, id og navn. En ramme, hvis indhold koden ikke afslører, får ingen titel af opskriften og overlades til et menneske.

    Regler, den dækker
    • frame-title AUTO
    Filtyper, den ændrer
    .phtml
    titles the store map on the contact page and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/Magento_Contact/templates/form.phtml Ændringer i app/design/frontend/Validiscan/fixture/Magento_Contact/templates/form.phtml: 1 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Contact/templates/form.phtml: 1 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <iframe src="<?= $escaper->escapeUrl($block->getBaseUrl() . 'media/wysiwyg/store-map.html') ?>" width="480" height="260" loading="lazy"></iframe>
    51 Tilføjet <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>

Kontrast, billeder og betjeningselementer, der kræver en vurdering

Tekstkontrast, tekstalternativer til billeder og navne til betjeningselementer uden navn kræver som regel en vurdering: hvilken farve der passer til dit brand, hvilke ord der beskriver et billede. De regler, der rapporterer dem, har niveau ASSISTED, som listerne herunder viser. For et fund på en ASSISTED-regel udarbejder AI kun et udkast til en ændring, hvis du har sagt ja til AI-udkast, og Validiscan gennemgår hver ændring, før den leveres.

De fire opskrifter herunder er ikke standardrettelsen for nogen regel. Hver af dem dækker kun de snævre tilfælde, hvor temaets kode alene beviser, hvad ændringen skal være. I et projekt anvendes button-semantics på fund fra slideshow-kontrollen vs-carousel, som har niveau AUTO: Rettelsesmotoren prøver den, når slider-opskriften ovenfor ikke retter et sådant fund. På Magento dækker de tre andre kun ASSISTED-regler: Et fund på disse regler følger ASSISTED-forløbet, og disse tre opskrifter anvendes ikke på det.

  • Tekstfarver med tilstrækkelig kontrast contrast-tokens En tekstfarve, der ikke består kontrastkontrollen og er defineret ét sted, ændres til den nærmeste farve i samme farvetone, der består mod hver målt baggrund; anvendes ikke i et projekt.

    Når en tekst ikke består kontrastkontrollen, og dens farve er defineret ét sted i temaet, ændres det sted til den nærmeste farve i samme farvetone, som opnår den krævede kontrast mod hver baggrund, scanningen målte for den. Ét sted kan være en LESS-variabel eller en CSS-variabel, der kun bruges til tekstfarve, eller en enkelt color-regel. Hvor temaet leveres med en kompileret styles-m.css, får den den samme ændring. En farve, der bruges flere steder, også som baggrund eller kant, eller i regler, hvis baggrund scanningen ikke målte, overlades til et menneske.

    Regler, den dækker
    • color-contrast ASSISTED
    Filtyper, den ændrer
    .css.less
    darkens the single #929292 token and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/web/css/source/_theme.less Ændringer i app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 1 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 1 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    1099 1099 // VALIDISCAN-SEEDED color-contrast: #929292 on white is 3.1:1.
    1100 1100 .block-promo .info,
    1101 1101 .toolbar-amount {
    1102 Fjernet color: #929292;
    1102 Tilføjet 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 Ændringer i app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 1 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 1 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    1075 1075
    1076 1076 .block-promo .info,
    1077 1077 .toolbar-amount {
    1078 Fjernet color: #929292;
    1078 Tilføjet color: #767676;
    1079 1079 }
    1080 1080
    1081 1081 .block-promo-wrapper {
  • Dekorative billeder skjult for skærmlæsere decorative-image-alt Kun billeder, som skabelonen beviser er dekorative, får et tomt alt eller aria-hidden; anvendes ikke i et projekt.

    Et billede markeres kun som dekorativt, når skabelonen beviser, at det ikke tilføjer noget: Det sidder i et link eller en knap, der allerede har tekst eller et navn, for eksempel et kampagnefelt med sin egen overskrift; det er et ikon på højst 48 pixels eller med en ikonklasse eller et ikonfilnavn ved siden af sin egen tekstetiket; eller det er en afstandsholder eller en skillelinje. Et <img> får så et tomt alt, og et SVG-ikon får aria-hidden="true", så skærmlæsere springer det over i stedet for at læse et filnavn op. Ethvert andet billede behandles som indhold, og dets tekstalternativ kræver ord, som et menneske vælger.

    Regler, den dækker
    • image-alt ASSISTED
    • role-img-alt ASSISTED
    • svg-img-alt ASSISTED
    Filtyper, den ændrer
    .html
    marks the promo tile image decorative and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html Ændringer i app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html: 1 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Cms/content/home.html: 1 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <img src="/magento/media/wysiwyg/home/home-main.svg" width="400" height="240" />
    114 Tilføjet <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"
  • Betjeningselementer, der kun virker med mus, bliver til knapper button-semantics Klikbare <div>- og <span>-elementer i slidere og cookiebannere bliver til rigtige knapper, hvor koden viser, at de er betjeningselementer; i et projekt anvendes opskriften på fund fra vs-carousel.

    Klikbare <div>- og <span>-elementer i slidere og cookiebannere bliver til rigtige knapper. Opskriften regner kun et element for et betjeningselement, når koden siger det: Det har role="button", en klikhåndtering, en Knockout-klikbinding eller en klasse eller data-attribut, som temaets script udpeger til at håndtere klik. Klasser, data-attributter og ARIA-attributter bevares, så temaets stilark og scripts finder betjeningselementet som før, og Enter og mellemrumstasten gør nu det samme som et klik. En lille nulstilling af stilen sidst i temaets stilark bevarer dets udseende, også ved hover og fokus, og fokusmarkeringer røres ikke. Et betjeningselement, der rummer blokke, links eller felter, eller som ikke har nogen klasse, overlades til et menneske.

    Regler, den dækker
    • vs-carousel AUTO
    • vs-cookie-banner ASSISTED
    Filtyper, den ændrer
    .css.less.phtml
    turns span controls of the cookie bar into buttons and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/Magento_Cookie/templates/html/notices.phtml Ændringer i app/design/frontend/Validiscan/fixture/Magento_Cookie/templates/html/notices.phtml: 2 tilføjet, 2 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Cookie/templates/html/notices.phtml: 2 tilføjet, 2 fjernet
    Linje før Linje efter Ændring Kode
    24 24 <div class="amgdprcookie-bar-block">
    25 25 <p class="amgdprcookie-policy"><?= $escaper->escapeHtml(__('We use cookies to give you the best shopping experience and to analyse our traffic. By continuing to browse you agree to our')) ?> <a href="<?= $escaper->escapeUrl($block->getPrivacyPolicyLink()) ?>" class="amgdprcookie-link"><?= $escaper->escapeHtml(__('cookie policy')) ?></a>.</p>
    26 26 <div class="amgdprcookie-buttons-block">
    27 Fjernet <span class="amgdprcookie-button -allow" data-amcookie-js="allow" role="button" tabindex="0"><svg class="icon" viewBox="0 0 24 24"><path d="M4 12l5 5L20 6"/></svg></span>
    28 Fjernet <span class="amgdprcookie-button -decline" data-amcookie-js="decline" role="button" tabindex="0"><svg class="icon" viewBox="0 0 24 24"><path d="M6 6l12 12M18 6L6 18"/></svg></span>
    27 Tilføjet <button class="amgdprcookie-button -allow" data-amcookie-js="allow" type="button"><svg class="icon" viewBox="0 0 24 24"><path d="M4 12l5 5L20 6"/></svg></button>
    28 Tilføjet <button class="amgdprcookie-button -decline" data-amcookie-js="decline" type="button"><svg class="icon" viewBox="0 0 24 24"><path d="M6 6l12 12M18 6L6 18"/></svg></button>
    29 29 </div>
    30 30 </div>
    31 31 </div>

    app/design/frontend/Validiscan/fixture/web/css/source/_theme.less Ændringer i app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 30 tilføjet, 0 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/web/css/source/_theme.less: 30 tilføjet, 0 fjernet
    Linje før Linje efter Ændring Kode
    1264 1264 height: 18px;
    1265 1265 stroke-width: 3;
    1266 1266 }
    1267 Tilføjet
    1268 Tilføjet /* validiscan:button-semantics */
    1269 Tilføjet button.amgdprcookie-button.-allow,
    1270 Tilføjet button.amgdprcookie-button.-decline {
    1271 Tilføjet -webkit-appearance: none;
    1272 Tilføjet appearance: none;
    1273 Tilføjet margin: 0;
    1274 Tilføjet padding: 0;
    1275 Tilføjet box-shadow: none;
    1276 Tilføjet font: inherit;
    1277 Tilføjet letter-spacing: inherit;
    1278 Tilføjet text-align: inherit;
    1279 Tilføjet text-transform: inherit;
    1280 Tilføjet text-shadow: none;
    1281 Tilføjet }
    1282 Tilføjet button.amgdprcookie-button.-allow:hover,
    1283 Tilføjet button.amgdprcookie-button.-allow:focus,
    1284 Tilføjet button.amgdprcookie-button.-allow:active {
    1285 Tilføjet background: @nw-primary;
    1286 Tilføjet border: 0;
    1287 Tilføjet color: #fff;
    1288 Tilføjet }
    1289 Tilføjet button.amgdprcookie-button.-decline:hover,
    1290 Tilføjet button.amgdprcookie-button.-decline:focus,
    1291 Tilføjet button.amgdprcookie-button.-decline:active {
    1292 Tilføjet background: #fff;
    1293 Tilføjet border: 1px solid @nw-border;
    1294 Tilføjet color: @nw-text;
    1295 Tilføjet }
    1296 Tilføjet /* /validiscan:button-semantics */

    app/design/frontend/Validiscan/fixture/web/css/styles-m.css Ændringer i app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 30 tilføjet, 0 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/web/css/styles-m.css: 30 tilføjet, 0 fjernet
    Linje før Linje efter Ændring Kode
    1232 1232 height: 18px;
    1233 1233 stroke-width: 3;
    1234 1234 }
    1235 Tilføjet
    1236 Tilføjet /* validiscan:button-semantics */
    1237 Tilføjet button.amgdprcookie-button.-allow,
    1238 Tilføjet button.amgdprcookie-button.-decline {
    1239 Tilføjet -webkit-appearance: none;
    1240 Tilføjet appearance: none;
    1241 Tilføjet margin: 0;
    1242 Tilføjet padding: 0;
    1243 Tilføjet box-shadow: none;
    1244 Tilføjet font: inherit;
    1245 Tilføjet letter-spacing: inherit;
    1246 Tilføjet text-align: inherit;
    1247 Tilføjet text-transform: inherit;
    1248 Tilføjet text-shadow: none;
    1249 Tilføjet }
    1250 Tilføjet button.amgdprcookie-button.-allow:hover,
    1251 Tilføjet button.amgdprcookie-button.-allow:focus,
    1252 Tilføjet button.amgdprcookie-button.-allow:active {
    1253 Tilføjet background: #1979c3;
    1254 Tilføjet border: 0;
    1255 Tilføjet color: #fff;
    1256 Tilføjet }
    1257 Tilføjet button.amgdprcookie-button.-decline:hover,
    1258 Tilføjet button.amgdprcookie-button.-decline:focus,
    1259 Tilføjet button.amgdprcookie-button.-decline:active {
    1260 Tilføjet background: #fff;
    1261 Tilføjet border: 1px solid #c2c2c2;
    1262 Tilføjet color: #333;
    1263 Tilføjet }
    1264 Tilføjet /* /validiscan:button-semantics */
  • Navne til knapper og links, der kun består af et ikon icon-accessible-name Knapper og links, der kun viser et ikon, og hvis formål koden afslører, får en aria-label med ordlyden fra Magentos Luma-tema, hvor Luma har en; anvendes ikke i et projekt.

    Knapper og links, der kun viser et ikon, for eksempel søgning, minikurv, konto, ønskeliste, sammenligning, menu, luk, forrige og næste samt valgene i et cookiebanner, får en aria-label, der siger, hvad de gør, med ordlyden fra Magentos Luma-tema, hvor Luma har en, for eksempel »Search«, »My Cart« eller »Allow Cookies«. Formålet udledes af betjeningselementets klasser, id, data-attributter og linkmål, af dets ikon og af den formular eller det cookiebanner, der omgiver det. Et betjeningselement, hvis formål koden ikke afslører, for eksempel et link til et socialt medie, der bygges i en løkke ud fra en adresse gemt som data, eller et link, hvis eneste indhold er et produktfoto, overlades til et menneske, fordi dets navn afhænger af dit indhold.

    Regler, den dækker
    • button-name ASSISTED
    • link-name ASSISTED
    • vs-cookie-banner ASSISTED
    Filtyper, den ændrer
    .phtml
    names the icon-only search button and validates Eksempeldata

    app/design/frontend/Validiscan/fixture/Magento_Search/templates/form.mini.phtml Ændringer i app/design/frontend/Validiscan/fixture/Magento_Search/templates/form.mini.phtml: 1 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Search/templates/form.mini.phtml: 1 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <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 Tilføjet <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 Eksempeldata

    app/design/frontend/Validiscan/fixture/Magento_Checkout/templates/cart/minicart.phtml Ændringer i app/design/frontend/Validiscan/fixture/Magento_Checkout/templates/cart/minicart.phtml: 1 tilføjet, 1 fjernet

    Ændringer i app/design/frontend/Validiscan/fixture/Magento_Checkout/templates/cart/minicart.phtml: 1 tilføjet, 1 fjernet
    Linje før Linje efter Ændring Kode
    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 Fjernet <a class="action showcart" href="<?= $escaper->escapeUrl($block->getShoppingCartUrl()) ?>" data-bind="scope: 'minicart_content'" aria-haspopup="true" aria-expanded="closed">
    16 Tilføjet <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>
Detaljer: niveauerne, testtemaet, kontrollen af hver ændring og tekst på din webshops sprog

En opskrift er en deterministisk ændring for én slags fejl: Den samme kode får altid den samme ændring. Validiscan har 20 opskrifter til Magento-temaer. Hver af dem foretager kun en ændring, hvor temaets kode viser, hvad den rigtige ændring er. Hvor den ikke gør det, ændrer opskriften intet. Den gætter ikke.

Under hver opskrift finder du de regler, den dækker, med hver regels niveau i Validiscans regelkatalog for Magento. AUTO betyder, at en opskrift er reglens standardrettelse. ASSISTED betyder, at reglens fund som regel kræver en vurdering. MANUAL betyder, at reglen kræver en persons beslutning og kommer med vejledning. I et projekt anvendes opskrifter på fund af regler på niveau AUTO. Hvor en opskrift også angiver en regel på niveau ASSISTED eller MANUAL, følger et fund af den regel i stedet ASSISTED- eller MANUAL-forløbet. En regel, der kontrolleres via en anden kontrol, køres ikke selvstændigt i en scanning; den anden kontrol rapporterer den samme fejl.

Filtyperne og før-og-efter-visningen for hver opskrift stammer fra Validiscans egne tests. De kører på Validiscans Magento-testtema, et child-tema af Magentos Luma-tema, hvor der med vilje er lagt tilgængelighedsfejl ind. Magento kan ikke gengives i testmiljøet, så ingen test gengiver en side: Hver test sammenligner ændringen med en gemt diff og kontrollerer den ændrede kildekode, for eksempel at den svarer til testtemaets rettede version. Dit temas filer ser anderledes ud.

Før Validiscan gennemgår en ændring, kontrolleres de ændrede filer. Hver sti skal ligge inde i temaet, som beskrevet ovenfor. .phtml-skabeloner får PHP’s egen syntakskontrol, som læser filen uden at køre den. Layout-XML kontrolleres som XML, stilark får en strukturkontrol, og HTML-skabeloner og JavaScript læses af en parser.

Når en opskrift tilføjer ord, for eksempel teksten i et spring over-link eller navnet på et navigationsområde, skriver den dem på engelsk, med ordlyden fra Magentos Luma-tema, hvor Luma har en, for eksempel »Skip to Content«. Hvor dit tema har en tysk oversættelsesfil i sin mappe i18n, tilføjer opskriften den tyske tekst dér, medmindre strengen allerede er oversat. Tekst på webshoppens andre sprog tilføjes ikke.

Hvad forbliver på niveau MANUAL på Magento?

Fejl, der kræver en beslutning om dit indhold eller om, hvordan en del af siden opfører sig, som en opskrift ikke træffer, for eksempel undertekster og transskriptioner til dine videoer og din lyd, forbliver på niveau MANUAL på Magento. For et fund på en MANUAL-regel giver Validiscan vejledning, ikke en kodeændring.

Reglerne herunder køres i scanninger og har niveau MANUAL på Magento; regler for god praksis er ikke med på listen.

  • meta-refresh Forsinket genindlæsning under 20 timer må ikke bruges
  • nested-interactive Interaktive betjeningselementer må ikke være indlejret i hinanden
  • scrollable-region-focusable Scrollbare områder skal kunne nås med tastaturet
  • server-side-image-map Serverside-billedkort må ikke bruges
  • vs-keyboard-trap Tastaturfokus må aldrig sidde fast
  • vs-focus-order Fokusrækkefølgen skal følge den visuelle rækkefølge
  • vs-dragging Elementer, der kun kan betjenes ved at trække, skal have et alternativ med et enkelt klik eller tryk
  • vs-media Video skal have undertekster, lyd skal have en transskription, og intet må afspille lyd automatisk
  • vs-documents Linkede dokumenter skal gennemgås manuelt for tilgængelighed
Detaljer: hvad et fund på niveau MANUAL får, reglen om tab-rækkefølgen, og hvad et projekt ikke omfatter

For et fund på en MANUAL-regel giver Validiscan vejledning i, hvordan det rettes, ikke en ændring af din kode. Disse fejl kræver en beslutning om dit indhold eller om, hvordan en del af siden opfører sig, som en opskrift ikke træffer: undertekster og transskriptioner til dine videoer og din lyd, en vej ud af en widget, hvor tastaturfokus sidder fast, en anden måde at bruge et betjeningselement på, som kun virker ved at trække, en fokusrækkefølge, der svarer til layoutet, en side, der genindlæser sig selv efter en forsinkelse, eller tilgængeligheden af linkede PDF-filer og andre dokumenter. En tvunget tab-rækkefølge via et tabindex over 0 rapporteres også af axe-core-reglen tabindex, som opskriften om tab-rækkefølgen ovenfor retter.

Arbejdet med fund på niveau MANUAL, der kræver dine egne beslutninger om indhold, er ikke en del af et projekt, og det samme gælder PDF-filer. Hvad automatiseret test af webtilgængelighed kan og ikke kan bevise

Hvad stiller du til rådighed?

Du sørger for skriftlig tilladelse til en fuld scanning, én vej ind i dit tema, dit svar om AI-udkast til ASSISTED-rettelser, en udvikler, der gennemgår ændringerne, kompilerer stilarkene og ruller temaet ud, ændringer i Magento Admin, oversættelser af tilføjet tekst til webshoppens andre sprog og dine beslutninger om det, der forbliver MANUAL.

  1. Skriftlig tilladelse til en fuld scanning af din webshop. En fuld scanning lægger et produkt i kurven og åbner det første trin i kassen uden at gennemføre et køb eller indtaste betalingsoplysninger.
  2. Én vej ind i dit tema: adgang til det GitHub-repository, der rummer det, eller en ZIP-fil med temamappen under app/design/frontend, uploadet i kundeportalen.
  3. Dit svar på, om AI må udarbejde rettelser på niveau ASSISTED. AI-udkast er slået fra, indtil du siger ja.
  4. En udvikler, der gennemgår ændringerne, merger pull requesten eller anvender patchpakken, kompilerer stilarkene og ruller temaet ud.
  5. De ændringer i Magento Admin, som rettelserne ikke foretager: store view eller sprogmarkering for indhold, der er skrevet på et andet sprog end webshoppens, sidetitler og indstillinger for HTML Head samt automatisk afspilning slået fra på Page Builder-slidere, der er gemt i databasen.
  6. Oversættelser af den tekst, som rettelserne tilføjer, til webshoppens andre sprog. Opskrifterne skriver engelsk og tilføjer kun tysk, hvor dit tema allerede har en tysk oversættelsesfil.
  7. Dine beslutninger om det, der forbliver MANUAL, for eksempel undertekster til dine videoer.
Detaljer: når ændringerne er live, og hvad et projekt dækker

Når ændringerne er live, kontrollerer en verifikationsscanning de berørte sider igen, og Remediation Evidence Package registrerer resultatet. Sådan forløber et projekt, trin for trin

Et projekt dækker én webshop: ét domæne og ét tema. En headless storefront, hvor siderne bygges af en separat frontend-applikation i stedet for et tema, fås på forespørgsel.

Kilder

Én kilde, kontrolleret til denne side den 6. oktober 2026.

Adobe Commerces udvikler­dokumentation 1
  1. CSS and LESS preprocessing · Adobe · kontrolleret

Begynd med et gratis tjek af din webshop.

Send din webshops adresse. Validiscan scanner den og svarer med hver fejl, scanningen kan påvise, med siden og koden.

Bestil et gratis tjek

Eller skriv til info@validiscan.com.

Hvad det gratis tjek omfatter, og hvad det udelader
Du sender
din webshops adresse
Sider, der scannes
op til 15
Du får
hver fejl, scanningen kan påvise, med siden og koden
På din webshop
kun offentlige sider; intet login, intet købt, ingen formularer sendt
Hvad det ikke er
et fuldt audit

Skriv til Validiscan

Til et gratis tjek skal du skrive din webshops adresse og platform.

Validiscan bruger det, du sender, til at svare dig. Privatlivspolitik