Οδική πινακίδα με βέλος που δείχνει προς τα αριστερά, συμβολίζοντας κατεύθυνση ή επιλογή.

Περιγραφή εικόνας: Οδική πινακίδα με βέλος που δείχνει προς τα αριστερά, συμβολίζοντας κατεύθυνση ή επιλογή.

Κατανοητά μηνύματα σφάλματος

Μηχανική προσβασιμότητας

Κατανοητά μηνύματα σφάλματος: Ο πλήρης οδηγός

Κάθε πεδίο φόρμας που δημιουργείτε, κάθε διαδικασία επικύρωσης που ενεργοποιείτε, κάθε κατάσταση αποτυχίας που εμφανίζετε — αυτές είναι στιγμές κατά τις οποίες τα ψηφιακά προϊόντα είτε συμπεριλαμβάνουν είτε αποκλείουν εκατομμύρια ανθρώπους. Δείτε πώς μπορείτε να τα κάνετε όλα σωστά.

Διάρκεια ανάγνωσης: 18 λεπτά WCAG 2.2 AA Συντακτική ομάδα AIOPSGROUP

Το κρυφό κόστος των άχρηστων σφαλμάτων

Σίγουρα το έχετε δει: μια φόρμα που σας εμφανίζει το μήνυμα «Μη έγκυρη εισαγωγή» αφού έχετε πληκτρολογήσει προσεκτικά τον αριθμό τηλεφώνου σας. Μια διαδικασία ολοκλήρωσης αγοράς που επισημαίνει ένα πεδίο με κόκκινο χρώμα χωρίς να δίνει καμία εξήγηση. Ένα μήνυμα σφάλματος που χρησιμοποιεί αινιγματικούς κωδικούς που καταλαβαίνει μόνο ο προγραμματιστής που το έγραψε στις 11 το βράδυ μιας Παρασκευής.

Δεν πρόκειται για ασήμαντα προβλήματα εμπειρίας χρήστη. Για τα 1,3 δισεκατομμύρια άτομα παγκοσμίως που ζουν με κάποια μορφή αναπηρίας, τα κακώς σχεδιασμένα μηνύματα σφάλματος μπορούν να καταστήσουν ένα ψηφιακό προϊόν εντελώς άχρηστο. Για τους χρήστες προγραμμάτων ανάγνωσης οθόνης, ένα μήνυμα σφάλματος που αλλάζει μόνο χρώμα είναι αόρατο. Για τους χρήστες με γνωστικές αναπηρίες, μια ασαφής φράση μίας γραμμής όπως «Κάτι πήγε στραβά» είναι παραλυτική. Για κάποιον που βασίζεται στον φωνητικό έλεγχο, ένα σφάλμα φόρμας που κλέβει το εστιακό σημείο απρόβλεπτα διακόπτει ολόκληρη τη ροή εργασίας.

95,9% των δοκιμών αρχικής σελίδας αποτυγχάνουν σε τουλάχιστον ένα κριτήριο WCAG (WebAIM 2024)
1 στους 4 ενήλικες στις ΗΠΑ ζουν με αναπηρία που επηρεάζει την πρόσβασή τους στον ψηφιακό κόσμο
Πάνω από 13 δισεκατομμύρια δολάρια χάνουν ετησίως παγκοσμίως λόγω μη προσβάσιμων ιστότοπων (Web Standards Commission)

Τα προσβάσιμα μηνύματα σφάλματος δεν συνίστανται απλώς στην προσθήκη χαρακτηριστικών ARIA ως μετά το γεγονός. Απαιτούν προσεκτική διατύπωση, κατάλληλη δομή DOM, οπτικά και μη οπτικά σήματα, καθώς και βαθύ σεβασμό για την ποικιλομορφία των χρηστών σας. Ο παρών οδηγός αναλύει κάθε πτυχή της σωστής υλοποίησής τους — από τα κριτήρια WCAG και τις αρχές σύνταξης κειμένων έως τα πρότυπα κώδικα.

Πεδίο εφαρμογής του παρόντος άρθρου

Εστιάζουμε στα σφάλματα επικύρωσης από την πλευρά του χρήστη και από την πλευρά του διακομιστή στις διαδικτυακές διεπαφές, αν και οι περισσότερες αρχές ισχύουν εξίσου για τις εγγενείς εφαρμογές για κινητά, τα τερματικά κιόσκι και τις φωνητικές διεπαφές. Οι αναφορές αφορούν το πρότυπο WCAG 2.2 AA, εκτός αν αναφέρεται διαφορετικά.


Τι απαιτεί στην πραγματικότητα το πρότυπο

Το WCAG 2.2, που δημοσιεύθηκε τον Οκτώβριο του 2023, αποτελεί το τρέχον πρότυπο για την προσβασιμότητα στον Ιστό και το σημείο αναφοράς για τα περισσότερα νομικά πλαίσια — συμπεριλαμβανομένης της Οδηγίας της ΕΕ για την Προσβασιμότητα στον Ιστό, του Νόμου περί Ισότητας του Ηνωμένου Βασιλείου και του ADA των ΗΠΑ. Αρκετά κριτήρια επιτυχίας ισχύουν άμεσα για τα μηνύματα σφάλματος. Είναι απαραίτητο να κατανοήσετε πλήρως το γράμμα του κάθε κριτηρίου προτού μπορέσετε να προχωρήσετε πέρα από αυτά.

