2.5.3Poziom A

Etykieta w nazwie

Label in Name

Dostępna nazwa kontrolki z widoczną etykietą tekstową lub obrazem tekstu zawiera tekst tej etykiety.

Komu pomaga
Ograniczenia ruchoweSłabowidzeniePamięć i koncentracja
Zastosowanie
WWWAplikacje mobilneAplikacje desktopoweDokumenty cyfroweInne urządzenia

Warunki i wyjątki opisano w artykule.

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

Co oznacza to kryterium

Jeśli przycisk pokazuje „Pokaż adres”, osoba sterująca głosem powinna móc posłużyć się tym napisem. Dostępna nazwa przycisku zawiera całą widoczną etykietę w tej samej kolejności. Można dodać kontekst przed nią lub po niej; zaczynanie od etykiety jest dobrą praktyką, a nie dodatkowym warunkiem tego kryterium. Nazwa i widoczny napis to dwie różne informacje, które trzeba porównać.

ID / potrzeba Bariera i korzyść
motor / Ograniczenia ruchowe Osoba korzystająca ze sterowania głosowego zamiast precyzyjnego dotyku może wskazać kontrolkę widocznym napisem. Nie zakładamy, że każda osoba z ograniczeniami ruchowymi używa mowy.
low-vision / Słabowidzenie Przy łączeniu wzroku z odczytem głosowym nazwa zgodna z napisem ogranicza niepewność, której kontrolki dotyczy odczyt.
cognitive / Pamięć i koncentracja Nie trzeba pamiętać odmiennej, ukrytej nazwy do wypowiedzenia ani uzgadniać dwóch wersji etykiety.

Przykłady błędów i poprawek

Wszystkie trzy warianty pokazują punkt Pracownia, zamówienie #1042, te same kontrolki i wyniki. Jedyną istotną różnicą jest nazwa dwóch przycisków; dane, raster tekstu, układ i callbacki są wspólne. Wariant nie jest podpisany oceną zgodności w UI.

Kontrolka / etykieta good — poprawka bad — celowy błąd control — granica zalecenia
Tekst „Pokaż adres” „Pokaż adres — punkt Pracownia” „punkt Pracownia” „punkt Pracownia — Pokaż adres”
Obraz tekstu „Pokaż godziny” „Pokaż godziny — godziny punktu Pracownia” „godziny punktu Pracownia” „godziny punktu Pracownia — Pokaż godziny”
Sama ikona znaku zapytania, bez etykiety tekstowej „Pomoc”, brak warunku 2.5.3 Tak samo Tak samo

Bariera w bad: użytkownik widzi napisy akcji, lecz otrzymane nazwy nie zawierają tych napisów. Poprawka w good: nazwy zachowują etykiety i dodają kontekst po nich. Kontrola: nazwy zawierają pełne etykiety po kontekście, więc spełniają badany warunek, choć nie stosują zalecenia początku. Ikona jest dodatkową kontrolą warunku zastosowania, a nie „poprawną wersją bez nazwy”.

Raster „Pokaż godziny” powstał przez AppKit z systemowym fontem. Jest własnym wejściowym obrazem tekstu, bez generacji AI. Zwykły tekst byłby prostszym rozwiązaniem produkcyjnym; ten przykład nie zatwierdza użycia rastra względem 1.4.5.

Pracownia na iOS Simulator: Pokaż adres, obraz tekstu Pokaż godziny i ikona pomocy w stanie początkowym.

Good, iPhone 17 Simulator / iOS 26.5, 2026-10-03. Oba napisy są widoczne, a wyniki ukryte. Początkowe kadry good, bad i control są identyczne bajtowo; różnicę nazw pokazuje tabela i odczyt XCTest, a nie obraz.

Good po aktywacji: adres ul. Przykładowa 10, godziny 9:00–17:00 i informacja pomocy.

Good po trzech tap XCTest z 2026-10-03 ujawnia adres, godziny i pomoc. Kadr pokazuje wynik zwykłych wejść; nie jest dowodem rozpoznania komendy głosowej.

