Menu

Overflow CSS: hidden, scroll, auto, clip e reticências

overflow decide o que acontece com um conteúdo que não cabe na caixa: mostrar, cortar ou pôr barras de rolagem. Veja visible, hidden, scroll, auto e clip, overflow-x e overflow-y, reticências no texto e os efeitos colaterais do overflow no layout.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

O que o overflow faz

Quando o conteúdo é maior que a caixa (uma altura fixa, uma palavra longa, uma tabela larga), ele transborda. A propriedade overflow decide o que acontece com o excesso:

ValorO que você vêContêiner de rolagem
visible (padrão)O conteúdo vaza da caixa e fica por cima do que vem depoisNão
hiddenCortado na borda do padding, sem barras de rolagem (script ainda consegue rolar)Sim
clipCortado, e sem rolagem nenhuma, nem por scriptNão
scrollSempre mostra barras de rolagem, mesmo que o conteúdo caibaSim
autoBarras de rolagem só quando o conteúdo não cabeSim

No macOS e nos celulares, as barras de rolagem ficam por cima do conteúdo e somem, então scroll e auto podem parecer iguais até você rolar.

Criar uma caixa com rolagem

Uma caixa só transborda se algo limita o tamanho dela. Um height ou max-height, mais overflow-y: auto, transforma uma lista longa em um painel com rolagem:

max-height é melhor que height aqui: uma lista curta continua curta, e só uma lista longa rola. Uma região com rolagem sem nenhum conteúdo focável dentro deve receber tabindex="0", para que quem usa teclado também consiga rolá-la.

overflow-x e overflow-y

Os dois eixos podem ser definidos separadamente. O uso comum é uma tabela larga que rola para o lado dentro do contêiner, em vez de alargar a página inteira:

Uma regra para lembrar: se um eixo é hidden, scroll ou auto, um valor visible no outro eixo vira auto. Então overflow-x: hidden sozinho pode criar uma barra de rolagem vertical inesperada. overflow-x: clip não tem esse efeito:

.a { overflow-x: hidden; }  /* overflow-y computes to auto */
.b { overflow-x: clip; }    /* overflow-y stays visible */

Cortar texto com reticências

text-overflow: ellipsis troca o fim cortado de uma linha por "…". Ele precisa de três coisas juntas: uma largura limitada, um texto que não pode quebrar linha e o overflow escondido:

O line clamp com prefixo -webkit- funciona no Chrome, no Firefox e no Safari. Os leitores de tela continuam lendo o texto completo, então as palavras cortadas não se perdem para eles.

Efeitos colaterais do overflow

Definir overflow com qualquer valor que não seja visible ou clip muda mais do que o corte:

  • Ele contém floats e as margens dos filhos. O elemento forma um novo contexto de formatação de bloco, então cresce para envolver filhos com float. display: flow-root faz o mesmo sem cortar nada.
  • Ele quebra o position: sticky abaixo dele. Um filho sticky gruda no contêiner de rolagem mais próximo; se esse contêiner não rola, nada gruda.
  • Ele corta filhos com posição absoluta (quando o elemento que transborda também é o bloco que os contém), incluindo dropdowns e tooltips, e corta também as sombras dos filhos.

Esconder a barra de rolagem

Você pode manter uma caixa com rolagem e esconder a barra com scrollbar-width: none. Use com moderação: sem a barra, muitos leitores não percebem que existe mais conteúdo. scrollbar-gutter: stable faz o contrário: reserva o espaço da barra para o conteúdo não se deslocar quando uma barra aparece.

Erros comuns

  • Esperar overflow sem limite de tamanho. Uma caixa sem height ou max-height cresce em vez de transbordar.
  • overflow: hidden no body para "consertar" a rolagem horizontal. Encontre o elemento largo demais (muitas vezes um width fixo, uma URL longa ou um 100vw com barra de rolagem).
  • Reticências sem white-space: nowrap. O texto quebra linha, então nada transborda na horizontal e nenhuma reticência aparece.
  • overflow-x: hidden criando uma barra de rolagem vertical. Use clip.
  • Um dropdown cortado pelo card. O overflow: hidden do card o corta; mude a regra de overflow de lugar ou renderize o dropdown fora dele.

Perguntas frequentes

O que overflow: hidden faz?

Corta o conteúdo que não cabe na caixa do padding do elemento, sem barras de rolagem. A parte escondida ainda pode ser alcançada por script ou quando algo dentro dela recebe foco.

Qual a diferença entre overflow auto e scroll?

scroll sempre reserva as barras de rolagem, mesmo quando o conteúdo cabe. auto só mostra a barra quando o conteúdo é maior que a caixa, que é o que você normalmente quer.

Como fazer uma div com rolagem?

Limite o tamanho e permita a rolagem: max-height: 300px; overflow-y: auto;. Sem um limite de height ou max-height, a div cresce com o conteúdo e nunca transborda.

Por que overflow-x: hidden também cria uma barra de rolagem vertical?

Se um eixo é hidden, scroll ou auto, um valor visible no outro eixo é calculado como auto. Use overflow-x: clip, que não cria um contêiner de rolagem e deixa o outro eixo visível.

Como pôr reticências (...) em um texto que transborda?

Para uma linha: white-space: nowrap; overflow: hidden; text-overflow: ellipsis; em um elemento com largura limitada. Para várias linhas, use display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden;.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR