¿Cuál es la diferencia entre visibility:collapse
y display:none
?
84
Version corta:
El primero se utiliza para ocultar completamente los elementos de la tabla. Este último se usa para ocultar completamente todo lo demás.
Versión larga :
visibility: collapse
oculta un elemento por completo (para que no ocupe ningún espacio en el diseño), pero solo cuando el elemento es un elemento de tabla .
Si se usa en elementos que no sean elementos de tabla, visibility: collapse
actuará como visibility: hidden
. Esto hace que un elemento sea invisible, pero seguirá ocupando espacio en el diseño.
display: none
oculta un elemento por completo , por lo que no ocupa ningún espacio en el diseño, pero no debe usarse en elementos de tabla.
display: none
no debería usarse en los elementos de la tabla sería una buena adición.display: none;
es porque rompe tablas usandocolspan
yrowspan
.visibility: collapse
se comporta exactamente comovisibility: hidden
en la mayoría de los contextos de formato: el espacio requerido por el elemento está 'reservado' en el diseño, pero el elemento en sí no se representa, dejando un espacio en blanco donde habría estado.Hay tres excepciones que conozco: filas de tabla, columnas de tabla y elementos flexibles, en los que se
visibility: collapse
comporta comodisplay: none
, pero con una diferencia importante: el 'puntal'. Puede pensar en el puntal como un marcador de posición de tamaño cero, que no reclama ningún espacio propio en el proceso de diseño, pero sigue siendo parte de la estructura de formato y participa en algunos cálculos de tamaño.Una fila de tabla contraída, por ejemplo, no ocupará ningún espacio vertical en la tabla, pero las columnas de la tabla seguirán dimensionadas "como si" la fila contraída y su contenido fueran realmente visibles. Esto es para evitar que las columnas se "tambaleen" cuando las filas se alternan hacia adentro y hacia afuera. Del mismo modo, un elemento flexible colapsado no ocupa ningún espacio a lo largo del eje principal, pero aún contribuye al tamaño transversal de la línea flexible.
'No usar
display: none
con tablas' es una regla valiosa, pero no cuenta toda la historia.display: none
si no desea que sus elementos ocultos participen de ninguna manera en el proceso de diseño de la tabla (o línea flexible).visibility: collapse
si desea mostrar y ocultar elementos dinámicamente sin desestabilizar el diseño de la tabla (o línea flexible).Aquí hay un fragmento de código que demuestra la diferencia entre
display: none
yvisibility: collapse
para una fila de tabla:Mostrar fragmento de código
.show-right-border { border-right: 1px black solid; }
<h3>visibility: collapse</h3> <table class="show-right-border"> <tr> <td>Short text.</td> <td style="visibility: collapse;">Loooooooooong text.</td> </tr> </table> <h3>display: none</h3> <table class="show-right-border"> <tr> <td>Short text.</td> <td style="display: none;">Loooooooooong text.</td> </tr> </table>
fuente
visibility:collapse
no funciona para tablas en Safari. Descubrídisplay:none
que funciona bien en las filas de la tabla (incluso en Safari), aunque los comentarios anteriores sobre el ancho de la columna son correctosvisibility:collapse
solo debe usarse en tablas. En otros elementos actuará como unvisibility:hidden
.visibility:hidden
ocultar el elemento pero seguir ocupando el espacio del elemento mientrasdisplay:none
que ni siquiera mantendrá el espacio.Recursos:
Sobre el mismo tema:
fuente
visibility:collapse
tiene undisplay:none
comportamiento solo para elementos de tabla. En otros elementos, debería renderizarse comohidden
.fuente
También puede aplicar
visibility: collapse
en un elemento debajo de un contenedor flexbox (un elemento flexible). Actuará mientras lo aplica en un elemento condisplay: table-row
odisplay: table-column
fuente