Kiedy obowiązuje i gdzie są wyjątki

  • Wymaganie: porównujemy tekst etykiety komponentu z jego faktyczną dostępną nazwą. Zgodność znaczenia, synonim albo tłumaczenie etykiety na inny język nie zastępują zawarcia jej tekstu. „Pokaż adres” → „Adres punktu” narusza tę relację, choć opisuje podobną funkcję.
  • Tekst ma wyrażać treść w ludzkim języku. Raster z napisem w przycisku także podlega wymaganiu; nie wystarczy, że obraz ma nazwę pliku. Fotografia z istotną treścią wizualną nie staje się w całości obrazem tekstu tylko dlatego, że zawiera napis.
  • Etykieta to tekst identyfikujący kontrolkę, zwykle wewnątrz przycisku lub obok pola. Nie utożsamiaj jej automatycznie z całym nagłówkiem, instrukcją albo legendą grupy. Sam placeholder może być kandydatem, gdy brak innej widocznej etykiety; nie czyni to placeholdera dobrym zamiennikiem trwałej etykiety.
  • Nazwa różni się od opisu, podpowiedzi, roli i wartości. Dopisanie etykiety tylko do hint/description nie naprawia nazwy. Identyfikator do testów, HTML name i nazwa zasobu graficznego nie są dostępną nazwą.
  • Zachowaj cały ciąg i kolejność słów; nie wstawiaj dodatkowych słów pomiędzy słowa etykiety. Dodatkowy kontekst przed lub po pełnej etykiecie jest dopuszczalny. Równość nie jest konieczna. Techniki G208 i G211 pokazują odpowiednio zawarcie oraz dopasowanie nazwy; są pomocnicze, nie obowiązkowym sposobem implementacji. F96 opisuje niedopasowanie, F111 brak nazwy przy widocznym napisie; oba są sprawdzonymi opisami błędów, bez twierdzenia o ich częstości.
  • Understanding pozwala pomijać różnice wielkości liter i zwykłej interpunkcji, np. „Dalej…” i „Dalej”. Nie usuwaj mechanicznie symboli z formuł: etykieta 11×3=33 przekazuje znaczenie i nie powinna być zastępowana dowolnym opisem słownym. Symboliczne „B” oznaczające pogrubienie lub strzałka „>” nie są tekstowymi etykietami w tym sensie.
  • Dodatkowa informacja w nawiasie może stanowić opis, np. format daty lub wymagane pole; jeśli nie wchodzi do nazwy, jej istotną treść trzeba nadal udostępnić programowo. To nie jest zezwolenie na pominięcie dowolnej części etykiety.
  • W samym 2.5.3 nie ma ogólnego wyjątku „to niezbędne”. Brak etykiety tekstowej jest brakiem warunku zastosowania. Przycisk z samą ikoną nadal wymaga poprawnej nazwy/roli z innych kryteriów; nie dodawaj mu na siłę nazw kształtów. Brak nazwy przy widocznym napisie może naruszać zarazem 4.1.2 i 2.5.3.
  • Zalecenie: najlepiej używać tej samej etykiety jako nazwy, a konieczny kontekst dodawać po niej lub do opisu. Zawierająca napis nazwa nie dowodzi, że konkretny silnik mowy rozpozna komendę; działanie Voice Control oceniamy osobno.

Platformy

Warunek wspólny: komponent interfejsu ma widoczną etykietę zawierającą tekst lub obraz tekstu. Brak testu na platformie nie jest jej wyłączeniem. Dla pozycji poza WWW podstawą jest interpretacyjna Group Note WCAG2ICT dla WCAG 2.2 z 2025-12-11, a nie osobna norma zgodności. WCAG2ICT stosuje 2.5.3 bez zmiany brzmienia; nie zamienia etykiety tekstowej w dowolną ikonę.

