2009-11-18 14 views
36

¿Cuál es la diferencia entre estos tres usuarios de lectores de pantalla?display: none vs visibility: oculto vs texto-sangrado: 9999 ¿Cómo se comporta el lector de pantalla con cada uno?

+0

tengo algo de experiencia con los lectores de pantalla, aunque limitada, pero me piensan que ignoran CSS ... ¿los lectores de pantalla modernos también ignoran el contenido generado por JavaScript? – Zoidberg

+0

JAWS (http://www.freedomscientific.com/products/fs/jaws-product-page.asp), el lector de pantalla más popular (http://www.webaim.org/projects/screenreadersurvey2/) no es un navegador dedicado, pero una aplicación que hace accesibles otros programas, como los navegadores. No sé exactamente cómo funciona, pero supongo que simplemente se aprovecha del motor de renderizado del navegador para decidir qué decir. – mercator

+0

¿Por qué quieres que se lea un texto oculto? ¿Es saber qué está oculto?Estoy intentando comprender mejor la aplicación de esta propiedad de CSS para que sepa cuál usar cuando. – user1815356

Respuesta

30

se refieren: http://css-discuss.incutio.com/?page=ScreenreaderVisibility

display: none: no será visto ni oído. *
visibility: oculto: no se verá ni se escuchará. *
texto-sangrado: 9999: no se verá pero se oirá.

  • La mayor parte del lector de pantalla no 'hablar' display: none y visibilidad: oculto, pero hay pocos lectores de pantalla como pwWebSpeak y HtReader que será leído incluso éstos también.
+3

He probado con el lector de pantalla NVDA y lee los elementos que están ocultos por la pantalla: ninguno –

+0

Hay un comentario similar en el enlace que he especificado. RTIMO. –

+0

La posibilidad anterior no funciona con JAWS en IE –

8

Hay un muy buen resumen de cómo los lectores de pantalla interpretan estas propiedades en WebAIM.

En pocas palabras, visibility: hidden y display:none ocultarán el texto de los lectores de pantalla al igual que lo hace de los demás. Todos los otros métodos serán 'visibles' para un lector de pantalla.

+1

Pero descargué el software del lector de pantalla NVDA y lee la pantalla: ninguno contenido –

+1

Sí, desafortunadamente los lectores de pantalla son tan inconsistentes como los navegadores videntes cuando se trata de CSS. El estándar es como se describió anteriormente, pero siempre habrá algunos que ignorarán los estándares. – anschauung

+1

Me parece que el lector de pantalla NVDA no lee el contenido 'display: none' si está en ese estado cuando se carga la pantalla; pero si javascript se usa para cambiar el estado a 'display: none', el lector de pantalla no se da cuenta y lee el contenido. –

15

Hay una buena explicación al respecto en A List Apart. http://www.alistapart.com/articles/fir/ Depende del producto.

 
PRODUCT       DISPLAY: NONE  VISIBILITY: HIDDEN 
Hal version 5.20    Does not read  Reads 
IBM Home Page Reader 3.02  Does not read  Does not read 
Jaws (4.02, 4.50, 5.0 beta)  Reads    Reads 
OutSpoken 9      Does not read  Does not read 
Window-Eyes 4.2     Does not read  Does not read 
2

Hay many techniques para ocultar el contenido visualmente, sino que esté disponible para los lectores de pantalla.

La técnica H5BP funciona en FF, Webkit, Opera y IE6 +

.visuallyhidden { 
    border: 0; 
    clip: rect(0 0 0 0); 
    height: 1px; 
    margin: -1px; 
    overflow: hidden; 
    padding: 0; 
    position: absolute; 
    width: 1px; 
} 
0

answere completo está aquí para hacer cajas de entrada Autoshow/relleno automático de cromo doesnt seguro. En mi página web (Nuevo usuario), el campo de teléfono y el campo Contraseña se estaban cargando automáticamente con datos en caché. Para deshacerme de esto, creé dos campos ficticios y les di una clase que los hace invisibles para el usuario. Una función jquery para mostrar y luego ocultarlos después de una fracción.

función

jQuery para mostrar & ocultar:

$().ready(function() { 
    $(".fake-autofill-fields").show(); 
    // some DOM manipulation/ajax here 
    window.setTimeout(function() { 
     $(".fake-autofill-fields").hide(); 
    }, 1000); 
}); 

Clase:

.fake-autofill-fields 
{ 

    border: none; 
    clip: rect(0 0 0 0); 
    height: 1px; 
    margin: -1px; 
    overflow: hidden; 
    padding: 0; 
    position: absolute; 
    width: 1px; 
} 

Los campos de entrada:

<input style="display:none" type="text" class="fake-autofill-fields" name="fakeusernameremembered"/> 
<input style="display:none" type="password" class="fake-autofill-fields" name="fakepasswordremembered"/> 
+0

Campos de entrada: Nitasha

Cuestiones relacionadas