Articles

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:

  1. Layout: gerar a geometria e posição de cada elemento
  2. Paint: desenhar os pixels de cada elemento
  3. 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.

>th>effect

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

>th>effect

td>performance

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.

>th>effect

rendering required

performance

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.

>th>effect

>acessibilidade

layout afectado?

rendering required

desempenho

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.

>th>effect

>acessibilidade

layout afectado?

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 blockinlinetableflexboxgrid e mais. A reposição ao valor correcto após display: none; pode ser problemática (embora unset possa ajudar).

>th>effect

>acessibilidade

layout afectado?

performance>td>poor quadros de animação possíveis?no eventos desencadeados quando escondidos?

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 topbottomleft, 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.

>th>effect

rendering required

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 topbottomleft, 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.

>th>effect

suporte de browser

>acessibilidade

aumento afectado?

renda necessária

desempenho

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 widthheightpaddingborder-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.

>th>effect

suporte de browser

>acessibilidade

aumento afectado?

performance>td>poor quadros de animação possíveis?yes eventos desencadeados quando escondidos?

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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *