1.1.1Poziom A

Treść nietekstowa

Non-text Content

Udostępnij tekst przekazujący cel treści nietekstowej; nazwij działania ikon i pozwól pomijać dekoracje, z uwzględnieniem szczególnych warunków.

Komu pomaga
NiewidzenieSłabowidzenieNiesłyszenie i niedosłuchPamięć i koncentracja
Zastosowanie
WWWAplikacje mobilneAplikacje desktopoweDokumenty cyfroweInne urządzenia

Warunki i wyjątki opisano w artykule.

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

Co oznacza to kryterium

Grafika przekazująca informację potrzebuje tekstu, z którego można uzyskać tę samą informację bez oglądania obrazu. Ikona działania potrzebuje nazwy celu kontrolki. Dekorację oznacz tak, by technologia asystująca mogła ją pominąć. Rodzaj treści i jej cel określają zakres alternatywy.

Tekst wspiera osoby niewidome i słabowidzące, a także odbiorców brajla przy jednoczesnym ograniczeniu wzroku i słuchu. Trafny opis pomaga rozumieć symbole. Dla informacji dźwiękowych pomaga osobom niesłyszącym; przykład wykresu nie zawiera dźwięku. Sama nazwa przycisku nie potwierdza dostępności jego obsługi.

Przykłady błędów i poprawek

Wykres i przycisk z ikoną

Własna „Pracownia” pokazuje syntetyczne dane: poniedziałek — 4 dostawy, wtorek — 6, środa — 3. Oba warianty mają te same słupki, cyfry i podpisy. Rysunek CustomPainter nie tworzy automatycznie tekstowych węzłów dostępności. W poprawce pełny opis wykresu trafia do Semantics, a pod nim od razu widać trzy tekstowe wiersze. Przycisk z ikoną listy otrzymuje nazwę „Pokaż dane dostaw”.

Sam rysunek
Pracownia na iOS: dane 4, 6 i 3 są tylko w rysunku wykresu; pod nim brak tekstowego zestawienia.
W natywnym drzewie brakuje pełnego opisu wykresu i nazwy przycisku.
Pełna alternatywa
Ta sama Pracownia na iOS: pod wykresem widać Poniedziałek: 4, Wtorek: 6, Środa: 3.
Dane są od razu widoczne tekstem i dostępne w etykiecie wykresu; przycisk ma nazwę celu.

Surowe PNG końcowej demonstracji Flutter/Cupertino, iOS Simulator, 2026-10-02. Screenshoty pokazują tekst; niewidoczne etykiety potwierdzają osobne drzewa XCTest. To własny przykład, bez testu VoiceOver.

Element Wersja błędna w XCTest Wersja poprawiona w XCTest
Wykres Other, bez opisu danych Image, „Liczba dostaw: Poniedziałek: 4, Wtorek: 6, Środa: 3.”
Ikona listy Button, bez nazwy Button, „Pokaż dane dostaw”
Zestawienie Brak Widoczne trzy wiersze, bez osobnego powtórnego odczytu identycznych danych
Dekoracyjne punkty Pominięte Pominięte — prawidłowo w obu wersjach
Problem
Nagłówek Liczba dostaw nie przekazuje wartości wykresu, a sąsiedni tekst nie nazywa przycisku.
Skutek
Odbiorca bez widzenia nie może porównać dni ani rozpoznać działania ikony.
Poprawka
Udostępnij pełne pary dzień–liczba i nazwę właściwego przycisku. Nie dodawaj opisów dekoracyjnym punktom.

Przycisk ujawnia dodatkowe zdanie o danych. Reset chowa tylko to zdanie, zachowując tekstowe zestawienie poprawnej wersji. Pełna alternatywa istnieje już przed uruchomieniem przycisku. Pierwotne, identyczne wizualnie ujęcia z wcześniejszego kodu pozostają historyczne; pokazana para pochodzi z późniejszej poprawki.

Niepusta nazwa może nadal być niepełna

„Wykres”, „obraz” i nazwa pliku nie przekazują wartości 4/6/3. Przy większym wykresie krótka identyfikacja może prowadzić do dostępnej tabeli lub pełnego opisu, który zachowuje istotne relacje i wnioski. To przykład tekstowy, bez trzeciego uruchomionego wariantu. Usunięcie cyfr ze słupków nie definiuje tej usterki: również rysunek z widocznymi cyframi potrzebuje równoważnej informacji bez oglądania.

