Introdução: por que essa questão preocupa todo desenvolvedor frontend
\n\nImagine a situação: você está escrevendo uma página interativa com um menu suspenso, janela modal ou acordeão. O usuário clica em um botão, e o bloco deve aparecer ou desaparecer suavemente. Mas e se você acidentalmente tentar animar um elemento já oculto? Ou, ao contrário, mostrar algo que já está visível? O resultado — bugs, interface instável e usuários frustrados.
\n\nÉ por isso que a pergunta "How do I check if an element is hidden in jQuery?" é uma das mais populares no Stack Overflow. Ela tem mais de mil respostas, e isso não é por acaso. Saber determinar corretamente a visibilidade de um elemento é uma habilidade básica que economizará horas de depuração.
\n\nNeste artigo, vamos analisar detalhadamente como verificar se um elemento está oculto com jQuery. Você conhecerá as armadilhas, as diferenças entre display:none e visibility:hidden, e aprenderá a escrever código confiável. Vamos lá!
Método .is(':hidden') — sua principal ferramenta
\n\nA maneira mais simples e comum de verificar se um elemento está oculto é usar o método .is() com o pseudosseletor :hidden. O jQuery fornece isso nativamente.
Como funciona
\nO seletor :hidden no jQuery seleciona elementos que:
- \n
- Possuem a propriedade CSS
display: none; \n - São elementos do tipo
<input type="hidden">; \n - Possuem largura e altura iguais a zero (ex.:
width: 0; height: 0); \n - São descendentes de um pai oculto (herdam a invisibilidade). \n
Veja como é feita a verificação mais simples:
\n\n// Verifica se o elemento com id="myDiv" está oculto\nif ($('#myDiv').is(':hidden')) {\n console.log('Elemento oculto!');\n} else {\n console.log('Elemento visível.');\n}\n\nVerificação de visibilidade com .is(':visible')
\nPara a lógica inversa, use o seletor :visible:
if ($('#myDiv').is(':visible')) {\n console.log('Elemento visível na página.');\n}\n\nAmbas as abordagens funcionam rapidamente e são intuitivas. Mas há um detalhe: e se o elemento estiver oculto com visibility: hidden ou opacity: 0? O jQuery considera esses elementos como visíveis, o que muitas vezes surpreende os iniciantes.
Armadilhas: visibility: hidden e opacity: 0
\n\nMuitos desenvolvedores acreditam erroneamente que :hidden reage a qualquer forma de ocultar um elemento. Isso não é verdade.
Exemplo com visibility: hidden
\nA propriedade visibility: hidden torna o elemento invisível, mas ele ainda ocupa espaço na página. O jQuery considera esse elemento visível, pois suas dimensões não são zero.
<div id="myBox" style="visibility: hidden;">Estou invisível, mas ocupo espaço</div>\n\n<script>\nconsole.log( $('#myBox').is(':hidden') ); // false\nconsole.log( $('#myBox').is(':visible') ); // true\n</script>\n\nExemplo com opacity: 0
\nO mesmo se aplica à transparência:
\n\n<div id="transparentBox" style="opacity: 0;">Transparente, mas visível para o jQuery</div>\n\n<script>\nconsole.log( $('#transparentBox').is(':hidden') ); // false\n</script>\n\nSe o seu código usa fadeIn()/fadeOut() ou animação de transparência, a verificação padrão com :hidden vai falhar. Para esses casos, é necessário verificar a propriedade CSS específica.
Como verificar visibility: hidden ou opacity: 0
\n\nQuando você precisa saber se um elemento está oculto especificamente com essas propriedades, use .css():
Verificação de visibility
\nvar isVisibilityHidden = ($('#myElement').css('visibility') === 'hidden');\nif (isVisibilityHidden) {\n console.log('Elemento oculto via visibility');