ID / środowisko Podstawa / kryterium Stan Warunek, zakres i adaptacja Uzasadnienie Weryfikacja
web / WWW WCAG 2.2 / 2.5.3 dotyczy warunkowo Tekst etykiety linku, przycisku, pola lub innej kontrolki; bez adaptacji, także w przeglądarce telefonu. Użytkownik może wskazywać widoczny napis głosem. AI 2026-10-03; wykonanie WWW NOT-RUN
mobile / aplikacje mobilne WCAG 2.2 + WCAG2ICT 2025-12-11 / 2.5.3 dotyczy warunkowo Natywne kontrolki z tekstem/obrazem tekstu; bez zmiany wymagania. W hybrydzie web i native osobno. Nazwa w platformowym API musi zachować etykietę. AI 2026-10-03; Flutter iOS wykonany, Android NOT-RUN
desktop / aplikacje desktopowe WCAG 2.2 + WCAG2ICT 2025-12-11 / 2.5.3 dotyczy warunkowo Kontrolki programów z widoczną etykietą; bez zmiany wymagania. Ten sam problem identyfikacji po tekście w interfejsie. AI 2026-10-03; wykonanie NOT-RUN
document / dokumenty cyfrowe poza WWW WCAG 2.2 + WCAG2ICT 2025-12-11 / 2.5.3 dotyczy warunkowo Np. pole formularza PDF lub link z etykietą; bez zmiany. Zwykły nieinteraktywny akapit nie uruchamia warunku. Dokument może zawierać komponenty obsługiwane przez użytkownika. AI 2026-10-03; wykonanie NOT-RUN
other / oprogramowanie kiosku lub TV z wizualnym UI WCAG 2.2 + WCAG2ICT 2025-12-11 / 2.5.3 dotyczy warunkowo Web jak WWW, oprogramowanie poza WWW bez zmiany; kontrolki z tekstowymi etykietami. Rodzaj ekranu nie usuwa relacji etykiety i nazwy. Zamknięta funkcjonalność wymaga osobnej oceny dostępnych mechanizmów i ograniczeń; nie jest automatycznym wyjątkiem. AI 2026-10-03; wykonanie i konkretna konfiguracja zamknięta NOT-RUN

Ikona pomocy w demonstracji nie uruchamia warunku 2.5.3, bo nie ma widocznego tekstu; to granica scenariusza, nie wyłączenie aplikacji mobilnych.

Rozwiązania w technologiach

Najprostsza poprawka produkcyjna: standardowy przycisk z tekstem bez nadpisywania nazwy. Jeden lokalizowany ciąg dla widocznej etykiety i jawnej nazwy ogranicza rozbieżności; po zmianie języka, napisu lub stanu ponownie sprawdź rzeczywisty odbiornik. Dodatkowy hint nie może być jedynym miejscem etykiety.

Flutter / Dart

Fragment w metodzie build, callback showAddress dostarcza właściciel widoku:

import 'package:flutter/cupertino.dart';

CupertinoButton(
  onPressed: showAddress,
  child: const Text('Pokaż adres'),
)

Standardowa kontrolka zachowuje tekst jako nazwę. W demonstracji świadomie nadpisano semantykę treści przycisku, aby porównać trzy nazwy bez zmiany wyglądu; excludeSemantics nie usuwa tam roli ani akcji z samego CupertinoButton. Obraz wymaga jawnej etykiety zawierającej jego napis, a dekoracyjna semantyka obrazu jest wyłączona. Zastąpienie całej semantyki przycisku bez zachowania akcji/roli byłoby inną usterką.

Android / Jetpack Compose

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

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

Przycisk scala tekst dziecka. Nie zastępuj go samym „punkt Pracownia” przez contentDescription lub czyszczenie semantyki. Dla obrazu zawierającego napis przekaż ten napis jako contentDescription obrazu w przycisku i sprawdź wynik scalania, a nie tylko właściwości w kodzie. clearAndSetSemantics może usunąć nazwę, stan lub akcję i wymaga ostrożności.

iOS / SwiftUI

import SwiftUI

struct AddressButton: View {
    let showAddress: () -> Void
    var body: some View {
        Button("Pokaż adres", action: showAddress)
    }
}

Tekst standardowego przycisku stanowi etykietę dostępności. Jeśli przycisk pokazuje własny obraz tekstu, ustaw accessibilityLabel przycisku na tekst widoczny w obrazie, ewentualnie z kontekstem po nim. accessibilityIdentifier służy identyfikacji, a accessibilityHint nie zastępuje nazwy. Samo poprawne odczytanie label przez XCTest nie potwierdza rozpoznawania mowy.

React Native

import { Button } from 'react-native';

type Props = { showAddress: () => void };
export function AddressButton({ showAddress }: Props) {
  const label = 'Pokaż adres';
  return (
    <Button title={label} accessibilityLabel={label} onPress={showAddress} />
  );
}

Jeden ciąg zasila oba pola; accessibilityLabel nie może zastąpić etykiety synonimem. Dla Pressable z obrazem tekstu nadaj nazwę na komponencie interakcyjnym, zachowując rolę przycisku, i unikaj osobnego, dublującego celu obrazka. accessibilityHint, testID oraz wartość stanu nie są zamiennikami nazwy. Automatyczna zmiana title na wielkie litery na Androidzie nie jest sama w sobie naruszeniem 2.5.3.

