¿Hay un opuesto para mostrar: ninguno?

196

Lo contrario de visibility: hiddenes visibility: visible. Del mismo modo, ¿hay algún opuesto para display: none?

Muchas personas se confunden al descubrir cómo mostrar un elemento cuando lo tiene display: none, ya que no es tan claro como usar la visibilitypropiedad.

Simplemente podría usar en visibility: hiddenlugar de display: none, pero no tiene el mismo efecto, por lo que no voy con eso.

Mohammad Areeb Siddiqui
fuente
35
No estoy seguro de por qué esto está recibiendo votos negativos y solicitudes de cierre. Es sobre el tema (actualmente hay 143.368 preguntas CSS sobre Stack Overflow), es un problema del mundo real y es una buena pregunta para ayudar a las personas a aprender el idioma correctamente.
Paul D. Waite
44
@Paul Quizás la gente no se dio cuenta de que era una respuesta propia y pensó que era un esfuerzo de investigación bajo (porque todo el esfuerzo de investigación está en la respuesta)
Richard Tingle
11
¿Por qué molestarse en hacer una pregunta si su respuesta es copiar / pegar una tabla de w3schools.com/cssref/pr_class_display.asp ?
Bill the Lizard
1
@ RichardTingle: ah, buen punto. @MohammadAreebSiddiq: aw, no pensé que tu respuesta necesitara ser eliminada. Simplemente eliminar la gran lista de todos los displayvalores posibles hubiera estado bien. (Y esa es solo mi opinión, por supuesto: tal vez a la gente realmente le gustó que esa lista estuviera allí).
Paul D. Waite
deberías haber hecho que la respuesta de Ilya Streltsyn fuera la aceptada. Ilya ofrece una "versión" de la pantalla: ninguna que tenga un opuesto, que resuelva el problema práctico subyacente a su pregunta, mientras que la respuesta que eligió aceptar, en esencia, simplemente dice "no". Lo cual es cierto, pero mucho, mucho, mucho menos útil. Esto es para programadores, no para lingüistas.
mathheadinclouds

Respuestas:

176

display: noneno tiene un opuesto literal como lo visibility:hiddenhace.

La visibilitypropiedad decide si un elemento es visible o no. Por lo tanto, tiene dos estados ( visibley hidden), que son opuestos entre sí.

La displaypropiedad, sin embargo, decide qué reglas de diseño un elemento seguirán. Hay varios tipos diferentes de reglas de cómo los elementos pondrán a sí mismos en CSS, por lo que hay varios valores diferentes ( block, inline, inline-blocketc. - consulte la documentación de estos valores aquí ).

display:none elimina un elemento del diseño de la página por completo, como si no estuviera allí.

Todos los demás valores de displayhacen que el elemento forme parte de la página, por lo que, en cierto sentido, todos son opuestos a display:none.

Pero no hay un valor que sea el inverso directo display:none, al igual que no hay un peinado que sea lo opuesto a "calvo".

Paul D. Waite
fuente
2
Noté que mencionaste display: initialen la respuesta automática eliminada: para los navegadores que implementan CSS2.1 también son sinónimos display: inline. No se restablece displaya los valores predeterminados del navegador para un elemento dado, eso no es lo que significa "valor inicial".
BoltClock
26
mi voto para el ejemplo 'calvo' :) ¡Un ejemplo muy fácil de entender!
Jesper Rønn-Jensen
1
Durante toda la lectura, estoy pensando para mí mismo "gran ejemplo, sí, sí, todos son opuestos a display:none" luego lees "al igual que no hay un peinado que sea lo opuesto al calvo " Wow plus 1, muy bien dicho.
Chef_Code
2
Cualquier peinado es lo contrario de calvo.
AdjunctProfessorFalcon
@AdjunctProfessorFalcon: bueno, más o menos. Yo diría que una cabeza afeitada en el número uno es mucho menos opuesta a la calva que un salmonete.
Paul D. Waite
83

Un verdadero opuesto a display: noneno existe (todavía).

Pero display: unsetestá muy cerca y funciona en la mayoría de los casos.

De MDN (Red de desarrolladores de Mozilla):

La palabra clave CSS no establecida es la combinación de las palabras clave iniciales y heredadas. Al igual que estas otras dos palabras clave de CSS, se puede aplicar a cualquier propiedad CSS, incluida la abreviatura CSS all. Esta palabra clave restablece la propiedad a su valor heredado si hereda de su padre o a su valor inicial si no. En otras palabras, se comporta como la palabra clave heredar en el primer caso y como la palabra clave inicial en el segundo caso.

