2.1.1Poziom A

Klawiatura

Keyboard

Wszystkie funkcje mają drogę obsługi klawiaturą bez wymuszonego tempa klawiszy, poza funkcjami zależnymi od całego toru ruchu.

Komu pomaga
Ograniczenia ruchoweNiewidzenieSłabowidzenie
Zastosowanie
WWWAplikacje mobilneAplikacje desktopoweDokumenty cyfroweInne urządzenia

Warunki i wyjątki opisano w artykule.

Wersja
WCAG 2.2, wprowadzone w 2.0
Zasada / wytyczna
Funkcjonalność / 2.1
Stan researchu
Draft AI. Bez przeglądu człowieka.
Redakcja artykułu
· wersja robocza
Na tej stronie

Co oznacza to kryterium

Każdą funkcję musi dać się wykonać przez interfejs klawiatury, bez szybkiego powtarzania naciśnięć lub trzymania klawisza przez określony czas. Może to być inna kontrolka osiągająca ten sam cel. Wyjątek dotyczy funkcji zależnej od całego toru ruchu, np. swobodnego malowania; samo przeciąganie go nie tworzy.

To pomaga osobom z ograniczeniami ruchowymi, korzystającym z klawiatur alternatywnych lub przełączników dostarczających klawisze, a także osobom niewidomym i słabowidzącym, które nie śledzą wskaźnika. Nie każdy tryb Switch Control emuluje klawiaturę. Semantyka i obsługa czytnika wymagają osobnej oceny.

Przykłady błędów i poprawek

Adres punktu: Tab, przerwa i aktywacja

Własna „Pracownia” pokazuje syntetyczne zamówienie #1042 i adres ul. Przykładowa 10. Wszystkie warianty mają te same dane. Materiały pochodzą z Flutter/Cupertino na iPhone 17 Simulator, iOS 26.5, z 2026-10-02.

  1. W good Tab przenosi fokus na „Pokaż adres”. Adres pozostaje ukryty.
  2. Po 7 sekundach bez działania Space ujawnia adres. Obserwator potwierdził odebranie klawisza; nie wykonywał akcji.
  3. Dalszy Tab prowadzi do czyszczenia wyniku, wyboru wariantu i resetu. Space wykonuje te działania, a Shift+Tab prowadzi wstecz.
Pracownia good: fokus na Pokaż adres po Tab, adres jeszcze ukryty.

Stan przed aktywacją. Sam obraz nie potwierdza klawisza ani czasu oczekiwania.

Ta sama Pracownia po Space: Adres ul. Przykładowa 10.

Rezultat odebranego Space; sekwencję wejścia potwierdzały źródłowe obserwacje XCTest i Fluttera.

Fokus i rola przycisku bez działania

Problem
Tab osiąga Pokaż adres, ale odebrany Space nie ujawnia adresu. Kontrolka korzysta tylko z GestureDetector.onTap.
Skutek
Osoba obsługująca ekran klawiaturą nie może wykonać funkcji; w tym wariancie nie ma innej drogi.
Poprawka
Użyj standardowego CupertinoButton z tą samą akcją albo zapewnij własnej kontrolce pełną nawigację i aktywację klawiaturową.
Pracownia bad po odebranym Space: fokus Pokaż adres, adres nadal ukryty.

Odtworzona bariera. Oddzielny test tap ujawnił identyczny adres, potwierdzając tylko działanie dotykiem.

Bad ma Focus, nazwę i semantyczną rolę przycisku, lecz nie ma ActivateIntent ani semantycznej akcji tap. Ograniczona semantyka wpływa także na inne wymagania; przykład nie izoluje wszystkich kryteriów.

Równoważna funkcja jest dostępna inną drogą

Control zachowuje pierwszą niesprawną kontrolkę i dodaje standardowy „Pokaż adres ponownie”. Space na pierwszej nie działa. Następny Tab osiąga alternatywę, a Space ujawnia ten sam adres. Pierwsze niepowodzenie nie wystarcza więc do negatywnej oceny całej funkcji. To kontrola ryzyka fałszywego alarmu, bez rekomendacji dublowania wadliwych przycisków.

Pracownia control po Tab i Space na Pokaż adres ponownie: adres ujawniony.

Ta sama funkcja osiągnięta skuteczną alternatywą. Zrzut jest końcowym stanem sekwencji.

Kiedy obowiązuje i gdzie są wyjątki

Interfejs klawiatury i tempo

Zakres obejmuje menu, dialogi, formularze, zmianę kolejności, powiększenie, media i funkcje pojawiające się po interakcji. Liczy się możliwość osiągnięcia wyniku, a nie tylko fokus lub nazwa kontrolki.

Interfejs klawiatury może odbierać klawisze z urządzenia fizycznego, alternatywnego sprzętu lub emulacji. MouseKeys zamieniające klawisze w ruch wskaźnika nadal używają interfejsu wskaźnika. Tap XCTest i akcja czytnika też nie potwierdzają klawiatury. Własna klawiatura ekranowa sterowana dotykiem nie zastępuje niezależnej od urządzenia usługi platformy; nie trzeba tworzyć własnej, gdy system już ją zapewnia.

