Atributo alt o título para la etiqueta i

82

Utilizo font-awesome y muestro sus fuentes así:

<i class="icon-lock"></i>

Esto mostrará un bonito símbolo de candado. Para que el usuario supiera qué significa eso exactamente, intenté agregar atributos como título y alt, pero fue en vano.

¿Hay algún atributo que pueda usar para la <i>etiqueta que ejecute la misma tarea que alt para imágenes y título para enlaces?

Weltschmerz
fuente
1
Muchos sitios de FontAwesome también usan Bootstrap. Si es así, úselo .sr-onlyen un archivo <span>.
rybo111
Buen ejemplo con texto interno visualmente oculto: fontawesome.com/how-to-use/on-the-web/other-topics/…
Hrvoje Golcic

Respuestas:

151

Puede usar el titleatributo en un ielemento, como cualquier elemento, por ejemplo

<i class="icon-lock" title="This symbolizes your being locked inside"></i>

Si ayuda es un tema más difícil. Los navegadores suelen mostrar el titlevalor del atributo como una "información sobre herramientas" al pasar el mouse por encima, pero ¿por qué el usuario pasa el mouse sobre el ícono? Y tales descripciones emergentes son de poca usabilidad; la información sobre herramientas CSS suele funcionar mejor.

Los lectores de pantalla pueden dar al usuario acceso opcional a los titleatributos, pero no estoy seguro de qué hacen con los elementos con contenido vacío.

Jukka K. Korpela
fuente
1
titlegeneralmente se lee, incluso sin contenido, siempre que el elemento en sí sea seleccionable
Mike
tenga en cuenta que las <i>etiquetas generalmente no se pueden seleccionar, a menos que les agregue un tabIndex.
dandavis
He agregado un título en mi ícono de fa <i class = "fa fa-info-circle" aria-hidden = "true" title = "heeeeeelp"> </i> pero no funciona
GomuGomuNoRocket
4
Debería preocuparnos que esto haya sido aceptado y altamente votado cuando es básicamente una especulación salvaje por parte de Jukka. No estoy diciendo que Jukka se haya equivocado al publicarlo, o que la presencia de esta respuesta hace daño, pero creo que el hecho de que una respuesta sea "Eh, tal vez un titleatributo funcione, o tal vez no, ¿quién sabe?" " fue considerado lo suficientemente bueno para votar por 120 personas ilustra el esfuerzo superficial que el soporte del lector de pantalla recibe de la mayoría de los desarrolladores web (yo incluido, lo admito). Como profesión, debemos descubrir cómo abordar estos problemas de manera más rigurosa que esto.
Mark Amery
3
No es una buena práctica desde el punto de vista de la accesibilidad . No todos los lectores de pantalla leerán el atributo de título si el elemento del host no se puede enfocar de forma nativa (por ejemplo, botón, ancla). Se recomienda agregar además titleun texto visualmente oculto (por ejemplo, una .sr-onlyclase en Bootstrap). Vea buenos ejemplos aquí: fontawesome.com/how-to-use/on-the-web/other-topics/…
Hrvoje Golcic
13

Con el avance de WAI-ARIA , al usar íconos de fuentes, probablemente debería usar una combinación de los siguientes para mejorar la accesibilidad:

  • La presentación de roles para eliminar la semántica de roles nativa implícita del elemento. Esto es especialmente importante si (ab) usa un elemento con una semántica nativa para proporcionar íconos, como este es el caso en su ejemplo usando el elemento i (que, de acuerdo con las especificaciones, "representa un tramo de texto en una voz alternativa o estado de ánimo [...] " ).
  • Una etiqueta de aria para proporcionar un valor de cadena que etiqueta el elemento -o- un atributo de título HTML nativo si está de acuerdo con que el navegador muestre una información sobre herramientas cuando se desplaza.
  • Un atributo oculto por aria para ocultar el contenido generado de las tecnologías de asistencia (ya que está utilizando una familia de fuentes de iconos, hay un carácter generado: antes de: después). Según las especificaciones:

Los autores PUEDEN, con precaución, usar aria-hidden para ocultar contenido visualmente renderizado de las tecnologías de asistencia solo si el acto de ocultar este contenido tiene como objetivo mejorar la experiencia de los usuarios de las tecnologías de asistencia al eliminar el contenido superfluo o redundante. Los autores que utilicen aria-hidden para ocultar contenido visible a los lectores de pantalla DEBEN asegurarse de que el significado y la funcionalidad idénticos o equivalentes estén expuestos a las tecnologías de asistencia.


No conozco su caso de uso exacto, así que me tomo la libertad de usar el caso más simple de proporcionar un número de teléfono. En orden de preferencia decreciente, I usaría:

<span aria-label="Our phone number">
  <span class="icon-phone" aria-hidden="true"></span>
  +33 7 1234576
</span>

(or any variation implying:
  - an `i` element with a `role` presentation attribute
    instead of the inner `span` element
  - a `title` attribute instead of an `aria-label` attribute)
<span class="icon-phone" 
  aria-label="Our phone number">+33 7 1234576</span>

(or any variation using `title` instead of `aria-label`)
<i class="icon-phone" role="presentation" 
  aria-label="Our phone number">+33 7 1234576</i>

(or any variation using `title` instead of `aria-label`)

Tenga en cuenta que los atributos aria-label y title deben describir el contenido del elemento. No es el próximo elemento hermano. Entonces , siento que la siguiente solución no está de acuerdo con las especificaciones (incluso si la mayoría de las herramientas de accesibilidad realmente tuvieran el mismo comportamiento observable como si el número de teléfono estuviera realmente dentro del spanelemento):

<span class="icon-phone" 
  title="Our phone number"></span>+33 7 1234576
Sylvain Leroux
fuente
7

Deberías usar <span>o algo parecido en su lugar. Puede usar el title=""atributo para dar texto al pasar el mouse, si eso es lo que está buscando. En cuanto a proporcionar accesibilidad a los lectores de pantalla o valor SEO, puede agregar el siguiente CSS:

.icon-lock{
    text-indent:-99999px;
}

Y luego escribe tu marcado así:

<span class="icon-lock">What I want the screen reader to say</span>
Chris Sobolewski
fuente
<i>no estaba en desuso en HTML 4.01.
Jim
2
Estás en lo cierto ... dado eso <u>y <s>estábamos, siempre me encuentro pensando <b>y <i>estábamos también, especialmente desde que lo han hecho <em>y <strong>, pero tienes toda la razón.
Chris Sobolewski
3

<i>Las etiquetas son para marcar texto. Está cambiando el significado semántico de esta etiqueta a algo que no tiene nada que ver con el uso de cursiva (e incluso la etiqueta en cursiva es una mala idea). Deberías usar un SPANen su lugar.

Los elementos en cursiva no admiten altatributos, los IMGelementos sí. Si quieres un ALTatributo, usa una imagen.

Diodeus - James MacFarlane
fuente
Las instrucciones de font-awesome te dicen que uses <i>, así que probablemente deberías decir qué va a salir mal si lo haces de esa manera. Usar algo (en este caso <i>) de una manera que no se pretendía originalmente tiene riesgos, pero en este caso ese riesgo se ha mitigado por el hecho de que miles de sitios de buena reputación con cientos de millones de usuarios ya están usando font-awesome.
cesoide
2

Creo que la función de las fuentes que actúan como imágenes debería reservarse para role = "img". Esto luego se puede usar con aria-label = "alt-text". Funciona gracias al algoritmo ARIA Accessible Name. Ver: Técnicas de Aria usando Img Role .

NoseToThePage
fuente