Propriedade display: none: Escondendo elementos
Aprenda a ocultar elementos da página de forma eficaz.
No desenvolvimento web, muitas vezes precisamos ocultar elementos da visualização do usuário. Isso pode ser para criar menus que aparecem ao clicar, exibir mensagens de erro condicionalmente, ou simplesmente remover um elemento que não é mais necessário em um determinado contexto. A propriedade display: none; é uma das formas mais comuns e eficazes de fazer isso.
Quando você aplica display: none; a um elemento, é como se ele nunca tivesse existido na página. Ele é completamente removido do fluxo do documento, não ocupa nenhum espaço e não é renderizado pelo navegador.
Pense em display: none; como um "botão de delete" para o elemento. Ele simplesmente desaparece, e o espaço que ele ocupava é preenchido pelos outros elementos, como se ele nunca estivesse lá.
Como funciona display: none;
- Remoção Completa: O elemento e todo o seu conteúdo (incluindo seus filhos) são completamente removidos do fluxo normal do documento.
- Não Ocupa Espaço: O elemento não ocupa nenhum espaço na página. Os outros elementos se rearranjam como se o elemento oculto não existisse.
- Não Interage: O elemento não é clicável, não é acessível por leitores de tela e não participa de eventos JavaScript.
- Performance: É eficiente para ocultar grandes seções da página, pois o navegador não precisa renderizá-las.
Quando usar display: none;
- Menus Dropdown/Hamburger: Elementos que aparecem e desaparecem com base na interação do usuário.
- Mensagens Condicionais: Exibir mensagens de sucesso, erro ou aviso apenas quando necessário.
- Conteúdo Oculto por Padrão: Seções de conteúdo que só devem ser reveladas após uma ação específica (ex: "Leia Mais").
- Elementos Temporários: Elementos que são adicionados e removidos dinamicamente via JavaScript.
- Responsividade: Ocultar elementos específicos em determinados tamanhos de tela (embora outras técnicas como
visibility: hidden;ou media queries comdisplay: block;sejam mais comuns para isso).
Exemplo Prático:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Display: none</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
background-color: #f4f4f4;
}
.box {
width: 150px;
height: 80px;
background-color: lightblue;
border: 1px solid blue;
margin: 10px;
text-align: center;
line-height: 80px;
color: #333;
font-weight: bold;
display: inline-block;
}
.hidden-box {
display: none; /* Este elemento será completamente oculto */
background-color: lightcoral; /* A cor não será vista */
}
.message {
background-color: lightgreen;
border: 1px solid green;
padding: 15px;
margin: 20px 0;
text-align: center;
font-weight: bold;
display: none; /* Oculto por padrão */
}
.show-message-button {
padding: 10px 20px;
background-color: #007bff;
color: white;
border: none;
cursor: pointer;
margin-top: 20px;
}
</style>
</head>
<body>
<h2>Exemplo de `display: none;`</h2>
<div class="box">Caixa Visível 1</div>
<div class="box hidden-box">Caixa Oculta</div>
<div class="box">Caixa Visível 2</div>
<p>Observe que a "Caixa Oculta" não aparece e não ocupa espaço, fazendo com que a "Caixa Visível 2" se posicione logo após a "Caixa Visível 1".</p>
<hr>
<h2>Exemplo com JavaScript</h2>
<button class="show-message-button" onclick="document.getElementById('dynamicMessage').style.display = 'block'; this.style.display = 'none';">Mostrar Mensagem</button>
<div id="dynamicMessage" class="message">
Parabéns! Você clicou no botão e revelou esta mensagem!
</div>
<p>Este parágrafo está abaixo da mensagem, mas só será empurrado para baixo quando a mensagem for exibida.</p>
</body>
</html>
Resultado:
- A "Caixa Oculta" não será visível e não deixará um buraco na linha.
- Ao clicar no botão "Mostrar Mensagem", a mensagem aparecerá e empurrará o parágrafo de baixo para baixo, pois ela passará a ocupar espaço no fluxo do documento.
display: none; vs visibility: hidden;
É importante não confundir display: none; com visibility: hidden;. Embora ambos ocultem um elemento, eles o fazem de maneiras muito diferentes:
display: none;: Remove o elemento completamente do fluxo do documento. Ele não ocupa espaço e não é renderizado.visibility: hidden;: Oculta o elemento visualmente, mas ele continua ocupando o espaço no fluxo do documento. É como se o elemento estivesse lá, mas transparente. (Veremosvisibility: hidden;em uma lição futura).
Boas Práticas:
- Interação Dinâmica:
display: none;é ideal para elementos que precisam ser mostrados e ocultados dinamicamente via JavaScript, pois a remoção do fluxo do documento garante que o layout se ajuste perfeitamente. - Acessibilidade: Elementos com
display: none;não são lidos por leitores de tela. Se você precisa ocultar um elemento visualmente, mas mantê-lo acessível para leitores de tela,display: none;não é a melhor opção (considere técnicas comoposition: absolute; left: -9999px;ouclip-path). - Performance: Para grandes blocos de conteúdo que não precisam ser renderizados inicialmente,
display: none;é uma boa escolha.
Dominar display: none; é uma habilidade essencial para criar interfaces interativas e dinâmicas, controlando a visibilidade e o fluxo dos elementos na sua página.