J'ai un site Web qui a des divs colorés avec des nombres, par ex. un bloc rouge avec le numéro 2 à l'intérieur. La couleur est importante pour la compréhension. Un utilisateur aveugle m'a envoyé un courriel me demandant si je pouvais lui faire dire "2 rouges" pour son lecteur d'écran.
J'ai essayé d'ajouter ceci comme un alt = "2 rouge" mais il a dit que cela ne faisait rien. Il pense qu'il pourrait ne lire que les balises alt pour les images.
Existe-t-il un bon moyen de le faire pour les divs?
En ce qui concerne le texte alternatif, vous avez raison, cela ne fonctionne que pour les images .. Mais vous pouvez utiliser aria-label à la place de l'attribut alt pour les éléments non-image comme ceci:
aria-label
(À ne pas cibler avec aria-labeledby
) Est utilisé pour ajouter du contenu descriptif hors écran à un élément de la même manière qu'un attribut alt=
Ajoute du contenu descriptif hors écran à les images à utiliser lorsque les images ne peuvent pas être affichées.
La différence est que aria-label
Peut être utilisé sur des éléments non image.
<div aria-label="test A"><p aria-hidden="true">test B</p></div>
<!--
result (screenreaders): test A
result (regular): test B
-->
L'ajout de l'attribut aria-hidden
Masque le texte interne.
.screenreader {
position: absolute !important; /* Outside the DOM flow */
height: 1px; width: 1px; /* Nearly collapsed */
overflow: hidden;
clip: rect(1px 1px 1px 1px); /* IE 7+ only support clip without commas */
clip: rect(1px, 1px, 1px, 1px); /* All other browsers */
}
Le clip est utilisé pour masquer complètement l'élément 1px x 1px, sinon il sera toujours visible à l'écran.
.screenreader {
position: absolute;
left:-9999px;
}
<div>Wed<span class="screenreader">nesday</span>, Sept<span class="screenreader">ember</span> 24, 2014</div>
.screenreader {
text-indent: -5000px;
}
La valeur de retrait réelle n'est pas importante tant qu'elle est en dehors de la plage de mise en page de vos pages. L'exemple déplace le contenu vers les 5 000 pixels de gauche.
Cette solution ne fonctionne que pour des blocs de texte complets. Cela ne fonctionnera pas bien sur les ancres ou les formulaires, ou les langues de droite à gauche, ou le texte en ligne spécifique mélangé avec un autre texte.
Ces styles masqueront le texte de tous les utilisateurs. Le texte est supprimé du flux visuel de la page et ignoré par les lecteurs d'écran. N'utilisez pas ce CSS si vous souhaitez que le contenu soit lu par un lecteur d'écran. Mais utilisez-le pour le contenu que vous ne voulez pas lire par les lecteurs d'écran.
Comme ci-dessus, un élément sans hauteur ni largeur étant supprimé du flux de la page, la plupart des lecteurs d'écran ignoreront ce contenu. La largeur et la hauteur HTML peuvent donner le même résultat. Ne redimensionnez pas le contenu à 0 pixel si vous souhaitez que le contenu soit lu par un lecteur d'écran.
EDIT 2020: actuellement display:none
ou visibility:hidden
semble généralement causer que le contenu n'est pas visible visuellement et pour les lecteurs d'écran (vient d'être testé dans Firefox et Chrome avec NVDA), donc la déclaration ci-dessous n'est pas valide. déplacer du contenu en dehors de l'écran actuellement semble être le seul moyen de fournir du contenu uniquement aux utilisateurs de lecteurs d'écran, voir également ce tableau: http://stevefaulkner.github.io/HTML5accessibility/tests/hidden-2016.html
Sauf indication contraire dans la réponse acceptée au moins Chromevox 1 et NVDA 2 lire également les éléments avec le style display:none
ou visibility: hidden
Attributs CSS si aria-hidden=false
est défini. Cependant actuellement uniquement dans Chrome (65), pas dans Firefox ou Edge (selon mes tests).
Donc (actuellement malheureusement uniquement dans Chrome), il est également possible de faire quelque chose comme ceci:
<h1 aria-hidden="false" style="display: none;">Heading only for Screen Readers</h1>
<h1 aria-hidden="false" style="visibility: hidden;">Second Heading only for Screen Readers</h1>
<h1 aria-hidden="true">Heading only for Screen</h1>
où Chromevox et NVDA lisent la première et la deuxième rubrique. Voir aussi ceci: https://jsfiddle.net/4y3g6zr8/6/
Si tous les navigateurs étaient d'accord sur ce comportement, ce serait une solution beaucoup plus propre que toutes les astuces CSS proposées dans les autres solutions.
1Chromevox https://chrome.google.com/webstore/detail/chromevox/kgejglhpjiefppelpmljglcjbhoiplfn2NVDA https://www.nvaccess.org/
Vous pouvez mettre un élément visuellement caché à l'intérieur:
<div>
<span class="visually_hidden">2 red</span>
</div>
Pour "se cacher visuellement", vous pouvez emprunter comment le passe-partout HTML5 le fait:
.visually_hidden {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
Concernant la question dans le titre: Non, il n'y a aucun moyen (en HTML ou autre) d'avoir du texte accessible uniquement aux lecteurs d'écran. Quoi que vous fassiez, comme utiliser un élément img
avec un attribut alt
non vide et un attribut src
manquant ou défectueux "ou utiliser CSS pour masquer quelque chose visuellement, sera disponible pour tout logiciel qui se soucie de le lire (et qui peut être inaccessible aux lecteurs d'écran pour une raison ou une autre).
D'un autre côté, si vous utilisez par exemple.
<div class=foo>2 <img alt=red></div>
alors la plupart des lecteurs d'écran le liront comme "deux rouges", mais il en sera de même pour les navigateurs normaux, de sorte que l'effet ne se limite pas aux lecteurs d'écran.
Ce que vous devez faire pour l'accessibilité est un problème différent et dépend du contexte et du but de l'utilisation de la couleur rouge. Notez que même lorsque le navigateur affiche une boîte en rouge, l'utilisateur peut ne pas la voir comme rouge, en raison du daltonisme; en particulier, s'il est pertinent de faire la distinction entre le rouge et le vert, de nombreuses personnes ne le feront pas.
Il pourrait y avoir une solution simple dans un cas spécifique, ou ce pourrait être un problème délicat sans bonne solution. Pour des notes générales et diverses techniques, voir le document Comment rencontrer WCAG 2.0: utilisation de la couleur .