4.8: Regiones Vivas
- Page ID
- 152636
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)
( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\id}{\mathrm{id}}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\kernel}{\mathrm{null}\,}\)
\( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\)
\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\)
\( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)
\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)
\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)
\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vectorC}[1]{\textbf{#1}} \)
\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)
\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)
\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)Las regiones en vivo se utilizan para presentar cambios en el contenido web que ocurren después de que se haya cargado una página web. Los usos típicos incluyen la presentación de noticias, comentarios y mensajes de error, o salida de chat en vivo a lectores de pantalla, que de otra manera no sabrían sobre este contenido cambiando o siendo agregado a una página web ya renderizada. Las regiones en vivo también se pueden usar para anunciar comentarios y mensajes de error cuando se carga una página, por lo que los usuarios de lectores de pantalla no necesitan buscar a través de una página web para encontrar comentarios. Se lee automáticamente cuando una página termina de cargarse.
Tipos de regiones vivas
Se puede crear una región viva típica agregando aria-live="polite”
a cualquier elemento en el que se actualice el contenido después de que se haya cargado una página web. El valor “cortés” indica la prioridad del contenido que se está actualizando. En este caso, un lector de pantalla esperará una interrupción en su salida de audio antes de anunciar el cambio ocurrido. También puedes usar aria-live="assertive”
para interrumpir lo que sea que esté leyendo el lector de pantalla y, en su lugar, leer el contenido cambiado antes de continuar. Por lo general, debe evitarse lo “asertivo”. Úselo únicamente en los casos en que se esté actualizando información crítica, como un mensaje de error o retroalimentación crítica.
Normalmente, aria-live
no se usaría para presentar comentarios o mensajes de error, aunque es posible. En su lugar se utilizaría role="alert”
, introducido anteriormente. El uso de role="alert”
crea una región en vivo asertiva que interrumpe a un lector de pantalla para presentar su contenido. Se pueden usar dentro del contenido renderizado para presentar mensajes sin recargar la página, o pueden usarse después de que se cargue una página, para presentar el mensaje antes de que se lea cualquier otro contenido de la página.
Además del role="alert”
de uso común, existen otros roles menos utilizados que también actúan como regiones vivas. Estos son:
- role=” registro”
- role=” marquesina”
- role=” temporizador”
- role=” status”
Aquí está la lista completa de atributos de región en vivo:
- aria-live: educado, asertivo, apagado
- aria-relevante: adiciones, remociones, texto, todos
- aria-atomic: verdadero, falso
- aria-busy: verdadero, falso
- role=” alerta”
- role=” registro”
- role=” marquesina”
- role=” temporizador”
- role=” status”
Cuidado al usar regiones vivas
Hay algunos casos en los que usar una región en vivo (aria-live
) para leer contenido cambiante puede crear una barrera. Tomemos, por ejemplo, un carrusel que presenta una serie de paneles que giran a una frecuencia determinada. Puede ser útil configurar un carrusel como región en vivo, de modo que a medida que cada panel se desliza hacia la vista, un lector de pantalla lee el contenido. Sin embargo, este comportamiento podría presentar una barrera, interfiriendo con el lector de pantalla cuando está enfocado en otra parte, leyendo otro contenido de la página. Si se usa una región viva con un carrusel, solo debe estar activa cuando el carrusel tiene foco. Si bien normalmente una región activa se crea como un atributo estático WAI-ARIA, en este caso, debe agregarse dinámicamente al enfocarse y eliminarse dinámicamente al desenfocar.
Para los carruseles, también es importante considerar la velocidad a la que giran los paneles, asegurando que los lectores de pantalla tengan tiempo suficiente para leer el contenido del panel antes de girar al siguiente. Este momento puede ser difícil de predecir. Depende de la cantidad de contenido de cada panel, que puede variar significativamente, y de la velocidad a la que los usuarios tengan su tasa de lectura establecida en su lector de pantalla. Una solución a este problema puede ser hacer que el carrusel gire manualmente cuando tenga enfoque para que los usuarios puedan pasar al siguiente panel solo cuando estén listos.
Otro caso en el que las regiones vivas pueden ser problemáticas es con temporizadores. Los temporizadores que cuentan por segundos esencialmente pueden hacer que el resto del contenido de una página sea inutilizable para un usuario lector de pantalla. Como el lector de pantalla anuncia cada segundo, interrumpe la lectura del otro contenido en una página. Los temporizadores que incrementan cada minuto, por ejemplo, no tendrían este problema.
Otros lugares donde las regiones vivas pueden ser problemáticas son con noticias muy activas o feeds de Twitter. Aunque las regiones en vivo pueden ser útiles para este tipo de actualización de contenido, si hay un flujo constante de actualizaciones o las actualizaciones ocurren con frecuencia, los usuarios de lectores de pantalla pueden tener dificultades para comprender el contenido de otra página con las frecuentes interrupciones.
Prueba esto: Para experimentar el agravamiento de una región en vivo en constante actualización, abre ChromeVox y enfoca el temporizador a continuación. En este caso, el temporizador está en un iframe, por lo que simplemente puede establecer el enfoque fuera del iframe para evitar que se lea. Si el temporizador estuviera incrustado en el contenido de la propia página, no tendrías esta opción, y el resto de la página quedaría inutilizable con un lector de pantalla. La única opción sería salir de la página.