¿Opacidad: 0 tiene exactamente el mismo efecto que visibilidad: oculta?

119

Si es así, ¿deprecia efectivamente la visibilitypropiedad?

(Me doy cuenta de que Internet Explorer aún no admite esta propiedad CSS2).
Comparaciones de motores de diseño

Ver también: ¿Cuál es la diferencia entre visibilidad: oculta y pantalla: ninguna?

Chris Noe
fuente
4
¿Y qué hay de taborder? Si visible = false, entonces el control no obtiene ningún foco, pero si la opacidad es 0, ¿quizás la tecla de tabulación aún itera entre los controles?
Stefan
Sería un caso de prueba interesante para ver cómo un control transparente puede enfocarse.
Chris Noe
3
Intenté eso, (FF3). Un elemento de entrada con opacidad: 0 recibe el foco, según el límite, aunque no hay una indicación visual. El cursor simplemente desaparece. Cualquier cosa que escriba se ingresa en el valor del elemento de entrada. Al presionar el tabulador de nuevo se pasa al siguiente campo. Interesante.
Chris Noe

Respuestas:

256

Aquí hay una recopilación de información verificada de las diversas respuestas.

Cada una de estas propiedades CSS es única. Además de hacer que un elemento no sea visible, tienen los siguientes efectos adicionales:

  1. Contrae el espacio que normalmente ocuparía el elemento
  2. Responde a eventos (p. Ej., Clic, pulsación de tecla)
  3. Participa en el taborder
                     colapso eventos taborder
opacidad: 0 No Si Si
visibilidad: oculta No No No
visibilidad: colapso Sí * No No
pantalla: ninguna Sí No No

* Sí dentro de un elemento de tabla, de lo contrario No.
Chris Noe
fuente
Intenté seguir la documentación de Markdown aquí: daringfireball.net/projects/markdown/syntax
Chris Noe
De acuerdo, SO intencionalmente no es compatible con <table>. Así que lo hice ascii.
Chris Noe
3
Además, con "opacity: 0" los objetos Flash se renderizan y el constructor del sprite se activa, pero con "visibilidad: oculto" no.
pepkin88
Si su radio / casillas de verificación no funcionan visibility:hidden, entonces deberá usarlo opacity: 0para que detecte el clic del mouse.
Dayuloli
7
@ChrisNoe: gracias por el resumen. Una cosa que podría querer agregar: acabo de investigar cómo hacer que un nodo principal sea invisible pero los nodos secundarios aún visibles, el resultado: no hay posibilidad de que los niños visibles: opacity:0 o display:none, pero si lo usa visibility: hidden , puede hacer que los niños sean visibles convisibility: visible
Martin
14

No.

Los elementos con opacidad crean un nuevo contexto de apilamiento.

Además, la especificación CSS no define esto, pero opacity:0se puede hacer clic en los elementos con y no en los elementos con visibility:hidden.

Kornel
fuente
12

No, no lo hace. Existe una gran diferencia. Son similares porque puede ver a través del elemento si la visibilidad está oculta o la opacidad es 0, sin embargo

opacidad: 0 : no puede hacer clic en los elementos detrás de él.

visibilidad: oculta : puede hacer clic en los elementos detrás de él.

Nishant
fuente
1
"No, no lo hace"? ¿Se entiende esto como una respuesta a la Pregunta o como una respuesta a una de las Respuestas existentes? Si es el último, debe agregarse como comentario debajo de la respuesta que aborda.
Chris Noe
9
Esta es una respuesta a "¿Opacidad: 0 tiene exactamente el mismo efecto que visibilidad: oculta?" .... ¿No era eso obvio?
Nishant
5

