O que são colunas CSS e como funcionam na prática
Quando você trabalha com layout de texto ou grade em CSS, o sistema de colunas multiplas é uma das ferramentas mais úteis e mais mal compreendidas. A propriedade column-count é a responsável por dividir um elemento em quantas partes uma coluna será segmentada automaticamente pelo navegador. Não há mágica — é apenas o navegador calculando a largura disponível e quebrando o conteúdo em faixas verticais. Eu usei isso em dezenas de projetos, desde newsletters até dashboards complexos. O problema é que muita gente aplica o valor sem entender o que acontece nos bastidores, e aí o layout quebra de formas imprevisíveis.
a coluna é dividida em quantas partes
A resposta curta depende do contexto. Em CSS puro, column-count define exatamente quantas colunas um bloco de conteúdo será dividido. Se você aplicar column-count: 3, o navegador vai dividir aquele elemento em três partes iguais (ou o mais próximo possível, considerando o padding e as gaps). Mas isso não significa que três colunas fixas aparecerão — o navegador ajusta dinamicamente baseado na largura do container. Em design gráfico ou tipografia editorial, uma coluna de texto pode ser dividida em sub-colunas para organizar conteúdo denso, como em jornais ou revistas. O padrão editorial clássico usa colunas simples de 60 a 75 caracteres por linha para legibilidade.
Como configurar colunas multiplas em CSS
Vamos direto ao código. A propriedade principal é column-count, mas existem variáveis importantes que todo mundo esquece de ajustar e que fazem diferença real no resultado final. A estrutura básica se parece com isso:
elemento {
column-count: 3;
column-gap: 2rem;
column-rule: 1px solid #ccc;
} O column-gap controla o espaço entre as divisões. O column-rule adiciona uma linha visual separadora, opcional mas útil para depuração. Sem o gap definido, o navegador usa um padrão que varia entre 1rem e 1.5rem dependendo do agente, o que gera inconsistências entre navegadores.
Uma coisa que praticamente ninguém menciona: o column-fill. Por padrão, ele vem como balance, o que significa que o navegador tenta distribuir o conteúdo igualmente entre todas as colunas. Em containers com conteúdo desbalanceado, isso causa colunas extremamente altas e outras curtas. Trocar para column-fill: auto faz com que cada coluna seja preenchida sequencialmente antes de ir para a próxima. Isso resolve o problema em layouts de cards ou lists com alturas variáveis.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Problemas reais que eu encontrei no campo
Em um projeto de intranet corporativa, eu precisei dividir uma lista de documentos em três colunas para caber em uma página A4 impressa. O column-count: 3 parecia a solução óbvia. O que deu errado foi que o navegador tratava cada bloco de texto como uma unidade indivisível devido a elementos com page-break-inside: avoid aplicados hereditariamente. O resultado foi duas colunas cheias e uma quase vazia. A solução que eu encontrei foi remover o page-break-inside: avoid dos filhos do container de colunas e aplicar apenas nos elementos que realmente precisavam de proteção contra quebra, usando seletores mais específicos. Isso resolveu o problema em cerca de 10 minutos depois de horas de debug.
Outro ponto que merece atenção: imagens dentro de colunas. O navegador não quebra imagens entre colunas automaticamente. Se uma imagem for mais larga que uma única coluna, ela vai transbordar e quebrar o layout. A workaround mais confiável é aplicar width: 100% e max-width: 100% nas imagens dentro do container com colunas, forçando o redimensionamento proporcional.
Pegadinhas e limitações que ninguém conta
Primeiro, colunas CSS multiplas não funcionam bem com posicionamento absoluto. Elementos position: absolute dentro de um container com column-count são posicionados em relação ao container pai inteiro, não em relação a uma coluna específica. Isso quebra layouts que dependem de posicionamento relativo às colunas. Segundo, a ordem de leitura do conteúdo não é necessariamente da esquerda para a direita como você esperaria. Em direction: ltr, o fluxo é natural. Mas em direction: rtl, o navegador inverte a ordem das colunas, e isso pode confundir leitores se o conteúdo não for preparado para isso.
Terceiro, o suporte a colunas CSS é bom na maioria dos navegadores modernos, mas ainda há inconsistências no Firefox em relação ao cálculo do column-gap em combinações com scroll interno. Se seu container tiver overflow: auto, teste no Firefox separadamente. Um insight contra-intuitivo: column-count não é a mesma coisa que grid ou flexbox com múltiplas colunas. Colunas CSS são projetadas para fluxo de texto contínuo, onde o conteúdo flui de uma coluna para a próxima verticalmente. Se você precisa de um grid de cards independentes, use display: grid com grid-template-columns. Colunas CSS vão criar sequência de leitura vertical entre colunas, o que é perfeito para artigos longos mas desastroso para galerias de produtos.
Alternativa quando colunas CSS não bastam
Se o seu caso de uso envolve layouts complexos com alinhamento preciso, headers fixos, ou necessidade de controlar cada célula individualmente, abandon column-count. Vá para CSS Grid com grid-template-columns: repeat(3, 1fr). É mais verboso, mas oferece controle total e evita as armadilhas que descrevi acima. Para impressão, o módulo CSS Paged Media oferece column-count com suporte a page-break, mas o comportamento varia enormemente entre renderizadores. Se o output impresso é crítico, faça testes em cada navegador alvo antes de confiar na implementação automática.
Resumo prático
a coluna é dividida em quantas partes depende exclusivamente do valor que você define em column-count no CSS. O navegador faz o resto, mas com limitações conhecidas. A regra prática é: use column-count para texto fluído em múltiplas colunas, use grid para layouts de componentes. Teste no Firefox. E sempre defina column-gap explicitamente para evitar surpresas. O tempo que eu economia usando column-count corretamente em vez de construir grids manuais é significativo — normalmente entre 30 minutos e 2 horas por projeto, dependendo da complexidade. Mas esse ganho só existe se você souber quando NÃO usar a técnica também.