Kiedy obowiązuje i gdzie są wyjątki

Wymaganie obejmuje m.in. zdjęcia, wykresy, diagramy, obrazy tekstu, SVG, canvas i układy znaków takie jak ASCII art. Narysowane litery nie stają się tekstem dostępnym programowo. Alternatywa musi być programowo powiązana z treścią albo wskazana z powiązanego tekstu. Luźny opis na innej stronie nie wystarcza.

Rodzaj treści Co trzeba zapewnić
Kontrolka lub wprowadzanie danych Nazwę opisującą cel. Rola, wartość i obsługa mają dodatkowe wymagania.
Media zależne od czasu Co najmniej opisową identyfikację; dalsze alternatywy dobiera się według rodzaju mediów. Tytuł nie zastępuje napisów lub audiodeskrypcji.
Test lub ćwiczenie tracące sens po zastąpieniu tekstem Opisową identyfikację, np. testu rozpoznawania dźwięków. To szczególny warunek, bez zwolnienia wszystkich testów.
Doświadczenie przede wszystkim zmysłowe Co najmniej identyfikację opisową. Trudność odtworzenia doświadczenia dzieła nie uzasadnia całkowitego braku opisu.
CAPTCHA Opis celu i alternatywne formy wykorzystujące różne sposoby percepcji. Podanie rozwiązania w alt nie realizuje celu zadania.
Czysta dekoracja, formatowanie, treść nieprezentowana Implementację pozwalającą pominąć ją przez technologie asystujące.

Dekoracja nie przekazuje informacji ani nie pełni funkcji. Pusty opis informacyjnego wykresu nie czyni go dekoracją; logo identyfikujące firmę również nie jest nią automatycznie. Grafika powtarzająca pełną informację odpowiednio powiązanego tekstu nie wymaga ponownego odczytu tych samych danych. Techniki pomocnicze i interpretacja WCAG2ICT pomagają dobrać rozwiązanie, ale nie są jedyną drogą spełnienia wymagania.

Platformy

Źródłowy przegląd AI z 2026-10-02 stosuje WCAG 2.2 do WWW oraz WCAG2ICT do dokumentów i oprogramowania bez zmiany wymagania. Draft nie podaje daty wydania WCAG2ICT. Zastosowanie zależy od treści; nie ustala obowiązku prawnego ani nie potwierdza wykonania testu.

Środowisko Warunek i adaptacja Wykonanie źródłowe
WWW, także web w telefonie Grafiki, canvas, kontrolki i inne treści nietekstowe Przegląd interpretacji i technik; przykład WWW niewykonany
Mobilne Natywne API dostępności albo dostępny tekst wskazany z elementu Flutter na iOS i Androidzie; drzewa obu platform; interakcja natywna tylko iOS
Desktop Grafiki i kontrolki programu Bez uruchomienia
Dokumenty Powiązana alternatywa zachowana po eksporcie i w odbiorniku Bez eksportu/testu
Kiosk Alternatywa musi mieć odbiorcę przy zamkniętej funkcjonalności Bez konkretnego urządzenia; niewidoczna etykieta sama nie potwierdza dostępu

W hybrydzie oceń część natywną, WWW i przejście między nimi. Brak grafiki w jednym ekranie nie wyłącza platformy.

Rozwiązania w technologiach

Oficjalne API przejrzano 2026-10-02. Poniższe przykłady dotyczą prostego zestawienia 4/6/3 i działania otwarcia danych. Nazwa wynika z celu elementu, nie z wyglądu ikony. Teksty użytkowe wymagają lokalizacji w języku treści.

W HTML obraz informacyjny zwykle otrzymuje adekwatne alt, dekoracja alt="" bez tytułu, a natywny przycisk może czerpać nazwę z widocznego tekstu albo właściwej etykiety. Dla SVG/canvas trzeba sprawdzić nazwę oraz dostęp do pełnych danych; samo istnienie alt na innym elemencie nie wystarcza. W dokumentach potrzebne jest poprawne powiązanie alternatywy z ilustracją i zachowanie go po eksporcie; tag dekoracyjnego artefaktu nie służy do ukrycia istotnego wykresu. Status: przegląd interpretacji i technik, bez wykonania demonstracji tych formatów.