Hay muchas diferencias entre visibilityy opacity. La mayoría de las respuestas mencionan algunas diferencias, pero aquí hay una lista completa.

  1. la opacidad no hereda, mientras que la visibilidad sí

  2. la opacidad es animable mientras que la visibilidad no lo es.
    (Bueno, técnicamente lo es, pero simplemente no hay un comportamiento definido para, digamos, "37% colapsado y 63% oculto", por lo que puede considerar esto como no animable).

  3. Con la opacidad, no puede hacer que un elemento secundario sea más opaco que su principal. Por ejemplo, si tiene una p con color: negro y opacidad: 0.5, no puede hacer que ninguno de sus elementos secundarios sea completamente negro. Los valores válidos de opacidad están entre 0 y 1, ¡y este ejemplo requeriría 2!
    En consecuencia, según el comentario de Martin , puede tener un hijo visible (con visibilidad: visible) en un padre invisible (con visibilidad: oculta). Esto es imposible con opacidad; si un padre tiene opacidad: 0; sus hijos son siempre invisibles.

  4. La respuesta de Kornel menciona que los valores de opacidad menores que 1 crean su propio contexto de apilamiento; ningún valor para la visibilidad lo hace.
    (Me gustaría poder pensar en una forma de demostrar esto, pero no puedo pensar en ningún medio para mostrar el contexto de apilamiento de una visibilidad: elemento oculto).

  5. Según la respuesta de philnash , los elementos con opacidad: 0 aún son leídos por lectores de pantalla, mientras que los elementos ocultos no son visibles.

  6. Según la respuesta de Chris Noe , la visibilidad tiene más opciones (como contraer) y los elementos que no son visibles ya no responden a los clics y no se pueden marcar con pestañas.

(Hacer de esto un wiki de la comunidad, ya que de lo contrario tomar prestado de las respuestas existentes no sería justo).

Señor lister
fuente
4

No estoy del todo seguro de esto, pero creo que los lectores de pantalla no leen cosas que están configuradas para visibilidad oculta, pero pueden leer cosas independientemente de su opacidad.

Esa es la única diferencia en la que puedo pensar.

Philnash
fuente
¿Cómo afectaría eso al resultado entonces? ¿Quizás en términos de lo que se incluye en el DOM? Mis casos de prueba muestran que Mozilla no está desperdiciando visibilidad: elementos ocultos.
Chris Noe
Los elementos estarían en el DOM independientemente del estilo CSS, quiero decir que los usuarios ciegos que usan software de lectura de pantalla pueden tener texto en el elemento opacity: 0 leído, mientras que no lo harían si el mismo elemento tuviera visibilidad: oculto. Realmente es un problema de accesibilidad, ya que el resultado es diferente.
philnash
punto útil, es uno de los resultados de configurar la visibilidad como oculta, pero esto es solo la punta del iceberg. Más específicamente, la visibilidad: oculta lo hace (aparentemente) desaparecer de dom, mientras mantiene su diseño en la página.
Nishant
4

No estoy seguro del todo, pero así es como hago la transparencia entre navegadores:

opacity: 0.6;
-moz-opacity: 0.6;
filter: alpha(opacity=60);

Los objetos con Visibilidad: ocultos todavía tienen forma, simplemente no son visibles. Todavía se puede hacer clic en los elementos de opacidad cero y reaccionar a otros eventos.

Andrew Bullock
fuente
¿Qué significa tener forma y ser invisible?
Chris Noe
@chris, significa que todavía ocupan el espacio en la página
Mitchel Sellers
2
La opacidad se utiliza para decidir cómo se dibuja el elemento sobre el fondo. Con la opacidad establecida en 0, el elemento naturalmente ocupa espacio, pero no se dibuja nada porque el 0% del color del elemento se mezcla con el 100% del fondo, lo que no hace que aparezca nada nuevo. amigos ocultos y similares significan que el elemento se omite cuando se realiza el dibujo.
mP.
2

Al hacer un estilo de usuario que afecta a los elementos en a contenteditable, noté que si configuras algo visibility: hidden, entonces el signo de intercalación de entrada no quiere interactuar con él. Por ejemplo, si tienes

<div contenteditable><span style='visibility: hidden;'></span></div>

... entonces parece que si enfoca ese div / span, en realidad no puede escribirlo. Mientras que con opacity: 0él parece que puedes. No lo he probado extensamente, pero pensé que valía la pena mencionarlo aquí, ya que nadie más en esta página ha hablado sobre los efectos en la entrada de texto. Sin embargo, esto parece posiblemente relacionado con los eventos mencionados anteriormente.

MalcolmOcean
fuente
0

Lo que dice Phil es cierto.

IE admite la opacidad sin embargo:

filter:alpha(opacity=0);
Diodeus - James MacFarlane
fuente
0

Las propiedades tienen diferentes significados semánticos . Si bien CSS semántico suena como una tontería, como han mencionado otros usuarios, tiene un impacto en dispositivos como lectores de pantalla, donde la semántica afecta la accesibilidad de una página.

Zack el humano
fuente