Technologia Przegląd dokumentacji / data Kompilacja Działanie
Flutter PASS, oficjalne Semantics/CupertinoButton i lokalny SDK, 2026-10-03 Właściwa demonstracja: analiza/build iOS; wyniki poniżej. Sam krótki fragment nie był osobną aplikacją. Host + rzeczywisty Runner na iOS Simulator; zakres poniżej. Android NOT-RUN.
Jetpack Compose PASS, Button, scalanie/czyszczenie semantyki, 2026-10-03 NOT-RUN NOT-RUN; fragment edukacyjny, bez deklarowania użytej wersji SDK
SwiftUI PASS, accessibilityLabel i API przycisku, 2026-10-03 NOT-RUN NOT-RUN; build Fluttera/XCTest nie jest testem SwiftUI
React Native PASS, Button, accessibilityLabel/accessibilityHint, 2026-10-03 NOT-RUN NOT-RUN; fragment edukacyjny, bez deklarowania użytej wersji pakietu

Jak sprawdzić

  1. Uruchom /2-5-3/pickup/good, /bad i /control we wspólnej aplikacji. Rozpoznaj widoczny napis każdego celu; raster „Pokaż godziny” trzeba obejrzeć, bo nie pochodzi z węzła Text. Ikona nie ma widocznego napisu.
  2. Odczytaj finalną nazwę i rolę z właściwego odbiornika platformy. Ta próba czyta XCUIElement.label, elementType, identifier, isEnabled, isHittable i ramkę oraz zapisuje XCUIApplication.debugDescription. Nie czyta nazwy z prywatnego JSON aplikacji ani z oczekiwań testu. Identyfikator jedynie wiąże cel z obserwacją.
  3. Porównaj pełną etykietę z nazwą: good i control zawierają ją, bad nie. Nie wymagaj prefiksu w kryterium i nie sprawdzaj jedynie zbioru słów. Dla tej prostej pary nie jest potrzebna normalizacja interpunkcji ani heurystyka językowa.
  4. Aktywuj każdy przycisk i sprawdź wynik; wybierz następny wariant, zresetuj i sprawdź przywrócenie nazwy oraz usunięcie wyników. Nieznana trasa ma wrócić do good. Testy utrzymują te same dane we wszystkich wariantach.
  5. Plan — NOT-RUN: na środowisku obsługującym sterowanie głosowe, we właściwym języku, wypowiedz komendę zawierającą widoczny napis. Zapisz konfigurację, wypowiedź, reakcję, ewentualne dopasowanie przez OCR/numerowanie i wynik. Działanie przez OCR albo numer ekranu nie zastępuje poprawnej nazwy. Nie traktuj tap XCTest lub ręcznego callbacku jako tej próby.

Wyniki rzeczywistego wykonania

Próba natywna 2026-10-03, iPhone 17 Simulator / iOS 26.5, Flutter 3.44.9 (6b182d2c75), Dart 3.12.2, Xcode 27.0 (27A266a), SDK iOS Simulator 27.0. Jasny wygląd, content size large, pionowo, 402 × 874 pt / 1206 × 2622 px / skala 3; pasek 09:41 jest ustawieniem demonstracji, nie czasem próby. Obrazy i wejściowy raster obejrzano przez AI: aktualny ekran, kompletne etykiety, brak splash/pustki i retuszu. Wszystkie trzy początkowe PNG są identyczne bajtowo; różnicę nazw dokumentuje odbiornik. Metadane zawierają UTC, czasy lokalne, trasy, konfigurację, statusy, hashe źródeł/buildów i plików.