(fuente: https://developer.mozilla.org/docs/Web/CSS/unset )

Tenga en cuenta también que display: revertactualmente se está desarrollando. Ver MDN para más detalles.

RockPaperLizard
fuente
¿Qué hay de display: initial?
Flimm
31

Cuando se cambia el elemento de displayen Javascript, en muchos casos una opción adecuada para 'deshacer' el resultado de element.style.display = "none"es element.style.display = "". Esto elimina la displaydeclaración del styleatributo y revierte el valor real de la displaypropiedad al valor establecido en la hoja de estilo para el documento (al valor predeterminado del navegador si no se redefine en otro lugar). Pero el enfoque más confiable es tener una clase en CSS como

.invisible { display: none; }

y agregar / eliminar este nombre de clase a / de element.className.

Ilya Streltsyn
fuente
2
Si desea anular .element { display: none }(definido en CSS lib por ejemplo) con .element { display: '' !important }él no funcionará. Tienes que usar.element { display: unset !important }
tanguy_k
2
Le conté sobre "deshacer" display:nonesolo en JavaScript. Por supuesto, la cadena vacía no funcionará en CSS, ya que es el valor no válido. Sin embargo, display: unsetsugiere que no se restaurará, por ejemplo, el valor predeterminado display:blockpara a <div>o el valor predeterminado display:table-rowpara a <tr>, efectivamente convierte todo en display:inline(al igual que display:initial). Para restaurar el valor predeterminado del navegador para el elemento, existe display:revert, pero no está bien soportado ( caniuse.com/#feat=css-revert-value ).
Ilya Streltsyn
Esta debería ser la respuesta aceptada. La respuesta aceptada tiene una buena comparación con "opuesto a calvo", pero no hace nada para ayudar al pobre programador a tener que lidiar con la implementación de "hacer calvo" - "ahora, ponte el pelo atrás". Esta respuesta te dice cómo lidiar con ese problema práctico. Element.style.display = '' es propenso a errores, porque el "cabello viejo" podría no ser la pantalla predeterminada, sino 'bloquear' o 'celda de tabla' o lo que sea. Por lo que puedo ver, eliminar la clase ".invisible", como aquí, es la única implementación libre de errores de "recuperar el cabello ahora". Entonces, hazlo así, siempre
mathheadinclouds
6

puedes usar

display: normal;

Funciona como normal ... Es un pequeño pirateo en CSS;)

indera
fuente
2
¿Por qué se está rechazando esto? ¿Es esta una mala forma de hacerlo o? Funciona bien para los tablerows, pero ¿debería usar algo más?
Benjamin Karlog
44
El valor 'normal' no es un valor válido para la displaypropiedad, por lo que simplemente se ignora y funciona efectivamente como una element.style.display = ''asignación (vea mi respuesta más arriba).
Ilya Streltsyn
27
en otras palabras, podría haber usado display: chunk norris;para el mismo efecto, con un poco más de patada.
Kevin B
1
Si desea anular .element { display: none }(definido en CSS lib por ejemplo) con .element { display: normal !important }él no funcionará. Tienes que usar.element { display: unset !important }
tanguy_k
4

Yo uso display:block; funciona para mí

Pradeep Behera
fuente
Eso solo es útil para los elementos en los que desea que se muestren block, no es lo que generalmente desea para un inlineelemento como, <span>por ejemplo.
Flimm
3

Como Paul explica, no hay un opuesto literal a la visualización: ninguno en HTML ya que cada elemento tiene una visualización predeterminada diferente y también puede cambiar la visualización con una clase o un estilo en línea, etc.

Sin embargo, si usa algo como jQuery, sus funciones show y hide se comportan como si hubiera un opuesto de display none. Cuando se oculta, y luego muestra un elemento nuevamente, se mostrará exactamente de la misma manera que lo hizo antes de estar oculto. Lo hacen almacenando el valor anterior de la propiedad de visualización al ocultar el elemento para que cuando lo muestre nuevamente se muestre de la misma manera que lo hizo antes de ocultarlo. https://github.com/jquery/jquery/blob/740e190223d19a114d5373758127285d14d6b71e/src/css.js#L180

Esto significa que si configura un div, por ejemplo, para mostrar en línea, o bloque en línea y lo oculta y luego lo muestra de nuevo, se mostrará una vez más como pantalla en línea o en bloque en línea igual que antes

<div style="display:inline" >hello</div>
<div style="display:inline-block">hello2</div>
<div style="display:table-cell" >hello3</div>

guión:

  $('a').click(function(){
        $('div').toggle();
    });

Observe que la propiedad de visualización del div permanecerá constante incluso después de que se ocultó (display: none) y se volvió a mostrar.

usuario3589536
fuente
1
"display: table-cell" era el que necesitaba. No fue mencionado en ninguna otra respuesta.
bendecko 01 de
1

En el caso de una hoja de estilo para imprimir, utilizo lo siguiente:

/* screen style */
.print_only { display: none; }

/* print stylesheet */
div.print_only { display: block; }
span.print_only { display: inline; }
.no_print { display: none; }

Usé esto cuando necesitaba imprimir un formulario que contenía valores y los campos de entrada eran difíciles de imprimir. Entonces agregué los valores envueltos en una etiqueta span.print_only (div.print_only se usó en otro lugar) y luego apliqué la clase .no_print a los campos de entrada. Entonces, en la pantalla, verá los campos de entrada y, cuando se imprima, solo los valores. Si quisieras ponerte elegante, puedes usar JS para actualizar los valores en las etiquetas de extensión cuando se actualizaron los campos, pero eso no era necesario en mi caso. Quizás no sea la solución más elegante, ¡pero funcionó para mí!

TonyP
fuente
1

Puedes usar display: block

Ejemplo:

<!DOCTYPE html>
<html>
<body>

<p id="demo">Lorem Ipsum</p>

<button type="button" 
onclick="document.getElementById('demo').style.display='none'">Click Me!</button>
<button type="button" 
onclick="document.getElementById('demo').style.display='block'">Click Me!</button>

</body>
</html> 
Adeetya Kulkarni
fuente
0

Me encontré con este desafío al crear una aplicación donde quería una tabla oculta para ciertos usuarios pero no para otros.

Inicialmente lo configuré como display: none pero luego display: inline-block para aquellos usuarios que quería verlo, pero experimenté los problemas de formato que podría esperar (columnas consolidadas o generalmente desordenadas).

La forma en que lo resolví fue mostrar primero la tabla y luego hacer "display: none" para aquellos usuarios a los que no quería ver. De esta forma, se formateó normalmente pero luego desapareció según fuera necesario.

¡Una solución lateral, pero podría ayudar a alguien!

Andrew Sainsbury
fuente
0

opuesto a 'none' es 'flex' mientras se trabaja con react native.

NEELAMADHAB
fuente
-2

visibilidad: oculto ocultará el elemento pero el elemento está con DOM. Y en caso de visualización: ninguno eliminará el elemento del DOM.

Por lo tanto, tiene la opción de que el elemento se oculte o muestre. Pero una vez que lo elimina (quiero decir, no mostrar ninguno) no tiene un valor opuesto claro. display tiene varios valores como display: block, display: inline, display: inline-block y muchos otros. Puedes verlo desde W3C.

Hardik Sondagar
fuente
2
¿Por qué no alguno de los otros valores para display?
Paul D. Waite
1
¿Se supone que esta es una lista completa? No es.
Ry-
-3

Puedes usar esto display:block;y también agregaroverflow:hidden;

Bel
fuente
1
Lea las respuestas existentes antes de contribuir con las suyas. Hay una respuesta buena, bien votada y aceptada desde mayo pasado y también hay una respuesta con un total negativo de votos que es más o menos idéntica a la suya.
Quentin
Vi la respuesta Display: Unset no funciona tan bien como Display: block. Mi opinión :) @Quentin
Bel
Y display: blockno funciona bien en un <span>o un <td>... y una respuesta anterior ya ha mencionado display: block.
Quentin
2
Has editado la respuesta para mencionarla overflow: hidden. ¿Por qué? ¿Cuál es el punto de agregar eso? No tiene nada que ver con deshacer a display: none.
Quentin
-4

El mejor "opuesto" sería devolverlo al valor predeterminado que es:

display: inline
TimNguyenBSM
fuente
Solo quiero dejar en claro que la propiedad de visualización no tiene un valor predeterminado, sin embargo, el elemento html sí. El valor predeterminado de un DIV sería display: block, un SPAN sería predeterminado para mostrar: inline. Pero la propiedad de visualización en sí misma no tiene un valor predeterminado.
kevinius