Las reglas CSS visibility:hidden
y display:none
ambas dan como resultado que el elemento no sea visible. ¿Son estos sinónimos?
css
visibility
Chris Noe
fuente
fuente
visibility: hidden
ydisplay: none
será igualmente eficiente ya que ambos reactivan el diseño, la pintura y el compuesto. Sin embargo,opacity: 0
es funcionalmente equivalentevisibility: hidden
y no vuelve a activar el paso de diseño, por lo que recomendaría usarlo si no le importa que el espacio vacío aún se asigne (de lo contrario, usedisplay: none
).opacity: 0
debe usarse con precaución cuando se manejan entradas o botones, ya que aún existirían y posiblemente causarían interacciones extrañas con el usuario.No son sinónimos
display:none
elimina el elemento del flujo normal de la página, permitiendo que otros elementos se completen.visibility:hidden
deja el elemento en el flujo normal de la página, de modo que todavía ocupa espacio.Imagina que estás en la fila para un paseo en un parque de diversiones y alguien en la fila se pone tan ruidoso que la seguridad los saca de la línea. Todos en la fila avanzarán una posición para llenar el espacio ahora vacío. Esto es como
display:none
.Compare esto con una situación similar, pero que alguien delante de usted se ponga una capa de invisibilidad. Al ver la línea, parecerá que hay un espacio vacío, pero la gente realmente no puede llenar ese espacio vacío porque alguien todavía está allí. Esto es como
visibility:hidden
.fuente
Una cosa que vale la pena agregar, aunque no se preguntó, es que hay una tercera opción para hacer que el objeto sea completamente transparente. Considerar:
(Asegúrese de hacer clic en el botón "Ejecutar fragmento de código" arriba para ver el resultado).
La diferencia entre 1 y 2 ya se ha señalado (es decir, 2 todavía ocupa espacio). Sin embargo, hay una diferencia entre 2 y 3: en el caso 3, el mouse aún cambiará a la mano al pasar el mouse sobre el enlace, y el usuario aún puede hacer clic en el enlace, y los eventos de Javascript seguirán disparándose en el enlace. Por lo general, este no es el comportamiento que desea (¿pero quizás a veces lo es?).
Otra diferencia es que si selecciona el texto, luego copia / pega como texto sin formato, obtendrá lo siguiente:
En el caso 3, el texto se copia. ¿Tal vez esto sería útil para algún tipo de marca de agua, o si quisieras ocultar un aviso de derechos de autor que se mostraría si un usuario descuidado copiara / pegara su contenido?
fuente
display:none
elimina el elemento del flujo de diseño.visibility:hidden
lo oculta pero deja el espacio.fuente
Hay una gran diferencia cuando se trata de nodos secundarios. Por ejemplo: si tiene un div primario y un div secundario anidado. Entonces, si escribes así:
En este caso, ninguno de los divs será visible. Pero si escribes así:
Entonces el div hijo será visible mientras que el div padre no se mostrará.
fuente
No son sinónimos:
display: none
elimina el elemento del flujo de la página y el resto de la página fluye como si no estuviera allí.visibility: hidden
oculta el elemento de la vista pero no el flujo de la página, dejando espacio para ello en la página.fuente
display: none
elimina el elemento de la página por completo, y la página se construye como si el elemento no estuviera allí en absoluto.Visibility: hidden
deja el espacio en el flujo del documento aunque ya no pueda verlo.Esto puede o no hacer una gran diferencia dependiendo de lo que esté haciendo.
fuente
Con
visibility:hidden
el objeto todavía ocupa altura vertical en la página. Condisplay:none
esto se elimina por completo. Si tiene texto debajo de una imagen y lo tienedisplay:none
, ese texto se desplazará hacia arriba para llenar el espacio donde estaba la imagen. Si haces visibilidad: oculto, el texto permanecerá en la misma ubicación.fuente
display:none
ocultará el elemento y colapsará el espacio que estaba ocupando, mientrasvisibility:hidden
que ocultará el elemento y preservará el espacio de los elementos. display: none también afecta algunas de las propiedades disponibles de javascript en versiones anteriores de IE y Safari.fuente
Además de todas las otras respuestas, hay una diferencia importante para IE8: si usa
display:none
e intenta obtener el ancho o la altura del elemento, IE8 devuelve 0 (mientras que otros navegadores devolverán los tamaños reales). IE8 devuelve el ancho o alto correcto solo paravisibility:hidden
.fuente
visibility:hidden
preserva el espacio;display:none
no lo hacefuente
No estará disponible en la página y no ocupa ningún espacio.
oculta un elemento, pero aún ocupará el mismo espacio que antes. El elemento estará oculto, pero aún así, afectará el diseño.
visibility: hidden
preservar el espacio, mientrasdisplay: none
que no preserva el espacio.No mostrar ninguno Ejemplo: https://www.w3schools.com/css/tryit.asp?filename=trycss_display_none
Ejemplo oculto de visibilidad: https://www.w3schools.com/cssref/tryit.asp?filename=trycss_visibility
fuente
Si la propiedad de visibilidad se establece en
"hidden"
, el navegador seguirá ocupando espacio en la página para el contenido, aunque sea invisible.Pero cuando configuramos un objeto para
"display:none"
, el navegador no asigna espacio en la página para su contenido.Ejemplo:
Ver detalles
fuente
visibility:hidden
mantendrá el elemento en la página y ocupará ese espacio pero no se lo mostrará al usuario.display:none
no estará disponible en la página y no ocupa ningún espacio.fuente
Otra diferencia es que
visibility:hidden
funciona en navegadores muy, muy viejos, ydisplay:none
no:https://www.w3schools.com/cssref/pr_class_visibility.asp
https://www.w3schools.com/cssref/pr_class_display.asp
fuente
La diferencia va más allá del estilo y se refleja en cómo se comportan los elementos cuando se manipulan con JavaScript.
Efectos y efectos secundarios de
display: none
:clientWidth
,clientHeight
,offsetWidth
,offsetHeight
,scrollWidth
,scrollHeight
,getBoundingClientRect()
,getComputedStyle()
, todos regresan0
s.Efectos y efectos secundarios de
visibility: hidden
:innerText
(pero noinnerHTML
) del elemento de destino y sus descendientes devuelve una cadena vacía.fuente
display:none;
no mostrará el elemento ni asignará espacio para el elemento en la página, mientrasvisibility:hidden;
que no mostrará el elemento en la página pero asignará espacio en la página. Podemos acceder al elemento en DOM en ambos casos. Para comprenderlo mejor, consulte el siguiente código: pantalla: ninguno vs visibilidad: ocultofuente
Aquí hay muchas respuestas detalladas, pero pensé que debería agregar esto para abordar la accesibilidad ya que hay implicaciones.
display: none;
yvisibility: hidden;
puede no ser leído por todo el software lector de pantalla. Tenga en cuenta lo que experimentarán los usuarios con discapacidad visual.La pregunta también se refiere a sinónimos.
text-indent: -9999px;
es otro que es más o menos equivalente. La diferencia importante context-indent
es que a menudo será leído por lectores de pantalla. Puede ser una mala experiencia ya que los usuarios aún pueden tabular el enlace.Para accesibilidad, lo que veo usado hoy es una combinación de estilos para ocultar un elemento mientras es visible para los lectores de pantalla.
Una buena práctica es crear un enlace "Saltar al contenido" al ancla del cuerpo principal del contenido. Los usuarios con discapacidad visual probablemente no quieran escuchar su árbol de navegación completo en cada página. Haga el enlace visualmente oculto. Los usuarios pueden simplemente presionar la pestaña para acceder al enlace.
Para obtener más información sobre accesibilidad y contenido oculto, consulte:
fuente