Trykknap
et element, man trykker på for at få noget til at ske
Hvad det er
En trykknap, i daglig tale bare en knap, er den del af en brugerflade, der
handler, når den aktiveres: den sender en besked, gemmer en kladde, åbner en
dialog eller slår lyden fra i et opkald. På nettet er knappen som regel
HTML-elementet <button>, og set med tilgængelighedens øjne er det alt, der
bærer rollen button.
WAI-ARIA 1.2 definerer rollen som »an input that allows for user-triggered
actions when clicked or pressed«, altså et input, som brugeren udløser
handlinger med ved klik eller tryk, og tilføjer, at knapper mest bruges til
afgrænsede handlinger. En almindelig kommandoknap har ingen tilstand. En
skifteknap, markeret med aria-pressed, forbliver slået til eller fra, indtil
den trykkes igen, og en menuknap, markeret med aria-haspopup, åbner en liste
med flere valg.
Den vigtigste grænse går mellem en knap og et link. Et link fører læseren et andet sted hen; en knap ændrer noget dér, hvor læseren allerede er. ARIA Authoring Practices Guide kalder de to funktioner tydeligt forskellige og foretrækker, når et link er tegnet som en knap eller omvendt, at det visuelle design bliver tilpasset funktionen frem for at låne det andet elements rolle.
HTML Living Standard beskriver <button>-elementet som en knap, der får sin
etiket fra sit indhold. Dets type-attribut har tre nøgleord. submit sender
den formular, knappen hører til, reset sætter formularens felter tilbage til
deres startværdier, og button gør intet af sig selv og overlader handlingen
til et script. Mangler type, eller er værdien stavet forkert, er knappen i
tilstanden Auto, og en knap i den tilstand inde i en formular, uden en
tilknyttet kommando, er en submitknap. Der må ikke ligge interaktivt indhold
inde i den: intet link, intet felt og ingen knap nummer to.
Standarden lader også en knap virke på et andet element uden script:
commandfor angiver målet ved dets ID, og command siger, hvad der skal ske
med det, for eksempel at vise en popover eller åbne en dialog som modal. Hvor
meget af det en given browser understøtter, er et spørgsmål for den browsers
egne udgivelsesnoter.
Hvorfor det betyder noget
En knap er stedet, hvor læsning bliver til handling: at købe, sende, gemme og slette går altid gennem en. En knap, som nogle mennesker ikke kan finde, nå eller forstå, lukker dem ude fra den del af produktet, der betaler for resten.
Det rigtige element kommer med adfærden indbygget. En <button> kan få
tastaturfokus, udfører sin handling på mellemrumstasten og på Enter, fortæller
hjælpeteknologien, at den er en knap, og hvad den hedder, og holder op med at
reagere, når den har disabled. Understanding-dokumentet til succeskriterium
4.1.2 i WCAG 2.2, Name, Role, Value, bemærker, at almindelige HTML-kontroller
allerede opfylder kriteriet, når de bruges efter specifikationen. En <div>
med en klikhandler har intet af det, og hver brik, der mangler, lukker nogen
ude.
Navnet er et løfte. En skærmlæser annoncerer en knap ved dens tilgængelige
navn og dens rolle, så navnet skal sige, hvad knappen gør, ikke hvordan den ser
ud. APG tilføjer en regel for skifteknapper, som er let at bryde: etiketten
forbliver den samme, mens tilstanden skifter. Vejledningens eksempel er en knap
med navnet »Mute«, der annonceres som »Mute toggle button pressed«, når den er
slået til. Foretrækker et design en etiket, der skifter mellem »Mute« og
»Unmute«, er aria-pressed overflødig, fordi etiketten selv melder tilstanden.
Størrelse er et krav, ikke en smagssag. Succeskriterium 2.5.8 i WCAG 2.2, Target Size (Minimum), på niveau AA, kræver, at et mål for en pegeenhed er mindst 24 gange 24 CSS-pixel. Undtagelserne dækker små mål med plads nok omkring sig, en kontrol i fuld størrelse et andet sted på siden, der gør det samme, links inde i en sætning, kontroller, hvis størrelse browseren bestemmer, og tilfælde, hvor størrelsen er afgørende. En rystende hånd, en bus i bevægelse og en tommelfinger på en telefon gør alle små mål sværere at ramme.
Fokus skal lande et fornuftigt sted. Efter et tryk forventer APG, at fokus flytter ind i en dialog, som knappen har åbnet, og typisk vender tilbage til knappen, når dialogen lukkes. Efterlader trykket læseren i samme sammenhæng, som en Anvend-knap gør, bliver fokus typisk på knappen. En tastaturbruger, hvis fokus springer til toppen af siden, hver gang noget gemmes, begynder forfra hver gang.
Sådan ser det ud i praksis
Det tydeligste eksempel begynder med én annoncering. I en SwiftUI-applikation bygget af systemsymboler læste skærmlæseren send-knappen op som »pil op cirkel, knap«, fordi et symbol uden etiket bliver annonceret med sit interne navn. Da alle sytten ikonknapper blev navngivet for skærmlæsere, fik hver af dem en etiket, der angiver handlingen og ikke formen, og hvor en kontrols betydning afhænger af tilstanden, følger etiketten tilstanden. Den mere varige del er tjekket: en linter, der finder den konstruktion, som skaber en kontrol med kun et ikon, og kræver en tilgængelighedsetiket højst otte linjer derfra. Otte linjer blev valgt ved måling og er bevidst groft: reglen beviser, at en etiket findes i nærheden, ikke at den er korrekt, og nogen skal stadig lytte efter.
Den anden lektie handler om, hvad en knap ikke kan. I betalings- og rettighedslaget, bygget på Stripe og på Apples og Googles in-app-køb, afgør et separat access-skema på 11 tabeller, om en konto må bruge virksomhedskataloget, søgningen og dataeksporten. Svaret bliver kontrolleret igen på serveren ved hver forespørgsel, og siden giver grunden på én linje: en skjult knap er en høflighed og ikke en kontrol.
Knapper betyder også noget for læsere, der ikke er mennesker. Sitets side om at være klar til AI-agenter bemærker, at mange agenter, der betjener en browser, læser en side gennem dens tilgængelighedstræ, som en skærmlæser gør. Rigtige knapper og formularer med labels er en del af det, der lader en agent finde en formular og udfylde den.
Dette sites egne skabeloner indeholder slet intet <button>-element. Den
udfyldte opfordring »Kontakt os« er et <a>-element stylet som en knap, fordi
den fører til kontaktsiden, og dens stylesheetregel sætter min-height til 24
pixel med en kommentar, der henviser til succeskriterium 2.5.8. Hovedmenuen er
et <details>-element, som dets <summary> åbner og lukker, og skabelonens
kommentar siger, at browseren ejer den åbne tilstand og knapsemantikken, uden
script.
Hvor det går galt
- En klikbar boks erstatter elementet. En
<div>eller<span>med en klikhandler svarer på en mus og ikke ret meget andet: den får intet fokus, ignorerer mellemrumstasten og Enter og bliver annonceret som almindelig tekst.role="button"retter kun annonceringen; fokus og taster skal stadig skrives i hånden. - Et link gør en knaps arbejde eller omvendt. Et link, der sletter en post, kan åbnes i en ny fane eller gemmes som bogmærke, så sletningen bliver gentaget eller tabt af syne. En knap, der kun navigerer, kan ikke åbnes i en ny fane og har ingen adresse at kopiere.
- En knap uden type sender formularen. Fordi en manglende
typesætter knappen i tilstanden Auto, sender en knap som »Tilføj række« eller »Vis adgangskode« inde i en formular hele formularen i det øjeblik, den trykkes.type="button"på hver knap, der ikke skal sende, fjerner overraskelsen. - Ikonet er hele etiketten. En skraldespand, en blyant eller en pil betyder noget for den, der tegnede den. Uden et tilgængeligt navn læser skærmlæseren et filnavn, et symbolnavn eller bare »knap«. Et synligt ord er bedst; hvor der ikke er plads til et, udfylder et tilgængeligt navn, der angiver handlingen, hullet.
- En skjult eller deaktiveret knap bruges som sikkerhed. At fjerne knappen fra siden stopper kun ærlige brugere; forespørgslen bag den kan stadig sendes, og serveren må selv afgøre, om denne konto må gøre dette.
Læs mere
- WAI-ARIA 1.2: button role — rollens definition, dens skifte- og menuvarianter og de tilstande og egenskaber, den understøtter.
- HTML Living Standard: the button element
— indholdsmodellen, typerne submit, reset og button, tilstanden Auto og
attributterne
commandogcommandfor. - ARIA Authoring Practices Guide: Button Pattern — knapper over for links, tastaturadfærd, hvor fokus går hen efter et tryk, og reglen for skifteknappers etiketter.
- Understanding SC 2.5.8: Target Size (Minimum) — minimum på 24 gange 24 pixel, afstandstesten og de øvrige undtagelser.
- Understanding SC 4.1.2: Name, Role, Value — hvorfor hver kontrol skal have et navn og en rolle, som software kan aflæse, og hvornår almindelige HTML-kontroller allerede opfylder kriteriet.