Cuadro de Enfoque de Elemento A11y

This page is not available in the language you requested. You have been redirected to the English version of the page.
Link to this page copied to clipboard

El cuadro de enfoque de VoiceOver debe encapsular completamente el elemento que está anunciando

Not for use with personal data
Best Practice Impact - Moderate

Qué Verificamos

La ruta de accesibilidad de un elemento, o el cuadro de enfoque de VoiceOver, debe encapsular completamente su propio marco visual en pantalla.

Esta regla refuerza una Mejor Práctica de Deque. Puedes desactivar esta regla desde el Tablero Móvil o ignorando la regla en pruebas escritas para iOS.

Aprende a desactivar reglas desde el Tablero Móvil.

Ejemplo Fallido ❌

Mock profile card with a VoiceOver focus box appearing offset

VoiceOver está enfocado en un botón, pero el focus box appears offset - parcialmente fuera de los límites visibles del botón

El área resaltada no coincide con el elemento que se está anunciando, lo que dificulta a los usuarios videntes de VoiceOver seguir el enfoque

Ejemplo Correcto ✅

Mock profile card with the VoiceOver focus box fully enclosing its visible bounds

VoiceOver está enfocado en el mismo botón y el focus box fully contains the element's visual frame

El área resaltada coincide con lo que el usuario ve en pantalla, brindando a los usuarios videntes de VoiceOver un indicador visual claro de lo que está enfocado

En Resumen

  • Esta regla tiene un impacto moderado para los usuarios videntes que también utilizan VoiceOver
  • El cuadro de enfoque de VoiceOver debe coincidir con los límites visuales en pantalla del elemento que está anunciando
  • Evita usar accessibilityPath o accessibilityFrame si es posible - VoiceOver calcula automáticamente el marco correcto
  • Si debes anular el marco, recalcula las coordenadas cada vez que el elemento se mueva (como al desplazarse)

Impacto para los Usuarios

Los usuarios videntes que también utilizan VoiceOver son los más afectados. VoiceOver anunciará los detalles de un elemento en pantalla, pero el cuadro de enfoque aparecerá parcialmente o completamente fuera del elemento anunciado. Esta desconexión entre el contenido hablado y el destaque visible dificulta seguir el enfoque y entender qué está siendo enfocado.

Confirmar Problema de Cuadro de Enfoque de Elemento A11y

  1. Activa VoiceOver
  2. Enfoca el elemento
  3. Ocurrirá una de las siguientes situaciones:
    • Inaccesible: El cuadro de enfoque de VoiceOver contendrá parcialmente el elemento
    • Inaccesible: El cuadro de enfoque de VoiceOver no contendrá el elemento en absoluto
    • Accesible: El cuadro de enfoque de VoiceOver contendrá completamente el elemento

Corregir Problemas

Los problemas encontrados por esta regla son casi siempre causados por un uso incorrecto de accessibilityPath o accessibilityFrame. El enfoque más seguro es eliminarlos y dejar que VoiceOver calcule el cuadro de enfoque automáticamente. Si se requiere un marco personalizado, las coordenadas deben recalcularse respecto al elemento raíz cada vez que su posición cambie.

UIKit

El uso incorrecto de accessibilityPath o accessibilityFrame en un elemento resultará en que esta regla encuentre un problema. Corrige de una de las dos formas:

  • Elimina accessibilityPath o accessibilityFrame si no son necesarios. VoiceOver calcula automáticamente las coordenadas en pantalla y dibuja el cuadro de enfoque correcto.
  • Si debes anular el marco, convierte el marco del elemento a coordenadas de vista raíz y reasigna la ruta cada vez que el elemento se mueva (como en un UIScrollview):
// Assuming we are in a ViewController
let button = UIButton()

// If not within a ViewController, self.view should be replaced with the rootView of the screen
let rootview = self.view
let onScreenFrame = button.superview!.convert(button.frame, to: rootview)
button.accessibilityPath = UIBezierPath(rect: onScreenFrame)

SwiftUI

No se espera que este tipo de problema de accesibilidad ocurra dentro de vistas de SwiftUI.

React Native

No se espera que este tipo de problema de accesibilidad ocurra con elementos Touchable o Pressable por defecto.

Al agregar enfoque a otro tipo de elemento, establece las props accessible y accessibilityElementsHidden directamente en ese elemento:

<Image
   source={DequeLogo}
   accessible={true}
   accessibilityElementsHidden={false}
   accessibilityLabel="Deque Systems Logo"
   accessibilityRole="image"
   style={{ width: 100, height: 60 }}
   resizeMode='center'
/>

Cuando los elementos están agrupados dentro de un View contenedor, establece las props accessible y accessibilityElementsHidden en la vista contenedora:

<View
  style={styles.rowContainer}
  accessible={true}
  accessibilityElementsHidden={false}
  accessibilityLabel="Dark Mode"
  accessibilityValue={{ text: "" + secondSwitchIsEnabled }}
  accessibilityRole="switch"
  onTouchStart={() => {
    setSecondSwitchIsEnabled(!secondSwitchIsEnabled)
  }}>
    <Text style={{ fontSize: 18 }}>Dark Mode</Text>
    <Switch
        style={styles.standardSwitch}
        importantForAccessibility='no-hide-descendants'
        value={secondSwitchIsEnabled}
        onValueChange={() => {
          setSecondSwitchIsEnabled(!secondSwitchIsEnabled);
        }}
    />
</View>

¿Puedo Ignorar Esta Regla?

El cuadro de enfoque de Elemento A11y tiene un impacto moderado para los usuarios. Debido a que esta es una regla de Mejor Práctica, puede desactivarse desde el Tablero Móvil o suprimirse en pruebas individuales. Sin embargo, un cuadro de enfoque desalineado crea una experiencia confusa para los usuarios videntes de VoiceOver y vale la pena corregirlo cuando la causa es un accessibilityPath o accessibilityFrame mal configurado. Aprende más sobre ignorando reglas.

Recursos

Páginas del Curso de Deque University

Nota: El acceso completo a los recursos de Deque University requiere una suscripción.

Otros recursos