Existe um oposto a exibir: nenhum?


196

O oposto de visibility: hiddené visibility: visible. Da mesma forma, existe algum oposto para display: none?

Muitas pessoas ficam confusas ao descobrir como mostrar um elemento quando ele tem display: none, pois não é tão claro quanto usar a visibilitypropriedade.

Eu poderia apenas usar em visibility: hiddenvez de display: none, mas não dá o mesmo efeito, por isso não vou com ele.


35
Não sei por que isso está recebendo votos negativos e solicitações de fechamento. É um tópico (atualmente existem 143.368 perguntas de CSS no Stack Overflow), é um problema do mundo real e é uma boa pergunta para ajudar as pessoas a aprender o idioma corretamente.
Paul D. Waite

4
@ Paulo Talvez as pessoas não percebi que era uma resposta auto e pensei que era um chute de pesquisa (porque todo o esforço de pesquisa é na resposta)
Richard Tingle

11
Por que se preocupar em fazer uma pergunta se sua resposta é copiar / colar uma tabela de w3schools.com/cssref/pr_class_display.asp ?
Bill o Lagarto

1
@ Richardharding: ah, bom ponto. @MohammadAreebSiddiq: ah, não achei que sua resposta precisasse ser excluída. Apenas remover a grande lista de todos os displayvalores possíveis teria sido bom. (E isso é apenas a minha opinião é claro: talvez as pessoas realmente gostei que lista seja lá dentro.)
Paul D. Waite

você realmente deveria ter feito a resposta de Ilya Streltsyn a aceita. Ilya fornece uma "versão" da exibição: nenhuma que tem um oposto, que resolve o problema prático subjacente à sua pergunta, enquanto a resposta que você escolheu aceitar, em essência, apenas diz "não". Que com certeza é verdade, mas muito, muito, muito menos útil. Isso é para programadores, não para linguistas.
mathheadinclouds 27/02

Respostas:


176

display: nonenão tem um literal oposto como o visibility:hiddenfaz.

A visibilitypropriedade decide se um elemento é visível ou não. Portanto, possui dois estados (visible e hidden) opostos um ao outro.

A displaypropriedade, no entanto, decide quais regras de layout um elemento seguirá. Existem vários tipos diferentes de regras de como elementos irá estabelecer-se fora em CSS, por isso existem vários valores diferentes ( block, inline, inline-blocketc - veja a documentação para esses valores aqui ).

display:none remove completamente um elemento do layout da página, como se não estivesse lá.

Todos os outros valores para displayfazem com que o elemento faça parte da página; portanto, de certa forma, são todos opostos display:none.

Mas não há um valor que seja o inverso direto display:none- assim como não há um penteado que seja o oposto de "careca".


2
Percebo que você mencionou display: initialna resposta automática excluída - para navegadores que implementam CSS2.1 é sinônimo de display: inline. Ele não redefine displayo padrão do navegador para um determinado elemento - não é isso que "valor inicial" significa.
BoltClock

26
meu voto no exemplo 'careca' :) Exemplo muito fácil de entender!
Jesper Rønn-Jensen

1
Durante toda a leitura, estou pensando comigo mesmo "ótimo exemplo, sim, sim, eles são todos opostos a display:none" então você lê "assim como não há um estilo de cabelo que seja o oposto de careca " Uau mais 1, muito bem.
Chef_Code

2
Qualquer penteado é o oposto de careca.
precisa saber é o seguinte

@AdjunctProfessorFalcon: bem, mais ou menos. Eu diria que uma cabeça raspada no número um é muito menos oposta à careca do que uma tainha.
Paul D. Waite

83

Um verdadeiro oposto ao que display: nonenão existe (ainda).

Mas display: unseté muito próximo e funciona na maioria dos casos.

Do MDN (Mozilla Developer Network):

A palavra-chave CSS não configurada é a combinação das palavras-chave inicial e herdada. Como essas duas outras palavras-chave em todo o CSS, ele pode ser aplicado a qualquer propriedade CSS, incluindo a abreviação CSS all. Essa palavra-chave redefine a propriedade para seu valor herdado se herdar do pai ou para o valor inicial, se não. Em outras palavras, ele se comporta como a palavra-chave herdada no primeiro caso e como a palavra-chave inicial no segundo caso.

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

Observe também que display: revertestá sendo desenvolvido atualmente. Veja MDN para detalhes.


Que tal display: initial?
Flimm

31

Ao alterar elemento de displayem Javascript, em muitos casos, uma opção adequada para 'desfazer' o resultado de element.style.display = "none"é element.style.display = "". Isso remove a displaydeclaração do styleatributo, revertendo o valor real da displaypropriedade para o valor definido na folha de estilo do documento (para o padrão do navegador, se não for redefinido em outro lugar). Mas a abordagem mais confiável é ter uma classe em CSS como

.invisible { display: none; }

e adicionando / removendo esse nome de classe para / de element.className.


2
Se você deseja substituir .element { display: none }(definido na CSS lib, por exemplo) .element { display: '' !important }, não funcionará. Você precisa usar.element { display: unset !important }
tanguy_k 28/02