Flutter

Kontekst: wewnątrz drzewa widgetów; chartWidget jest rysunkiem zestawienia, showDetails jego akcją. Działający ekran korzysta z kodu aplikacji, platformowych przycisków i tych samych danych do renderowania oraz opisu.

import 'package:flutter/cupertino.dart';

Semantics(
  container: true,
  image: true,
  label: 'Liczba dostaw: Poniedziałek: 4, Wtorek: 6, Środa: 3.',
  child: ExcludeSemantics(child: chartWidget),
)
// Osobny element zapobiega scaleniu przycisku z sąsiednim tekstem.
Semantics(
  container: true,
  child: CupertinoButton(
    onPressed: showDetails,
    child: const Icon(
      CupertinoIcons.list_bullet,
      semanticLabel: 'Pokaż dane dostaw',
    ),
  ),
)
const ExcludeSemantics(child: Text('•  •  •'))

To trzy elementy do osadzenia np. w Column.children, nie samodzielny plik. Zewnętrzny opis wykresu pozostaje dostępny, mimo wyłączenia wewnętrznego rysunku. W Material aplikacja używa IconButton i Icon.semanticLabel. Status: działająca implementacja przechodzi analizę, testy widgetów i build iOS; nazwy i role sprawdzone w XCTest. Fragment jest skrótem tej implementacji, nie osobnym uruchomionym projektem.

iOS / SwiftUI

Kontekst: fragment wewnątrz body; zasób delivery-chart przedstawia 4/6/3, showDetails jest akcją aplikacji, divider wyłącznie dekoracją.

import SwiftUI

VStack {
    Image("delivery-chart")
        .accessibilityLabel("Liczba dostaw: Poniedziałek: 4, Wtorek: 6, Środa: 3.")
    Button(action: showDetails) {
        Image(systemName: "list.bullet")
    }
    .accessibilityLabel("Pokaż dane dostaw")
    Image("divider")
        .accessibilityHidden(true)
}

Opis dodajemy do właściwego obrazu, nazwę do kontrolki, a dekorację ukrywamy. Własny Canvas lub złożona grafika wymaga świadomego udostępnienia elementu dostępności i informacji, np. przez accessibilityElement(children: .ignore) z pełną etykietą. Status: przegląd dokumentacji; fragment niekompilowany i nieuruchamiany. Natywny test wspólnego Fluttera nie potwierdza tego kodu SwiftUI.

Android / Compose

Kontekst: fragment wewnątrz @Composable; chart, listIcon i decoration są dostarczonymi Painter, a showDetails jest rzeczywistą akcją. chart musi przedstawiać te same dane co opis.

import androidx.compose.foundation.Image
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton

Image(
    painter = chart,
    contentDescription = "Liczba dostaw: Poniedziałek: 4, Wtorek: 6, Środa: 3."
)
IconButton(onClick = showDetails) {
    Icon(painter = listIcon, contentDescription = "Pokaż dane dostaw")
}
Image(painter = decoration, contentDescription = null)

IconButton zapewnia semantykę działania i scala opis ikony. null jest właściwe dla tej dekoracji, nie dla istotnej grafiki. Dla własnego rysowania na Canvas trzeba udostępnić dane przez semantykę lub powiązany tekst. Status: przegląd dokumentacji; fragment niekompilowany i nieuruchamiany. Test widgetu Flutter/Material nie potwierdza Compose ani TalkBack.

React Native

Kontekst: fragment JSX w komponencie; zasoby znajdują się w projekcie aplikacji, a showDetails ujawnia dane. Obraz list.png pełni tylko wizualną rolę wewnątrz już nazwanego przycisku.

import { Image, Pressable } from 'react-native';

