Essa pergunta está muito morta, mas estou adicionando um comentário porque recentemente me encontrei em uma situação que outras pessoas podem enfrentar. Eu precisava ocultar um elemento e mantê-looffsetTop e display:nonedefini-lo offsetTopcomo 0. Minha solução aqui foi usar, em visibility: hiddenseguida, defina a largura e a altura como 0. Depois que precisei tornar o elemento visível novamente, removi os três atributos usando Javascript. Um pouco de uma solução hacky, mas funciona bem em praticamente todos os casos de uso.
rappatic
Respostas:
302
Tente definir display:nonepara ocultar e defina display:blockpara mostrar.
não é possível remover o elemento do dom man. usando esta opção também. leia a pergunta
Pranay Rana
26
nem todos os itens devem ser display: block, alguns terão que ser definidos como display: inline(como <span>ou <a>ou <img>elementos DOM).
Mauro
2
@ pranay a pergunta diz para escondê-los para não removê-los do DOM.
Mauro
6
@ pranay: A questão não está muito bem expressa, mas Huusom está resolvendo o problema que o usuário está tendo.
Claudio Redi 28/05
1
Uma melhoria: crie uma classe CSS chamada hiddenwith display: none. Adicione a classe a um elemento para ocultá-lo, remova-o show. Ao removê-lo, a displaypropriedade é restaurada para o elemento padrão.
Infelizmente, isso não funciona para mim - usando o display: none ainda deixa um espaço em branco.
mbuc91 19/05/19
15
Usar display:noneé uma boa opção apenas para remover um elemento, mas também será removido para os leitores de tela . Também há discussões se isso afeta o SEO. Há um artigo curto e bom sobre esse tópico em A List Apart
Se você realmente quer apenas ocultar e não remover um elemento, use melhor:
div {
position: absolute;
left:-999em;}
Assim, também pode ser lido pelos leitores de tela.
A única desvantagem desse método é que esse DIV é realmente renderizado e pode afetar o desempenho , especialmente em telefones celulares.
se você optar por posicionar algo absoluto com o qual possa executar visibility: hidden;, na maioria dos casos , digamos que você tenha outros elementos absolutos que não terão conflito pelo espaço, apenas conflito de z-index. Apenas por esconder um elemento com o qual eu iriavisibility
Dejan.S
10
Olha, em vez de usar visibility: hidden;use display: none;. A primeira opção oculta, mas ainda ocupa espaço, e a segunda opção oculta e não ocupa espaço.
A resposta a esta pergunta é dizer para usar display: none e display: block, mas isso não ajuda a alguém que está tentando usar transições css para mostrar e ocultar conteúdo usando a propriedade de visibilidade.
Isso também me deixou louco, porque o uso do display mata qualquer transição de css.
Uma solução é adicionar isso à classe que está usando visibilidade:
overflow:hidden
Para que isso funcione, depende do layout, mas deve manter o conteúdo vazio na div em que reside.
Ele pergunta sobre removê-lo visualmente, "como se eles não estivessem no DOM". Não se trata de removê-los do DOM real.
Arve Systad
A pergunta afirma não removê-los do DOM apenas para fazê-los desaparecer. as though they are not in the DOM at all (but without actually removing them from the DOM)
Mauro
@pranay: visibility: hiddeninterrompe a exibição do conteúdo, mas ainda usa espaço vertical / horizontal; display: none remove o espaço vertical / horizontal do elemento.
Mauro
Não, não faz. visibilidade: oculto; torna o elemento invisível, mas ainda ocupa espaço. Mostrar nenhum; faz o documento se comportar como se nunca estivesse lá.
Olly Hodgson 28/05
1
Exclua esta resposta então.
BalusC
3
A alternância displaynão permite transições CSS suaves. Em vez disso, alterne o visibilitye o max-height.
Isso é útil quando você trabalha com animações. Porque estamos escondendo o elemento fora da área visível usando algo parecido transform: translateX(-100%). Nós não queremosdisplay: none
zhuhang.jasper
2
aqui está uma opinião diferente sobre como colocá-los de volta após a exibição: nenhum. não use display: block / inline etc. Em vez disso (se estiver usando javascript), defina css property display como '' (ou seja, em branco)
offsetTop
edisplay:none
defini-looffsetTop
como 0. Minha solução aqui foi usar, emvisibility: hidden
seguida, defina a largura e a altura como 0. Depois que precisei tornar o elemento visível novamente, removi os três atributos usando Javascript. Um pouco de uma solução hacky, mas funciona bem em praticamente todos os casos de uso.Respostas:
Tente definir
display:none
para ocultar e definadisplay:block
para mostrar.fonte
display: block
, alguns terão que ser definidos comodisplay: inline
(como<span>
ou<a>
ou<img>
elementos DOM).hidden
withdisplay: none
. Adicione a classe a um elemento para ocultá-lo, remova-o show. Ao removê-lo, adisplay
propriedade é restaurada para o elemento padrão.use o estilo como
fonte
Usar
display:none
é uma boa opção apenas para remover um elemento, mas também será removido para os leitores de tela . Também há discussões se isso afeta o SEO. Há um artigo curto e bom sobre esse tópico em A List ApartSe você realmente quer apenas ocultar e não remover um elemento, use melhor:
Assim, também pode ser lido pelos leitores de tela.
A única desvantagem desse método é que esse DIV é realmente renderizado e pode afetar o desempenho , especialmente em telefones celulares.
fonte
visibility: hidden;
, na maioria dos casos , digamos que você tenha outros elementos absolutos que não terão conflito pelo espaço, apenas conflito dez-index
. Apenas por esconder um elemento com o qual eu iriavisibility
Olha, em vez de usar
visibility: hidden;
usedisplay: none;
. A primeira opção oculta, mas ainda ocupa espaço, e a segunda opção oculta e não ocupa espaço.fonte
A resposta a esta pergunta é dizer para usar display: none e display: block, mas isso não ajuda a alguém que está tentando usar transições css para mostrar e ocultar conteúdo usando a propriedade de visibilidade.
Isso também me deixou louco, porque o uso do display mata qualquer transição de css.
Uma solução é adicionar isso à classe que está usando visibilidade:
Para que isso funcione, depende do layout, mas deve manter o conteúdo vazio na div em que reside.
fonte
História sobre
display:none
evisibility: hidden
visibility:hidden
significa que a tag não está visível, mas há espaço alocado para ela na página.display:none
significa ocultar completamente elementos com seu espaço. (embora você ainda possa interagir com ele através do DOM)fonte
display:none
ocultar e definirdisplay:block
para mostrar.fonte
as though they are not in the DOM at all (but without actually removing them from the DOM)
visibility: hidden
interrompe a exibição do conteúdo, mas ainda usa espaço vertical / horizontal; display: none remove o espaço vertical / horizontal do elemento.A alternância
display
não permite transições CSS suaves. Em vez disso, alterne ovisibility
e omax-height
.fonte
transform: translateX(-100%)
. Nós não queremosdisplay: none
aqui está uma opinião diferente sobre como colocá-los de volta após a exibição: nenhum. não use display: block / inline etc. Em vez disso (se estiver usando javascript), defina css property display como '' (ou seja, em branco)
fonte
isso oculta o conteúdo e também não deixa espaço vazio.
fonte
acima do meu conhecimento, é possível de 4 maneiras
<button style="display:none;"></button>
#buttonId{ display:none; }
$('#buttonId').prop('display':'none');
&$("#buttonId").css('opacity', 0);
fonte
display: nenhum é o melhor para evitar ocupar espaço em branco na página
fonte
Use
!important
se você for forçado a substituir estilos CSS existentes.fonte