2
Eu falei sobre "desfazer" display:noneapenas em JavaScript. Obviamente, a string vazia não funcionará em CSS, pois é um valor inválido. No entanto, display: unsetvocê sugere que não restaurará, por exemplo, o padrão display:blockpara um <div>ou o padrão display:table-rowpara um <tr>, ele efetivamente transforma tudo em display:inline(assim como display:initial). Para restaurar o valor padrão do navegador para o elemento, existe display:revert, mas não é bem suportado ( caniuse.com/#feat=css-revert-value ).
Ilya Streltsyn

Essa deve ser a resposta aceita. A resposta aceita tem uma boa comparação com 'oposto de careca', mas não faz nada para ajudar o programador pobre a lidar com a implementação de "make careca" - "agora, arrume o cabelo". Esta resposta explica como lidar com esse problema prático. Element.style.display = '' é propenso a erros, porque o "cabelo antigo" pode não ser a exibição padrão, mas 'bloquear' ou 'célula da tabela' ou qualquer outra coisa. Remover a classe ".invisible", como aqui, é a única implementação sem erros de "colocar o cabelo de volta agora", tanto quanto eu posso ver. Então, faça assim, sempre
mathheadinclouds 27/02

6

você pode usar

display: normal;

Funciona normalmente .... É um pequeno hacking em css;)


2
Por que isso está diminuindo? Esta é uma má maneira de fazer isso ou? Funciona bem para tablerows, mas devo usar outra coisa?
precisa saber é o seguinte

4
O valor 'normal' não é um valor válido para a displaypropriedade, portanto é apenas ignorado e funciona como uma element.style.display = ''atribuição (veja minha resposta acima).
Ilya Streltsyn

27
então, em outras palavras, você poderia ter usado display: chunk norris;o mesmo efeito, com um pouco mais de chute.
Kevin B

1
Se você deseja substituir .element { display: none }(definido na CSS lib, por exemplo) .element { display: normal !important }, não funcionará. Você precisa usar.element { display: unset !important }
tanguy_k 28/02

4

Eu uso display:block; funciona para mim


Isso é útil apenas para elementos nos quais você deseja exibir block, não é o que você deseja geralmente para um inlineelemento como, <span>por exemplo.
Flimm

3

Como Paul explica, não há literalmente o oposto da exibição: nenhum em HTML, pois cada elemento tem uma exibição padrão diferente e você também pode alterar a exibição com uma classe ou estilo embutido etc.

No entanto, se você usar algo como jQuery, as funções show e hide se comportam como se houvesse o oposto do display none. Quando você oculta e mostra um elemento novamente, ele será exibido exatamente da mesma maneira que era antes de ser oculto. Eles fazem isso armazenando o valor antigo da propriedade display ao ocultar o elemento, para que, quando você o mostre novamente, ele seja exibido da mesma maneira que antes de ocultá-lo. https://github.com/jquery/jquery/blob/740e190223d19a114d5373758127285d14d6b71e/src/css.js#L180

Isso significa que, se você definir uma div, por exemplo, para exibir in-line ou bloco in-line e ocultá-la e mostrá-la novamente, será exibida novamente como exibição in-line ou bloco in-line, como era antes

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

roteiro:

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

Observe que a propriedade display da div permanecerá constante mesmo depois de ocultada (display: none) e mostrada novamente.


1
"display: table-cell" era o que eu precisava. Não foi mencionado em nenhuma outra resposta.
bendecko

1

No caso de uma folha de estilo para impressão, eu uso o seguinte:

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

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

Usei isso quando precisei imprimir um formulário contendo valores e os campos de entrada eram difíceis de imprimir. Então, adicionei os valores envolvidos em uma tag span.print_only (div.print_only foi usado em outro lugar) e, em seguida, apliquei a classe .no_print aos campos de entrada. Então, na tela, você veria os campos de entrada e, quando impressos, apenas os valores. Se você quisesse ter uma ideia, poderia usar o JS para atualizar os valores nas tags span quando os campos foram atualizados, mas isso não foi necessário no meu caso. Talvez não seja a solução mais elegante, mas funcionou para mim!


1

Você pode usar display: block

Exemplo:

<!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> 

0

Eu enfrentei esse desafio ao criar um aplicativo em que queria uma tabela oculta para certos usuários, mas não para outros.

Inicialmente, eu o configurei como display: none, mas display: bloco em linha para os usuários que eu queria vê-lo, mas tive os problemas de formatação que você pode esperar (colunas em consolidação ou geralmente bagunçadas).

A maneira como trabalhei foi mostrar primeiro a tabela e depois exibir "none: none" para os usuários que eu não queria ver. Dessa forma, ele foi formatado normalmente, mas depois desapareceu conforme necessário.

Uma solução lateral, mas pode ajudar alguém!



-2

visibilidade: oculto ocultará o elemento, mas o elemento é deles com DOM. E no caso de display: none, ele removerá o elemento do DOM.

Então você tem a opção para o elemento ocultar ou exibir. Mas uma vez que você o exclua (quero dizer, exibir nenhum), ele não terá um valor oposto claro. display possui vários valores como display: block, display: inline, display: inline-block e muitos outros. você pode conferir no W3C.


2
Por que não nenhum dos outros valores para display?
Paul D. Waite

1
Isso deveria ser uma lista abrangente? Não é.
Ry-


-3

Você pode usar isso display:block;e também adicionaroverflow:hidden;


1
Leia as respostas existentes antes de contribuir com as suas. Há uma resposta boa, bem votada e aceita de maio passado e também uma resposta com um total negativo de votos que é mais ou menos idêntico ao seu.
Quentin

Eu vi a resposta Display: Desativar não funciona tão bem quanto um bloco Display:. Minha opinião :) @Quentin
Bel

E display: blocknão funciona bem em um <span>ou um <td>... e uma resposta anterior já foi mencionada display: block.
Quentin

2
Você editou a resposta para mencionar overflow: hidden. Por quê? Qual o sentido de acrescentar isso? Não tem nada a ver com desfazer a display: none.
Quentin

-4

O melhor "oposto" seria retorná-lo ao valor padrão, que é:

display: inline

Só quero deixar claro que a propriedade display não tem um valor padrão, mas o elemento html possui. O valor padrão de um DIV seria display: block, um SPAN seria padrão para display: inline. Mas a propriedade de exibição por si só não tem um valor padrão.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.