Nie uzależniaj akcji od dwóch naciśnięć w krótkim oknie ani od określonego przytrzymania. Zwykłe naciśnięcia mogą mieć dowolne przerwy; uwzględnij ustawienia takie jak Sticky Keys. Osobny limit czasu procesu wymaga odrębnej oceny. Siedmiosekundowa próba jest jedną obserwacją, nie dowodem wszystkich odstępów. Enter i Space są konwencjami przycisku; 2.1.1 nie wymaga obu jednocześnie.

Funkcja zależna od toru ruchu

Swobodne malowanie zachowuje przebieg pociągnięcia, więc może korzystać z wyjątku. Wybór narzędzia i zapis nadal wymagają klawiatury. Rozpoznawanie pisma jest techniką wprowadzania tekstu; jego cel nie korzysta z tego wyjątku.

Przeniesienie karty do kolumny, zmiana kolejności zdjęć, prosta linia lub regularny kształt zależą od obiektu, punktów i wyniku. Dodaj „Przenieś do…”, „Wyżej/Niżej” lub współrzędne z obsługą klawiatury. Alternatywa wyłącznie dotykowa nie wystarczy dla 2.1.1. Tych scenariuszy drag/drop i rysowania nie wykonywano w źródle.

Duplikat kontrolki nie musi przyjmować klawiszy, jeśli ta sama lub porównywalna funkcja jest w pełni dostępna inną drogą. Pomocnicze G202/G90/H91 opisują inwentaryzację, równoważne klawisze i standardowe kontrolki. F54/F42/F55 wskazują wzorce handlera tylko dla wskaźnika, emulowanego linku i usuwania fokusu; nie są danymi o częstości ani automatycznym werdyktem.

Platformy

Klasyfikacja AI pochodzi z 2026-10-02. Dla WWW podstawą jest WCAG 2.2 Recommendation 2024-12-12, dla pozostałych środowisk informacyjne WCAG2ICT Group Note 2025-12-11. Nie jest to ustalenie obowiązku prawnego.

Środowisko Zakres i adaptacja Wykonanie źródłowe
WWW, także telefon Wszystkie funkcje treści; brak fizycznej klawiatury telefonu nie wyłącza wymagania. Bez przeglądarki.
Natywne aplikacje mobilne Platforma udostępnia niezależną od urządzenia usługę klawiatury; iOS/Android ją zapewniają. Tylko Flutter/iOS Simulator.
Desktop Ten sam warunek usługi; bez zmiany treści wymagania. Niewykonane.
Dokumenty Linki, formularze i kontrolki we właściwym odbiorniku. Statyczny akapit nie musi być przystankiem Tab. Niewykonane.
Kiosk lub telewizor Ustal usługę klawiatury/substytutu. Jej brak wymaga oceny zamkniętej funkcjonalności i sprzętu. Niewykonane.

W hybrydzie oceń część webową, natywną i przejście między nimi. Brak testu nie wyłącza zastosowania.

Rozwiązania w technologiach

Fragmenty wykonują tę samą akcję co dotyk. Przegląd dokumentacji w źródle: 2026-10-02. Build Fluttera nie potwierdza pozostałych implementacji.

Flutter

import 'package:flutter/cupertino.dart';

// Wewnątrz build; showAddress wykonuje tę samą funkcję co dotyk.
CupertinoButton(
  onPressed: showAddress,
  child: const Text('Pokaż adres'),
)

Osadź w build z istniejącą akcją showAddress. Standardowa kontrolka ma nawigację, fokus i ActivateIntent; Semantics(button: true) samo ich nie zapewnia. Pełna demonstracja Flutter 3.44.9 / Dart 3.12.2: analiza, host, build i przebieg iOS PASS. Skrócony fragment nie jest osobno uruchomioną aplikacją; Android niewykonany.

Android / Compose

import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable

@Composable
fun AddressAction(showAddress: () -> Unit) {
    Button(onClick = showAddress) { Text("Pokaż adres") }
}

Button korzysta z clickable obsługującego Enter/Space. Własny pointerInput nie jest równoważnym zamiennikiem. Sprawdź Tab i cały przepływ. Oficjalna dokumentacja sprawdzona; kompilacja i działanie niewykonane.

iOS / SwiftUI

import SwiftUI

struct AddressAction: View {
    let showAddress: () -> Void
    var body: some View {
        Button("Pokaż adres (⌘⇧A)", action: showAddress)
            .keyboardShortcut("a", modifiers: [.command, .shift])
    }
}

Skrót Command+Shift+A jest dodatkową ujawnioną drogą do showAddress. Nie zastępuje innych funkcji. Dokumentacja i typecheck Xcode 27.0 / SDK Simulator 27.0, arm64/iOS 17: PASS. SwiftUI runtime i FKA niewykonane.

