10 Maneiras de ocultar elementos em CSS
Existem múltiplas formas de ocultar um elemento em CSS, mas diferem na forma como afectam a acessibilidade, layout, animação, desempenho, e manipulação de eventos.
Animação
algumas opções de ocultar CSS são tudo ou nada. O elemento ou é totalmente visível ou totalmente invisível e não há nenhum estado intermediário. Outros, como a transparência, podem ter uma gama de valores, pelo que as animações CSS interpoladas se tornam possíveis.
Acessibilidade
Cada método descrito abaixo esconde visualmente um elemento, mas pode ou não esconder o conteúdo das tecnologias de assistência. Por exemplo, um leitor de ecrã pode ainda anunciar um pequeno texto transparente. Outras propriedades CSS ou atributos ARIA tais como aria-hidden="true"
podem ser necessários para descrever a acção apropriada.
Cuidado que as animações também podem causar desorientação, enxaquecas, convulsões, ou outro desconforto físico para algumas pessoas. Considerar a utilização de uma consulta prefers-reduced-motion
media para desligar as animações quando especificado nas preferências do utilizador.
Event Handling
Ocultação irá impedir que os eventos sejam desencadeados nesse elemento ou não terão efeito – isto é, o elemento não é visível mas ainda pode ser clicado ou receber outras interacções do utilizador.
Performance
Após um browser carregar e analisar o modelo de objecto HTML DOM e CSS, a página é renderizada em três etapas:
- Layout: gerar a geometria e posição de cada elemento
- Paint: desenhar os pixels de cada elemento
- Composição: posicionar as camadas do elemento na ordem apropriada
Um efeito que apenas provoca alterações na composição é visivelmente mais suave do que aqueles que afectam o layout. Em alguns casos, o navegador pode também usar aceleração de hardware.
opacidade e filtro: opacidade()
O opacity: N
e filter: opacity(N)
propriedades podem ser passadas um número entre 0 e 1, ou uma percentagem entre 0% e 100% denotando totalmente transparente e totalmente opaco em conformidade.
Ver a Caneta
hide with opacity: 0 by SitePoint (@SitePoint)
on CodePen.
Existe pouca diferença prática entre os dois em navegadores modernos, embora filter
deva ser usado se forem aplicados múltiplos efeitos ao mesmo tempo (borrão, contraste, escala de cinzentos, etc.)
A capacidade pode ser animada e oferece grande desempenho, mas tenha cuidado que um elemento totalmente transparente permanece na página e pode desencadear eventos.
metric | |
---|---|
suporte de navegador | bom, mas o IE apenas suporta opacity 0 a 1 |
acessibilidade | content não lido se 0 ou 0% estiver definido |
layout afectado? | no |
rendering required | composição |
performance | best, pode usar aceleração de hardware |
quadros de animação possíveis? | yes |
eventos desencadeados quando escondidos? | yes |
color Alpha Transparency
opacity
afecta todo o elemento, mas também é possível definir as propriedades color
background-color
, e border-color
separadamente. Aplicar um canal alfa zero usando rgba(0,0,0,0)
ou similar torna um item totalmente transparente:
Ver a Caneta
hide with color alpha by SitePoint (@SitePoint)
on CodePen.
Cada propriedade pode ser animada separadamente para criar efeitos interessantes. Note-se que a transparência não pode ser aplicada a elementos com fundos de imagem a menos que sejam gerados usando linear-gradient
ou semelhante.
O canal alfa pode ser definido com:
-
transparent
: totalmente transparente (entre animações não são possíveis) -
rgba(r, g, b, a)
: vermelho, verde, azul, e alfa -
hsla(h, s, l, a)
: tonalidade, saturação, leveza, e alfa -
#RRGGBBAA
e#RGBA
metric | |
---|---|
browser support | good, mas o IE apenas suporta transparent e rgba |
acessibilidade | contente ainda lido |
layout afectado? | no |
rendering required | pintar |
bom, mas não tão rápido como opacity |
|
quadros de animação possíveis? | yes |
eventos desencadeados quando escondidos? | yes |
transformação
The transform
property can be used to translate (move), scale, rotate, or skew an element. A scale(0)
ou translate(-999px, 0px)
off-screen irá esconder o elemento:
Veja a Caneta
hide with transform: scale(0); por SitePoint (@SitePoint)
on CodePen.
transform
oferece excelente desempenho e aceleração de hardware porque o elemento é efectivamente movido para uma camada separada e pode ser animado em 2D ou 3D. O espaço de layout original permanece como está, mas nenhum evento será desencadeado por um elemento totalmente escondido.
metric | |
---|---|
-suporte de browser | bom |
acessibilidade | contente ainda lido |
layout afectado? | não – as dimensões originais permanecem |
composição | |
best, pode usar aceleração de hardware | |
quadros de animações possíveis? | yes |
eventos desencadeados quando escondidos? | no |
clip-path
The clip-path
property cria uma região de recorte que determina que partes de um elemento são visíveis. Usando um valor como clip-path: circle(0);
irá esconder completamente o elemento.
Ver a Caneta
hide with clip-path by SitePoint (@SitePoint)
on CodePen.
clip-path
oferece espaço para animações interessantes, embora só deva ser confiada em browsers modernos.
metric | |
---|---|
-suporte de browser | apenas browsers modernos |
content ainda lido por algumas aplicações | |
não – as dimensões originais permanecem | |
pintar | razoável |
quadros de animação possíveis? | yes, em navegadores modernos |
events triggered when hidden? | no |
visibilidade
O visibility
propriedade pode ser definida para visible
ou hidden
para mostrar e esconder um elemento:
ver a Caneta
hide with visibility: hidden by SitePoint (@SitePoint)
on CodePen.
O espaço utilizado pelo elemento permanece no lugar a menos que seja utilizado um valor collapse
.
metric | |
---|---|
-suporte de browser | excellent |
content não lido | |
não, a menos que collapse seja utilizado |
|
rendering required | composição, a menos que collapse seja usado |
performance | bom |
quadros de animação possíveis? | não |
eventos desencadeados quando escondidos? | no |
display
display
é provavelmente o método de ocultação de elementos mais utilizado. Um valor de none
remove efectivamente o elemento como se nunca tivesse existido no DOM.
Veja a Caneta
hide with display: none by SitePoint (@SitePoint)
on CodePen.
No entanto, é possivelmente a pior propriedade CSS a utilizar na maioria dos casos. Não pode ser animada e desencadeará um layout de página a menos que o elemento seja movido para fora do fluxo de documentos usando position: absolute
ou a nova propriedade contain
seja adoptada.
display
é também sobrecarregado, com opções como block
inline
table
flexbox
grid
e mais. A reposição ao valor correcto após display: none;
pode ser problemática (embora unset
possa ajudar).
metric | |
---|---|
-suporte de browser | excellent |
content não lido | |
yes | |
rendering required | layout |
no |
HTML hidden attribute
The HTML hidden
attribute can be added to any element:
<p hidden> Hidden content</p>
para aplicar o estilo padrão do navegador:
{ display: none;}
Esta tem os mesmos benefícios e falhas que display: none
, embora possa ser útil quando se utiliza um sistema de gestão de conteúdos que não permite mudanças de estilo.
Posição absoluta
A propriedade position
permite que um elemento seja movido do seu padrão static
posição dentro do layout da página usando top
bottom
left
, e right
. Um elemento absolute
-posicionado pode portanto ser movido para fora do ecrã com left: -999px
ou semelhante:
Veja a Caneta
hide with position: absolute by SitePoint (@SitePoint)
on CodePen.
metric | |
---|---|
suporte de navegador | excellent, a menos que utilize position: sticky |
acessibilidade | contente ainda lido |
layout afectado? | yes, if positioning is changed |
depends | |
performance | reasonable if careful |
quadros deanimação possíveis? | yes, on top bottom left , e right |
eventos desencadeados quando escondidos? | yes, mas pode ser impossível interagir com um elemento fora da tela |
Overlay Another Element
Um elemento pode ser visualmente escondido posicionando outro sobre a parte superior que tenha a mesma cor que o fundo. Neste exemplo, um ::after
pseudo-elemento é sobreposto, embora qualquer elemento criança possa ser usado:
Ver a Caneta
hide with an overlay by SitePoint (@SitePoint)
on CodePen.
Embora tecnicamente possível, esta opção exigia mais código do que outras opções.
metric | |
---|---|
excellent | |
content ainda lido | |
não, se absolutamente posicionado | |
pintura | |
razoável se cuidadoso | |
quadros de animações possíveis? | yes |
eventos desencadeados quando escondidos? | yes, quando um pseudo ou elemento criança é sobreposto |
Reduzir dimensões
Um elemento pode ser escondido minimizando as suas dimensões usando width
height
padding
border-width
e/ou font-size
. Também pode ser necessário aplicar overflow: hidden;
para garantir que o conteúdo não se espalha.
Ver a Caneta
esconde com largura ou altura por SitePoint (@SitePoint)
em CodePen.
Interesting animated effects are possible, but performance is notably better with transform
.
metric | |
---|---|
excellent | |
content ainda lido | |
yes | |
rendering required | layout |
no |
Hidden Choices
display: none
tem sido a solução preferida para esconder elementos durante muitos anos, mas tem sido substituída por opções mais flexíveis e animáveis. Ainda é válida, mas talvez apenas quando se quer esconder permanentemente conteúdo de todos os utilizadores. transform
ou opacity
são melhores escolhas quando se considera o desempenho.
P>Leve as suas competências CSS para o nível seguinte com CSS Master. Aprenda arquitectura CSS, depuração, propriedades personalizadas, layout avançado e técnicas de animação, como usar CSS com SVG, e mais.