Κριτήρια επιτυχίας WCAG 2.2 που αφορούν τα μηνύματα σφάλματος
Κριτήριο Επίπεδο Τι απαιτείται Για μηνύματα σφάλματος
1.3.1 Πληροφορίες και σχέσεις Α Να αποδίδετε τη δομή και τις σχέσεις μέσω της σημασιολογίας, όχι μόνο μέσω της εμφάνισης. Η ένδειξη κατάστασης σφάλματος μόνο μέσω χρώματος δεν είναι αποτελεσματική. Η σχέση μεταξύ ενός πεδίου και του σφάλματός του πρέπει να μπορεί να προσδιοριστεί μέσω προγραμματισμού — χρησιμοποιήστε <label>, aria-invalid="true", και aria-describedby για να αντιστοιχίσετε το κείμενο του σφάλματος με την εισαγωγή.
1.4.1 Χρήση χρωμάτων Α Μην χρησιμοποιείτε το χρώμα ως το μοναδικό οπτικό μέσο για τη μετάδοση πληροφοριών. Τα κόκκινα περιγράμματα από μόνα τους δεν αρκούν. Προσθέστε ένα εικονίδιο, μια ετικέτα κειμένου ή ένα μοτίβο.
1.4.3 Αντίθεση (ελάχιστη) ΑΑ Το κείμενο πρέπει να έχει αναλογία αντίθεσης τουλάχιστον 4,5:1 (3:1 για μεγάλο κείμενο). Το κείμενο σφάλματος σε ανοιχτό κόκκινο (#f87171) πάνω σε λευκό φόντο επιτυγχάνει αναλογία μόνο ~2,93:1 — πολύ κάτω από την απαιτούμενη αναλογία 4,5:1. Χρησιμοποιήστε πιο σκούρες αποχρώσεις: το #b91c1c πάνω σε λευκό φόντο δίνει αναλογία ~7,1:1 και πληροί άνετα τις προδιαγραφές.
2.4.3 Σειρά εστίασης Α Η σειρά προτεραιότητας πρέπει να διατηρεί το νόημα και τη λειτουργικότητα. Η κακή διαχείριση της εστίασης μετά από μια αποτυχημένη υποβολή μπορεί να διαταράξει τη λογική ακολουθία (π.χ. η εστίαση να μετακινηθεί μετά το σφάλμα, καθιστώντας το απρόσιτο). Η μετακίνηση της εστίασης σε μια σύνοψη σφαλμάτων σε περίπτωση αποτυχίας της υποβολής αποτελεί μια συνιστώμενη τεχνική — που εξυπηρετεί κυρίως τις απαιτήσεις SC 3.3.1 και 3.3.2 — η οποία διατηρεί επίσης τη συνοχή της σειράς εστίασης σύμφωνα με την απαίτηση 2.4.3.
3.3.1 Εντοπισμός σφαλμάτων Α Εάν εντοπιστεί σφάλμα εισαγωγής, το στοιχείο επισημαίνεται και το σφάλμα περιγράφεται με κείμενο. Το σφάλμα πρέπει να περιγράφεται με κείμενο — και όχι μόνο να υποδεικνύεται οπτικά.
3.3.2 Ετικέτες ή οδηγίες Α Παρέχετε ετικέτες ή οδηγίες όταν το περιεχόμενο απαιτεί εισαγωγή δεδομένων από τον χρήστη. Οι υποδείξεις μορφοποίησης (π.χ. «ΗΗ/ΜΜ/ΕΕΕΕ») πρέπει να αναγράφονται πριν από την υποβολή, και όχι μόνο όταν εμφανίζεται σφάλμα.
3.3.3 Πρόταση για σφάλμα ΑΑ Εάν εντοπιστεί κάποιο σφάλμα και υπάρχουν γνωστές προτάσεις, παρακαλώ να τις υποβάλετε. Το «Μη έγκυρη ημερομηνία» δεν αρκεί. Το «Εισάγετε μια ημερομηνία με τη μορφή ΗΗ/ΜΜ/ΕΕΕΕ, π.χ. 23/03/2026» είναι σωστό.
3.3.4 Πρόληψη σφαλμάτων ΑΑ Για υποβολές νομικού, οικονομικού ή δεδομένων χαρακτήρα, πραγματοποιήστε έλεγχο, επιβεβαίωση ή ακύρωση. Δώστε τη δυνατότητα στους χρήστες να ελέγξουν και να διορθώσουν το κείμενο πριν από την τελική υποβολή.
4.1.3 Μηνύματα κατάστασης ΑΑ Τα μηνύματα κατάστασης μπορούν να προσδιοριστούν μέσω προγραμματισμού με βάση τον ρόλο ή την ιδιότητα, χωρίς να λαμβάνουν το εστιακό σημείο. Χρήση role="alert", role="status", ή aria-live έτσι ώστε οι χρήστες του AT να λάβουν το μήνυμα.

Τι κάνει ένα μήνυμα σφάλματος να είναι καλό

Ένα σωστά δομημένο μήνυμα σφάλματος περιλαμβάνει τέσσερα στοιχεία που είναι απαραίτητα. Κάθε ένα εξυπηρετεί έναν ξεχωριστό σκοπό — αν αφαιρέσετε έστω και ένα από αυτά, υποβαθμίζετε την εμπειρία για ένα μέρος των χρηστών σας.

Μήνυμα σφάλματος με σχολιασμό
Εικονίδιο σφάλματος (οπτική επαναληψιμότητα) Ένα εικονίδιο δίπλα στο κόκκινο περίγραμμα εξασφαλίζει ότι το σφάλμα είναι αντιληπτό χωρίς να βασίζεται αποκλειστικά στο χρώμα. Πληροί την απαίτηση 1.4.1. Το εικονίδιο πρέπει να είναι aria-hidden εάν το κείμενο μεταφέρει ήδη το νόημα.
Πλαίσιο σφάλματος στο πεδίο Το κόκκινο περίγραμμα (≥2px) συνδέει οπτικά το μήνυμα με το πεδίο εισαγωγής. Σε συνδυασμό με το aria-invalid=”true” στο πεδίο εισαγωγής, αυτό ικανοποιεί την απαίτηση 1.3.1.
Περιγραφικό κείμενο σφάλματος (απλή γλώσσα) Το μήνυμα εξηγεί τι δεν πάει καλά και πώς να το διορθώσετε. «Εισάγετε μια πλήρη διεύθυνση email» + «για παράδειγμα, [email protected]» πληροί τις απαιτήσεις των 3.3.1 και 3.3.3.
Προγραμματιστική αντιστοίχιση (aria-describedby) Το aria-describedby συνδέει το κείμενο σφάλματος με το πεδίο. Όταν ένας χρήστης προγράμματος ανάγνωσης οθόνης εστιάζει στην εισαγωγή, ακούει την ετικέτα + την περιγραφή σφάλματος. Απαιτείται για τις προδιαγραφές 1.3.1 και 4.1.3.

Το πλαίσιο της γλώσσας: Έξι κανόνες για τη σύνταξη κειμένων με λάθη

Τα μηνύματα σφάλματος αποτελούν μια μορφή κειμένου UX. Δεν είναι καταχωρήσεις καταγραφής. Δεν είναι σημειώσεις προγραμματιστών. Είναι επικοινωνία μεταξύ ανθρώπων σε κατάσταση πίεσης — γραμμένη για κάποιον που μόλις απέτυχε σε κάτι και πρέπει να πετύχει.

🎯

1. Να είστε συγκεκριμένοι

Εξηγήστε στον χρήστη ακριβώς ποιο είναι το πρόβλημα. Η ένδειξη «Μη έγκυρο» δεν του λέει τίποτα. Η ένδειξη «Ο κωδικός πρόσβασης πρέπει να έχει τουλάχιστον 8 χαρακτήρες» του λέει τα πάντα.

🔧

2. Να είναι εφαρμόσιμο

Το μήνυμα θα πρέπει να υπονοεί ή να αναφέρει ρητά τον τρόπο διόρθωσης του σφάλματος. Συμπεριλάβετε παραδείγματα μορφοποίησης, όταν η σωστή μορφοποίηση δεν είναι προφανής.

🚫

3. Αποφύγετε τις κατηγορίες

Μην λέτε ποτέ «εισάγατε», «η εισαγωγή σας» ή «αποτύχατε». Προτιμήστε παθητικές κατασκευές: «Η διεύθυνση email που εισήχθη είναι ελλιπής.»

🧩

4. Χρησιμοποιήστε απλή γλώσσα

Γράψτε σε επίπεδο ανάγνωσης περίπου 11 ετών. Αποφύγετε την ορολογία, τους τεχνικούς κωδικούς και τις παθητικο-επιθετικές φράσεις όπως «παρακαλώ δοκιμάστε ξανά».

5. Προγραμματίστε το σωστά

Εμφάνιση σφαλμάτων εντός του πεδίου κατά την απομάκρυνση του δείκτη (όταν ο χρήστης απομακρύνει τον δείκτη από το πεδίο), όχι σε κάθε πάτημα πλήκτρου. Εμφάνιση συνοπτικών σφαλμάτων μόνο μετά από απόπειρα υποβολής.

🌐

6. Λάβετε υπόψη το πλαίσιο

Ένα σφάλμα στη φόρμα πληρωμής απαιτεί περισσότερη καθησύχαση από ένα φίλτρο αναζήτησης. Προσαρμόστε τον τόνο και το επίπεδο λεπτομέρειας ανάλογα με τη σημασία της εργασίας.


Πραγματικά μηνύματα σφάλματος: Πριν & Μετά

Η διαφορά μεταξύ ενός μη προσβάσιμου και ενός προσβάσιμου μηνύματος σφάλματος συχνά έγκειται σε λίγες μόνο λέξεις και δύο χαρακτηριστικά. Αυτές οι συγκρίσεις δείχνουν ακριβώς τι αλλάζει — και γιατί κάθε αλλαγή έχει σημασία.

Έλεγχος εγκυρότητας υποχρεωτικών πεδίων

✕ Μη προσβάσιμο
Αυτό το πεδίο είναι υποχρεωτικό.

Προβλήματα: Δεν αναγνωρίζεται το οποίο πεδίο. Δεν εκτελεί καμία ενέργεια. Συχνά εμφανίζεται μόνο με αλλαγή χρώματος (δεν πληροί την απαίτηση 1.4.1). Όχι role="alert" αυτό σημαίνει ότι τα προγράμματα ανάγνωσης οθόνης δεν θα το αναγγείλουν.

✓ Προσβάσιμο
Εισάγετε την ημερομηνία γέννησής σας. Αυτό το πεδίο είναι υποχρεωτικό για την επιβεβαίωση της επιλεξιμότητάς σας.

Γιατί λειτουργεί: Ονομάζει το πεδίο. Εξηγεί γιατί είναι απαραίτητο. Συνδέεται με το πεδίο εισαγωγής μέσω aria-describedby. Αναλογία αντίθεσης κειμένου ≥ 4,5:1. Τα προγράμματα ανάγνωσης οθόνης το ανακοινώνουν κατά την υποβολή μέσω role="alert".

Έλεγχος μορφής (ημερομηνία)

✕ Μη προσβάσιμο
Μη έγκυρη μορφή ημερομηνίας.

Προβλήματα: Ο χρήστης δεν γνωρίζει ποια μορφή απαιτείται. Τους ενημερώνει για το λάθος, αλλά όχι για τον τρόπο διόρθωσής του. Δεν πληροί την απαίτηση 3.3.3 (Προτάσεις για τη διόρθωση σφαλμάτων). Δεν παρέχεται παράδειγμα.

✓ Προσβάσιμο
Εισάγετε την ημερομηνία με τη μορφή ΗΗ/ΜΜ/ΕΕΕΕ. Για παράδειγμα: 23/03/2026

Γιατί είναι αποτελεσματικό: Καθορίζει την απαιτούμενη μορφή. Παρέχει ένα συγκεκριμένο παράδειγμα (πληροί την απαίτηση 3.3.3). Είναι συνοπτικό και σαφές. Θα αναγγέλλεται αμέσως από τα προγράμματα ανάγνωσης οθόνης όταν ο δείκτης εγκαταλείψει το πεδίο.

Επαλήθευση κωδικού πρόσβασης

✕ Μη προσβάσιμο
Ο κωδικός πρόσβασης είναι πολύ αδύναμος.

Προβλήματα: Ο όρος «αδύναμος» είναι υποκειμενικός και δεν προσφέρει συγκεκριμένη λύση. Συνήθως εμφανίζεται με μια κόκκινη μπάρα έντασης — κάτι που αποτελεί ανατροφοδότηση μόνο μέσω χρώματος (δεν πληροί την απαίτηση 1.4.1). Δεν υπάρχει σχέση μεταξύ της κατάστασης της μπάρας και της εξόδου του AT.

✓ Προσβάσιμο
Ο κωδικός πρόσβασης πρέπει να αποτελείται από τουλάχιστον 8 χαρακτήρες και να περιλαμβάνει ένα κεφαλαίο γράμμα και έναν αριθμό.

Γιατί είναι αποτελεσματικό: Παραθέτει κάθε απαίτηση. Οι χρήστες μπορούν να εξετάσουν και να αντιμετωπίσουν κάθε κενό. Ο δείκτης ισχύος συμπληρώνει αυτό το κείμενο και χρησιμοποιεί τόσο χρώμα όσο και επιγραφή («Αδύναμο / Ισχυρό»). Καμία πληροφορία δεν μεταφέρεται μόνο μέσω του χρώματος.

Σφάλμα διακομιστή / συστήματος

✕ Μη προσβάσιμο
Σφάλμα 500. Προέκυψε κάποιο πρόβλημα.

Προβλήματα: Ο τεχνικός κώδικας δεν έχει νόημα για τους περισσότερους χρήστες. Η ένδειξη «Κάτι πήγε στραβά» δεν προσφέρει καμία οδηγία για το τι πρέπει να κάνουν. Εισάγεται στο DOM χωρίς ζωντανή περιοχή — δεν παρέχει πληροφορίες για τα προγράμματα ανάγνωσης οθόνης. Δεν παρέχεται καμία πρόταση για την επίλυση του προβλήματος.

✓ Προσβάσιμο
Δεν καταφέραμε να αποθηκεύσουμε τις αλλαγές σας. Παρακαλώ δοκιμάστε ξανά ή επικοινωνήστε με την υποστήριξη αν το πρόβλημα παραμένει.

Γιατί λειτουργεί: Ανθρώπινη γλώσσα. Επιβεβαιώνει τι απέτυχε. Προτείνει δύο σαφείς τρόπους αποκατάστασης. Εισάγεται σε ένα aria-live="assertive" περιοχή, ώστε τα προγράμματα ανάγνωσης οθόνης να την αναγγέλλουν αμέσως. Το εστιακό σημείο μετακινήθηκε στο μήνυμα.

Το καλύτερο μήνυμα σφάλματος είναι αυτό που αποτρέπει εξαρχής την εμφάνιση του σφάλματος. Το δεύτερο καλύτερο μήνυμα σφάλματος είναι αυτό που καθιστά την αποκατάσταση του προβλήματος απολύτως προφανή.


Τύποι σφαλμάτων και πότε να τα χρησιμοποιείτε

Διαφορετικά σενάρια σφαλμάτων απαιτούν διαφορετικούς τρόπους αλληλεπίδρασης. Η επιλογή λανθασμένου πλαισίου ή μηχανισμού ειδοποίησης αποτελεί ένα από τα πιο συνηθισμένα προβλήματα προσβασιμότητας στις φόρμες.

Σύγκριση προτύπων σφαλμάτων
Μοτίβο Ιδανικό για Εφαρμογή του ARIA Συμπεριφορά εστίασης Απαιτείται
Σφάλμα πεδίου ενσωματωμένου πεδίου Άμεση επικύρωση σε επίπεδο πεδίου (κατά την απώλεια εστίασης) aria-invalid="true" + aria-describedby Δεν υπάρχει μετακίνηση εστίασης. Ακούγεται σφάλμα κατά την επόμενη εστίαση. Απαιτείται
Πλαίσιο σύνοψης σφαλμάτων Σφάλματα κατά την υποβολή φορμών πολλαπλών πεδίων role="alert" ή aria-live="assertive" Κατά την υποβολή, μετακινήστε την εστίαση στην επικεφαλίδα της περίληψης. Απαιτείται για φόρμες με περισσότερα από 3 πεδία
Ειδοποίηση για τοστ / σνακ μπαρ Σφάλματα που δεν σχετίζονται με τη φόρμα (αποτυχία αποθήκευσης, πρόβλημα δικτύου) role="alert" ή aria-live="assertive" ΜΗΝ μετακινήσετε την εστίαση. Αυτόματη απόρριψη μετά από ≥5 δευτερόλεπτα (ή ποτέ). Συνιστάται
Σφάλμα διαλόγου τύπου modal Επιβεβαίωση καταστροφικής ενέργειας, κρίσιμα σφάλματα role="dialog" + aria-modal="true" + aria-labelledby Μετακίνηση της εστίασης στο πρώτο διαδραστικό στοιχείο μέσα στο παράθυρο διαλόγου. Για κρίσιμα/μη αναστρέψιμα σφάλματα
Περιοχή ειδοποιήσεων σε επίπεδο σελίδας Εμφανίστηκαν σφάλματα διακομιστή μετά την επαναφόρτωση της σελίδας role="alert" at top of <main> Θα πρέπει να είναι το πρώτο στοιχείο στο οποίο μπορεί να γίνει εστίαση μετά τον σύνδεσμο παράκαμψης. Απαιτείται εάν υπάρχει κατά τη φόρτωση
Ευγενικό μήνυμα κατάστασης Σχόλια χαμηλής προτεραιότητας (αυτόματη αποθήκευση, παράλειψη προαιρετικού πεδίου) aria-live="polite" + role="status" Δεν υπάρχει μετακίνηση της εστίασης. Θα ανακοινωθεί μετά την ολοκλήρωση της τρέχουσας ομιλίας. Προαιρετικό / εξαρτάται από το πλαίσιο

Η προσέγγιση δύο επιπέδων για φόρμες πολλαπλών πεδίων

Για φόρμες με τρία ή περισσότερα πεδία, ένα μόνο πρότυπο δεν αρκεί. Τόσο η Υπηρεσία Ψηφιακών Υπηρεσιών της Κυβέρνησης (GDS) όσο και ο Οδηγός Πρακτικών Σύνταξης ARIA συνιστούν ένα σύστημα δύο επιπέδων: μια σύνοψη σφαλμάτων στο πάνω μέρος της φόρμας, καθώς και ενσωματωμένα μηνύματα σφάλματος δίπλα σε κάθε σχετικό πεδίο.

Σχέδιο διπλής στρώσης: Πώς λειτουργεί

Σε περίπτωση υποβολής με σφάλματα: (1) Εμφανίστε ένα πλαίσιο σύνοψης σφαλμάτων στο πάνω μέρος της φόρμας με τίτλο όπως «Υπάρχουν 3 σφάλματα. Διορθώστε τα για να συνεχίσετε» και συνδέσμους προς κάθε πεδίο που περιέχει σφάλμα. (2) Μετακινήστε την εστίαση του πληκτρολογίου στον τίτλο αυτής της σύνοψης. (3) Κάθε σύνδεσμος στη σύνοψη μεταφέρει τον χρήστη στο αντίστοιχο πεδίο. (4) Κάθε πεδίο εμφανίζει το δικό του ενσωματωμένο μήνυμα σφάλματος, το οποίο συνδέεται μέσω aria-describedby. Οι χρήστες προγραμμάτων ανάγνωσης οθόνης ακούν και τα δύο επίπεδα· οι χρήστες με όραση βλέπουν και τα δύο επίπεδα. Κανείς δεν μένει πίσω.


Μοτίβα κώδικα που λειτουργούν

Η κατανόηση της θεωρίας είναι το μισό της δουλειάς. Παρακάτω παρατίθενται πρότυπα έτοιμα για χρήση σε παραγωγικό περιβάλλον για τα πιο συνηθισμένα σενάρια, με σχολιασμό σχετικά με τα κριτήρια WCAG που πληροί κάθε χαρακτηριστικό.

Ενσωματωμένος έλεγχος εγκυρότητας πεδίου

HTML
<!-- The label is always present and always linked -->
<div class="field-group">
  <label for="email">
    Email address
    <span class="required-indicator" aria-label="required"> *</span>
  </label>

  <input
    type="email"
    id="email"
    name="email"
    autocomplete="email"
    aria-required="true"
    aria-invalid="true"     <!-- set when invalid -->
    aria-describedby="email-hint email-error"
  />

  <!-- Hint text always shown (WCAG 3.3.2) -->
  <p id="email-hint" class="field-hint">
    We'll send your confirmation here.
  </p>

  <!-- Error message (shown only on error) -->
  <p
    id="email-error"
    class="field-error"
    role="alert"
    aria-live="assertive"
  >
    <!-- inject error text here -->
    Enter a complete email address — for example, [email protected]
  </p>
</div>

Σύνοψη σφαλμάτων (φόρμες πολλαπλών πεδίων)

HTML
<!-- Inject this above the form on submission, then focus #error-summary -->
<div
  id="error-summary"
  role="alert"
  aria-labelledby="error-summary-title"
  tabindex="-1"   <!-- allows programmatic focus -->
  class="error-summary"
>
  <h2 id="error-summary-title">
    There are 2 errors. Fix these to continue.
  </h2>
  <ul>
    <li><a href="#email">Email address: enter a complete email</a></li>
    <li><a href="#dob">Date of birth: use DD/MM/YYYY format</a></li>
  </ul>
</div>

<!-- JavaScript: move focus to summary after injection -->
<script>
  const summary = document.getElementById('error-summary');
  summary.focus(); // fires after DOM update
</script>

Σφάλματα δυναμικού περιεχομένου / AJAX (χωρίς ανανέωση της σελίδας)

Όταν τα σφάλματα επιστρέφονται ασύγχρονα — για παράδειγμα, από μια κλήση API — δεν μπορείτε να βασιστείτε στη φόρτωση της σελίδας για να τα εμφανίσετε. Το πρότυπο «ζωντανής περιοχής» (live region) του ARIA είναι απαραίτητο σε αυτή την περίπτωση.

JS
// Set up the live region once on page load (empty, hidden)
// <div id="live-error" role="alert" aria-live="assertive" aria-atomic="true"></div>

async function submitForm(data) {
  try {
    const res = await fetch('/api/save', { method: 'POST', body: data });
    if (!res.ok) throw new Error(await res.text());
    announceStatus('Your changes have been saved.', 'polite');
  } catch (err) {
    announceStatus(
      'We couldn\'t save your changes. Try again or contact support.',
      'assertive'
    );
  }
}

function announceStatus(message, urgency = 'polite') {
  const region = document.getElementById('live-error');
  region.setAttribute('aria-live', urgency);
  // Clear first to re-trigger announcement if same message
  region.textContent = '';
  requestAnimationFrame(() => {
    region.textContent = message;
  });
}
Το κόλπο «άδειασέ το και μετά γέμισέ το»

Τα προγράμματα ανάγνωσης οθόνης αναγγέλλουν μόνο το περιεχόμενο που αλλαγές σε μια ενεργή περιοχή. Αν εισαγάγετε το ίδιο μήνυμα σφάλματος δύο φορές στη σειρά, ορισμένα AT δεν θα το ανακοινώσουν ξανά. Η λύση: καθαρίστε την περιοχή ώστε να περιέχει κενή συμβολοσειρά και, στη συνέχεια, συμπληρώστε την με ένα requestAnimationFrame επιστροφή κλήσης. Αυτό επιβάλλει την αλλαγή στο DOM που παρακολουθεί το AT.


Ο κατάλογος ελέγχου για τον έλεγχο προσβασιμότητας

Χρησιμοποιήστε αυτή τη λίστα ελέγχου κατά τη διάρκεια της αναθεώρησης του σχεδιασμού, της αναθεώρησης του κώδικα και του ελέγχου ποιότητας. Καλύπτει όλα τα κριτήρια επιπέδου Α και επιπέδου ΑΑ των WCAG 2.2 που σχετίζονται με τις καταστάσεις σφάλματος.

Οπτική παρουσίαση & περιεχόμενο

Οπτική παρουσίαση & περιεχόμενο
  • Το σφάλμα κοινοποιείται μέσω κειμένου και όχι μόνο με χρώμα (WCAG 1.4.1)
  • Το κείμενο του σφάλματος έχει αναλογία αντίθεσης ≥ 4,5:1 σε σχέση με το φόντο του (WCAG 1.4.3)
  • Μια εικόνα ή ένας οπτικός δείκτης συμπληρώνει την αλλαγή χρώματος
  • Το μήνυμα σφάλματος αναφέρει το πεδίο ή βρίσκεται ακριβώς δίπλα του
  • Το μήνυμα σφάλματος εξηγεί τι ακριβώς συμβαίνει (και όχι απλώς «μη έγκυρο»)
  • Το μήνυμα σφάλματος περιλαμβάνει οδηγίες για την επίλυση του σφάλματος (WCAG 3.3.3)
  • Παρέχονται παραδείγματα μορφοποίησης για πεδία όπως ημερομηνία, αριθμός τηλεφώνου, ταχυδρομικός κώδικας και άλλα παρόμοια πεδία
  • Η γλώσσα είναι απλή, μη τεχνική και δεν αποδίδει ευθύνες
  • Το μήνυμα σφάλματος δεν εξαφανίζεται μέχρι να επιλυθεί το σφάλμα
  • Οι υποδείξεις μορφοποίησης (π.χ. «ΗΗ/ΜΜ/ΕΕΕΕ») εμφανίζονται πριν από την υποβολή, όχι μόνο όταν υπάρχει σφάλμα

Προγραμματισμός & AT

Προγραμματισμός και τεχνολογία υποβοήθησης
  • aria-invalid="true" έχει οριστεί στην εσφαλμένη τιμή εισόδου
  • Το στοιχείο του μηνύματος σφάλματος συνδέεται μέσω aria-describedby στην είσοδο
  • Χρήσεις του δοχείου σφαλμάτων role="alert" ή aria-live="assertive"
  • Η περιοχή σφαλμάτων δεν είναι κενή στο DOM πριν εμφανιστούν σφάλματα (προ-συμπληρωμένος κενός περιέκτης)
  • Η σύνοψη σφαλμάτων εμφανίζεται και επισημαίνεται προγραμματικά σε περίπτωση αποτυχίας υποβολής της φόρμας
  • Οι σύνδεσμοι της σύνοψης σφαλμάτων οδηγούν στο αντίστοιχο πεδίο της φόρμας
  • Οι δοκιμές με προγράμματα ανάγνωσης οθόνης ολοκληρώθηκαν με επιτυχία στα περιβάλλοντα NVDA/Firefox και VoiceOver/Safari
  • Ο τίτλος της σελίδας ενημερώνεται ώστε να αντικατοπτρίζει την κατάσταση σφάλματος κατά την υποβολή φορμών πλήρους σελίδας
  • Χρήση μηνυμάτων κατάστασης role="status" με aria-live="polite" για μη κρίσιμα σχόλια

Εστίαση & πληκτρολόγιο

Διαχείριση εστίασης & πληκτρολόγιο
  • Μετά από αποτυχημένη υποβολή, η εστίαση μεταφέρεται στη σύνοψη σφαλμάτων (ή στο πεδίο του πρώτου σφάλματος)
  • Ο δείκτης εστίασης είναι ευδιάκριτος σε όλα τα διαδραστικά στοιχεία που βρίσκονται σε κατάσταση σφάλματος (WCAG 2.4.11)
  • Τα παράθυρα διαλόγου σφαλμάτων που εμφανίζονται σε μόνιμη κατάσταση συγκρατούν την εστίαση εντός του παραθύρου διαλόγου
  • Η απόρριψη ενός σφάλματος (π.χ. το κλείσιμο ενός αναδυόμενου μηνύματος) επαναφέρει την εστίαση σε μια λογική θέση
  • Καμία ενέργεια δεν απαιτεί τη χρήση συσκευής κατάδειξης
  • Τα σφάλματα λόγω λήξης χρόνου αναμονής παρέχουν επαρκή προειδοποίηση και χρόνο για την παράταση της περιόδου σύνδεσης (WCAG 2.2.1)
Πέρα από τη συμμόρφωση: οι φιλοδοξίες της AAA

Το WCAG 3.3.6 (Πρόληψη σφαλμάτων — Όλα) απαιτεί να παρέχετε στους χρήστες τη δυνατότητα να ελέγχουν, να επιβεβαιώνουν και να ακυρώνουν όλες τις υποβολές — όχι μόνο τις οικονομικές. Αν και πρόκειται για επίπεδο AAA και δεν αποτελεί νομική απαίτηση στις περισσότερες περιπτώσεις, μειώνει σημαντικά το άγχος που προκαλείται από τα σφάλματα στους χρήστες με γνωστικές αναπηρίες. Θεωρήστε το ως τον ιδανικό στόχο που αξίζει να επιδιώξετε.


Πώς φτάσαμε εδώ: Μια σύντομη χρονολογική αναδρομή

1999
Δημοσίευση των WCAG 1.0 Κυκλοφορούν οι Οδηγίες Προσβασιμότητας Περιεχομένου Ιστού. Η προσβασιμότητα των ανατροφοδοτήσεων των φορμών αντιμετωπίζεται γενικά στα σημεία ελέγχου Προτεραιότητας 2. Δεν υπάρχουν συγκεκριμένα κριτήρια για τα μηνύματα σφάλματος.
2008
WCAG 2.0 — τυποποίηση των κριτηρίων σφάλματος Εισαγωγή των κριτηρίωνεπιτυχίας 3.3.1–3.3.4. Για πρώτη φορά, τα πρότυπα απαιτούν ρητά τον εντοπισμό σφαλμάτων και την παροχή προτάσεων διόρθωσης με τη μορφή κειμένου. Η συμμόρφωση με το επίπεδο AA καθίσταται το νομικό σημείο αναφοράς.
2018
WCAG 2.1 — έμφαση στις γνωστικές λειτουργίες και στις κινητές συσκευές Τα νέα κριτήρια βελτιώνουν την υποστήριξη για χρήστες με γνωστικές αναπηρίες. Το SC 1.3.5 (Προσδιορισμός του σκοπού της εισαγωγής) απαιτεί τη λειτουργία αυτόματης συμπλήρωσης στα πεδία προσωπικών δεδομένων, μειώνοντας έτσι το ποσοστό σφαλμάτων στην πηγή.
2019
ARIA 1.1 — σταθεροποίηση των ζωντανών περιοχών Οι πρακτικές δημιουργίας περιεχομένου ARIA τυποποιούνται role="alert" και aria-live πρότυπα. Επιτέλους είναι εφικτή η συνεπής υποστήριξη από προγράμματα περιήγησης και βοηθητικά προγράμματα πρόσβασης για δυναμικές ανακοινώσεις σφαλμάτων.
2021
Εφαρμογή της οδηγίας της ΕΕ για την προσβασιμότητα στον ιστό Οι ιστότοποι του δημόσιου τομέα στα κράτη μέλη της ΕΕυποχρεούνται να συμμορφώνονται με τις προδιαγραφές WCAG 2.1 AA. Τα μηνύματα σφάλματος αποτελούν πλέον πρωταρχικό στόχο ελέγχου για τους εθνικούς φορείς εποπτείας.
2023
WCAG 2.2 — βελτιώσεις στην εστίαση και τη γνωστική λειτουργία Η υπο-απαιτήση 2.4.11 (Εμφάνιση εστίασης) καθιστά αυστηρότερες τις απαιτήσεις για τον δείκτη εστίασης σε διαδραστικά στοιχεία — συμπεριλαμβανομένων των πεδίων που βρίσκονται σε κατάσταση σφάλματος. Η υπο-απαιτήση 3.3.7 (Επαναληπτική εισαγωγή) μειώνει το γνωστικό φορτίο σε φόρμες πολλαπλών βημάτων.
2026
Ο Ευρωπαϊκός Νόμος για την Προσβασιμότητα (EAA) τίθεται σε ισχύ Τα προϊόντα και οι υπηρεσίες του ιδιωτικού τομέα πρέπει να συμμορφώνονται με το πρότυπο EN 301 549 (το οποίο παραπέμπει στις WCAG 2.1 AA). Στο πεδίο εφαρμογής του περιλαμβάνονται το ηλεκτρονικό εμπόριο, οι τραπεζικές υπηρεσίες, οι μεταφορές και τα ηλεκτρονικά βιβλία. Τα προσβάσιμα μηνύματα σφάλματος αποτελούν πλέον νομική απαίτηση για τις περισσότερες εμπορικές διαδικτυακές εφαρμογές στην Ευρώπη.

Τα μηνύματα σφάλματος ως καθρέφτης των αξιών του προϊόντος σας

Το μήνυμα σφάλματος αποτελεί μια από τις πιο αποκαλυπτικές στιγμές σε κάθε ψηφιακή εμπειρία. Εμφανίζεται ακριβώς τη στιγμή που ο χρήστης βρίσκεται υπό πίεση — όταν έχει κάνει κάποιο λάθος ή όταν κάτι πέρα από τον έλεγχό του έχει πάει στραβά. Το πώς αντιδράτε εκείνη τη στιγμή λέει τα πάντα για το πόσο σοβαρά αντιμετωπίζετε το θέμα της ένταξης.

Ένα κόκκινο περίγραμμα χωρίς κείμενο δεν αποτελεί μήνυμα σφάλματος. Μια απλή απεικόνιση κώδικα δεν αποτελεί μήνυμα σφάλματος. Μια αόριστη φράση όπως «κάτι πήγε στραβά» δεν αποτελεί μήνυμα σφάλματος. Ένα προσβάσιμο μήνυμα σφάλματος είναι μια σαφής, ευγενική και πρακτική επικοινωνία που απευθύνεται σε όλους — συμπεριλαμβανομένου του 26% των χρηστών που αντιμετωπίζουν κάποια μορφή αναπηρίας, του 15% που βασίζονται στην πλοήγηση μέσω πληκτρολογίου και του 100% των χρηστών που θα αντιμετωπίσουν κάποιο σφάλμα κάποια στιγμή.

Η προσβασιμότητα δεν είναι απλώς μια λειτουργία. Είναι ένα χαρακτηριστικό ποιότητας κάθε λειτουργίας που κυκλοφορείτε — και τα μηνύματα σφάλματος είναι το σημείο όπου αυτή η ποιότητα δοκιμάζεται υπό τις πιο αντίξοες συνθήκες.

Τα καλά νέα είναι ότι τα προσβάσιμα μηνύματα σφάλματος απαιτούν ελάχιστη επιπλέον προσπάθεια, αρκεί να ενσωματωθούν από την αρχή. Τα χαρακτηριστικά ARIA είναι ελάχιστα. Οι οδηγίες σύνταξης είναι σαφείς. Τα πρότυπα είναι καθιερωμένα. Αυτό που απαιτείται είναι η πρόθεση — μια συνειδητή απόφαση να γίνονται δοκιμές με βοηθητικές τεχνολογίες, να γράφουμε για ανθρώπους και όχι για συστήματα, και να αντιμετωπίζουμε κάθε κατάσταση αποτυχίας ως ευκαιρία να κερδίσουμε την εμπιστοσύνη.

Στην AIOPSGROUP, μια εταιρεία του ομίλου valantic, δημιουργούμε ψηφιακά προϊόντα που εξυπηρετούν όλους. Η μηχανική προσβασιμότητας είναι ενσωματωμένη στο σύστημα σχεδιασμού μας, στις αναθεωρήσεις κώδικα και στη διαδικασία διασφάλισης ποιότητας — δεν προστίθεται απλώς στο τέλος. Αν η ομάδα σας χρειάζεται βοήθεια για τον έλεγχο, την εφαρμογή ή τη δημιουργία ενός προσβάσιμου συστήματος σχεδιασμού από το μηδέν, θα χαρούμε να σας βοηθήσουμε.