React Native

import { Button } from 'react-native';

export function AddressAction({ showAddress }: { showAddress: () => void }) {
  return <Button title="Pokaż adres" onPress={showAddress} />;
}

Standardowy Button jest podstawą zamiast gestu na View. onPress, accessibilityRole i onAccessibilityAction nie dowodzą keyboard-only. View.focusable/tabIndex dotyczą Androida; nie przenoś ich na iOS. Jeśli adapter nie udostępnia funkcji, dodaj obsługę natywną, np. responder/keyCommands, i ją sprawdź. Dokumentacja sprawdzona; kompilacja i runtime niewykonane.

WWW

<button type="button">Pokaż adres</button>

Podepnij jedną akcję click do przycisku; do nawigacji użyj linku z href. Sama rola na klikanej dekoracji nie wystarczy. Fragment edukacyjny bez uruchomienia w przeglądarce.

Jak sprawdzić

  1. Spisz funkcje i ich cele, w tym stany pośrednie, podmenu, przewijanie i gesty. Dla wyjątku uzasadnij zależność od całej trajektorii.
  2. Zapisz system, odbiornik, wejście, układ i ustawienia. Oddziel klawiaturę aplikacji, FKA, VoiceOver i emulację wskaźnika.
  3. Bez dotyku nawiguj i aktywuj komendami platformy. Sprawdź wynik, zrób przerwę między klawiszami i zbadaj reguły czasu w handlerach.
  4. Po nieskutecznej kontrolce sprawdź równoważne drogi. Zapisz wysłane/odebrane zdarzenia, fokus i wynik; brak odbioru jest ograniczeniem próby.
  5. Sprawdź pozostałe funkcje i osiągnięte stany. Screenshot, callback, drzewo lub tap nie zastępują tej sekwencji.

Weryfikacja i ograniczenia

Historyczne wykonanie 2026-10-02 dotyczy wyłącznie opisanej trasy: ujawnienia adresu, czyszczenia, wyboru wariantu i resetu. XCTest wysyłał klawisze do uruchomionego Fluttera; HardwareKeyboard obserwował je, zwracając false.

Sprawdzenie Wynik źródła
Analiza, host, build iOS PASS; 13 testów hostowych. Hostowy adapter Material nie jest Androidem.
XCTest PASS, 2 testy, 0 failures, 158,438 s; Tab/Shift+Tab/Space oraz oddzielny tap w bad.
Funkcje Good: wszystkie cztery dostępne; bad: Space nie pokazuje adresu; control: alternatywa działa. PASS odtworzenia bad oznacza potwierdzenie bariery.
Materiały 8 PNG, 8 snapshotów, 27 próbek i 33 żądania; pokazane tu cztery kadry. Wszystkie PNG obejrzała AI.
Czas 7 s przerwy w każdym wariancie i brak timera w kodzie; skończony zakres obserwacji.
SwiftUI Typecheck PASS; bez uruchomienia.
Enter na iOS Niewykonany jako poprawnie dostarczony klawisz: Return nie dawał zdarzenia, Enter wygenerował Ctrl+C. Hostowy Enter nie zmienia tego braku.
FKA, sprzęt, Sticky Keys, VoiceOver, pozostałe platformy i człowiek Niewykonane. Dostępność sparowanego iPhone’a nie potwierdza jego testu.

Nie nagrywano filmu/audio. Fokus pochodzi z Fluttera, nie z FKA czy VoiceOver. Drzewo i nazwa nie ujawniają wszystkich alternatyw. Wynik dotyku nie rozstrzyga klawiatury, a skończone próbki odstępów nie potwierdzają wszystkich czasów. Niezależnego walidatora nie uruchomiono; metadane oczekiwań, warianty i węzeł obserwatora powinny pozostać poza jego wejściem. Brak znaleziska przy niepełnej inwentaryzacji nie oznacza spełnienia wymagania.

Jak sprawdza Clearship

Metoda z 2026-10-07 porównuje na Androidzie funkcje dostępne dotykiem ze stanami fokusu i aktywacją w przejściu klawiatury. Wskazuje kandydatów: cel nieosiągalny, brak skutku Space/Enter przy działającym tap lub instrukcję gestu bez drogi klawiaturowej. Pomiar kontrolny 16/18, bez fałszywych alarmów na 80 poprawnych ekranach, nie spełnił progu; wynik wymaga człowieka.

Fokus poza drzewem, możliwa równoważna droga i nieosiągnięty stan pozostają nierozstrzygnięte. Funkcje bez akcji i instrukcji w drzewie, tempo klawiszy, inne skróty i osobna treść webowa nie są oceniane. iOS nie ma tego przejścia klawiatury ani pomiaru. Researchowa próba iOS z tego artykułu nie jest wykonaniem analizatora produktu.

Powiązane kryteria