<>
  <Image
    source={require('./delivery-chart.png')}
    accessible={true}
    accessibilityLabel="Liczba dostaw: Poniedziałek: 4, Wtorek: 6, Środa: 3."
  />
  <Pressable
    onPress={showDetails}
    accessible={true}
    accessibilityRole="button"
    accessibilityLabel="Pokaż dane dostaw"
  >
    <Image
      source={require('./list.png')}
      accessible={false}
      accessibilityElementsHidden={true}
      importantForAccessibility="no-hide-descendants"
    />
  </Pressable>
  <Image
    source={require('./divider.png')}
    accessible={false}
    accessibilityElementsHidden={true}
    importantForAccessibility="no-hide-descendants"
  />
</>;

accessibilityElementsHidden dotyczy iOS, importantForAccessibility Androida; ustawiamy je wyłącznie na dekoracyjnych obrazach, nie na interaktywnym rodzicu. Samo accessible={false} nie jest uniwersalnym zamiennikiem ukrycia całego poddrzewa. Status: przegląd dokumentacji; fragment niekompilowany i nieuruchamiany. Nie podajemy wersji frameworków, których nie użyliśmy.

Jak sprawdzić

  1. Ustal cel każdej grafiki: informacja, funkcja, dekoracja lub szczególny rodzaj treści. Zbadaj właściwy stan i build.
  2. Porównaj alternatywę z całymi danymi i celem. Dla wykresu sprawdź wszystkie trzy pary dzień–liczba; ogólna nazwa nie wystarcza.
  3. Odczytaj nazwę właściwego przycisku. W obu wersjach jest rolą przycisku, lecz tylko poprawiona ma nazwę celu.
  4. Uruchom dane, sprawdź reset i zmianę wariantu. Pełny opis ma być dostępny przed akcją, a reset nie może usuwać podstawowej alternatywy.
  5. Potwierdź pominięcie dekoracji. Brak węzła wykresu niosącego informację wymaga innej oceny niż brak dekoracyjnych punktów.
  6. Osobno sprawdź właściwy czytnik: odczyt wykresu, identyfikację i uruchomienie przycisku oraz pomijanie dekoracji. Zapisz rzeczywiste wypowiedzi. Ten etap nie został wykonany w źródle.

Weryfikacja i ograniczenia

Źródłowe sprawdzenie, 2026-10-02 Wynik i zakres
Wymaganie, wyjątki, interpretacja i API Przegląd AI, bez zatwierdzenia człowieka
Flutter Analiza PASS; 8 testów PASS, w tym semantyka, dane i reset obu wyglądów
iOS Build i XCTest PASS; nazwy/role, otwarcie danych, reset i zmiana wariantu
Android Build, uruchomienie i XML UI Automator PASS dla obu stanów; bez natywnego dotknięcia/resetu
Media Cztery końcowe PNG i drzewa porównane przez AI; tu wybrano parę iOS
VoiceOver / TalkBack / człowiek Niewykonane

Sam skaner węzłów Image może pominąć canvas, którego nie ma w drzewie. Do oceny celu potrzebne są obraz i kontekst; OCR i AI mogą pomylić dane albo znaczenie dekoracji. Istnienie niepustego opisu nie rozstrzyga równoważności, fokusu, ukrycia przez rodzica ani odczytu przez czytnik. Brak danych daje niepewność. Test znanych oczekiwań demonstracji nie mierzy skuteczności niezależnego walidatora; nazwy wariantów i odpowiedzi referencyjne powinny być poza jego wejściem.

Jak sprawdza Clearship

Bieżący katalog z 2026-10-07 określa ocenę częściową. Reguła wskazuje kontrolkę bez widocznego tekstu i nazwy oraz opis obrazu lub kontrolki będący ogólnym słowem albo nazwą pliku. Grafika bez nazwy wymaga oceny celu z obrazu i drzewa: AI może wskazać informację lub funkcję niedostępną w tekście; dekoracja i duplikat nie są automatycznie usterką. Audyty platformowe dostarczają też kandydatów.

Równoważność niepustego opisu, grafiki bez węzła, ekspozycja dekoracji, CAPTCHA, media i wyjątki wymagają dalszej oceny. Pomiar wykonawców dotyczy Androida; iOS ma w katalogu brak pomiaru. Wynik drzewa nie potwierdza działania czytnika, a brak kandydata nie wyklucza nieopisanej grafiki.

Powiązane kryteria