Sprawdzenie Rzeczywisty wynik / zakres
Flutter analyze PASS, bez problemów, 1,3 s
Testy hostowe Flutter 21 PASS, w tym nowy test semantyki i wszystkich aktywacji, cyklu/resetu/fallback; dotychczasowe adaptery iOS. Wirtualne wejście widgetu, bez Androida.
Build Flutter iOS / driver XCTest PASS / PASS; build Runner 8,7 s, bez podpisu produkcyjnego
XCTest na uruchomionym Runner 1 PASS, 0 failures, 182,173 s; 13 odczytów, 15 tap; smoke 2.5.2 PASS
Tekst i obraz tekstu Natywne nazwy good i control zawierają całą etykietę obu przycisków; bad w obu przypadkach odtwarza FAIL badanego warunku. PASS testu oznacza potwierdzenie oczekiwanej różnicy między wariantami, nie zgodność bad.
Aktywacja/reset Każdy z trzech przycisków ujawnił właściwą treść we wszystkich wariantach. Nazwy zachowane po działaniu; cykl zmienia nazwy i usuwa wyniki, reset wraca do trasy, nieznana trasa good.
Ikona bez tekstu Nazwa „Pomoc”, natywna rola Button; brak widocznej etykiety tekstowej oznacza brak warunku 2.5.3 tego celu. Nie jest to pełny test 4.1.2.
Materiały / powtarzalna kontrola 4 surowe screenshoty, 1 raster wejściowy, 4 drzewa, 13 odczytów i 15 żądań; check dowodów i linków PASS. Zachowano 296 wcześniejszych plików assetów/testów bez zmian hashy.
Głos / czytnik / człowiek Voice Control, rozpoznawanie mowy, VoiceOver, fizyczny iPhone oraz przegląd człowieka NOT-RUN. Bez audio, filmu lub transkrypcji AT; nie są potrzebne do samej statycznej relacji nazwy–etykiety, a tor głosowy pozostaje niewykonany.

Wyniki testów, zachowana kontrola, natywne odczyty oraz drzewa są dowodami tej próby. Snapshoty atrybutów, drzewa i PNG powstają sekwencyjnie, nie atomowo; UTC zapisano przed odczytem. Stan kontrolki i jej nazwę pobrano przez odbiornik systemowy, a nie przez deklarację w kodzie. Zakres wynika z testów hostowych, XCTest i kontroli zapisanych dowodów.

Weryfikacja i ograniczenia

Reguła deterministyczna dla znanej pary etykieta–nazwa sprawdza zawarcie całego ciągu; oczekiwania wariantów pozostają w teście/checku, poza odczytem odbiornika. To nie walidator dowolnej aplikacji ani dowód uogólnienia. Przybliżenie z drzewa pomaga uzyskać nazwę i rolę, ale nie gwarantuje znajomości widocznej etykiety: przy nadpisaniu nazwy węzeł Text może zniknąć, a raster wymaga obrazu/OCR. Brak etykiety w drzewie nie oznacza braku widocznej etykiety.

Ocena AI może wskazać prawdopodobny napis i przypisać go do celu, ale myli instrukcję, wartość pola, legendę lub etykietę. OCR i mapowanie geometrii nie są deterministycznym dowodem. Człowiek rozstrzyga przypadki symboli, formuł, nawiasów i etykiet złożonych. Nie stosuj globalnego usuwania interpunkcji ani tłumaczenia/synonimów jako warunku PASS; potrzebny jest kontekst. Brak danych daje „nie ustalono”, a nie wynik pozytywny.

Nazwa z prefiksem nie gwarantuje unikalności, dobrego opisu celu, poprawnej roli ani działania mowy. Rzeczywisty test Voice Control i czytnika ma własny zakres; sama nazwa przycisku z XCTest nie jest transkrypcją VoiceOver. Screenshot pokazuje napis i stan, bez dowodu semantyki lub ruchu/czasu. Nie przeprowadzono testu doświadczenia użytkownika ani pomiaru skuteczności walidatora.

Jak sprawdza Clearship

Clearship porównuje widoczny napis kontrolki z jej nazwą dostępną w zapisanych stanach ekranu. Napis pobiera z drzewa, a gdy go tam nie ma — z obrazu przez OCR. Porównuje ciąg słów w tej samej kolejności; opis, podpowiedź i wartość nie zastępują nazwy.

Metoda deterministyczna label-in-name-1 spełniła próg Androida w pomiarze 7 października 2026 r. Pomiar kontrolny iOS pozostaje niewykonany w bieżącym katalogu. Pełny odczyt obrazu wymaga Tesseracta: hosty skanowania nie mają tego programu, więc dla obrazu tekstu lub zastąpionej semantyki wynik może być niepełny; ponowna analiza na stacji z OCR ma odrębny zakres.

Pola z etykietą obok, przycięte kontrolki, dynamiczne stany poza zebranym przebiegiem, symbole, formuły, nawiasy oraz kwalifikacja nagłówka lub legendy wymagają człowieka. Angielski model OCR z tolerancją pomyłek może przeoczyć różnice polskich znaków i krótkie napisy; powiadomienie nad kontrolką może dać fałszywy alarm. Nazwa Androida jest przybliżeniem z dostępnych pól, a odczyt iOS pochodzi z XCTest. Metoda nie potwierdza Voice Control, VoiceOver ani osobnej treści webowej.

Powiązane kryteria