ToolActToolAct

Ferramenta de Formatação CSS

CSS de Entrada
Saída
Linhas: 1Caracteres: 0Bytes: 0
Linhas: 1Caracteres: 0

O que é Formatação CSS?

O formatador CSS organiza folhas de estilo em uma estrutura consistente e legível. Seletores, declarações, media queries, keyframes, variáveis e saída de pré-processadores ficam mais fáceis de inspecionar do que em código minificado ou mal indentado. Isso ajuda em depuração, revisão, manutenção de design system, ensino e entendimento de estilos copiados. A formatação não muda automaticamente cascata, especificidade, herança nem compatibilidade de navegador. Uma regra pequena pode ter grande efeito se carregar tarde ou usar seletor forte. Em produção, ainda é preciso verificar estados responsivos, regressão visual, lint, build e o contexto do componente.

Como Usar

Como usar

  1. Cole ou digite o código CSS na caixa de entrada à esquerda
  2. Selecione o tamanho da indentação e o estilo de formatação
  3. Clique em 'Formatar' para embelezar o código ou em 'Minificar' para reduzir o tamanho
  4. Veja o resultado à direita com destaque de sintaxe
  5. Clique em 'Copiar' para copiar para a área de transferência

Opções de estilo de formatação

ExpandidoCada propriedade em sua própria linha, ideal para desenvolvimento e depuração
CompactoSeletor e propriedades na mesma linha, ideal para consulta rápida

Atalhos de teclado

  • Ctrl + EnterFormatar
  • Ctrl + Shift + CCopiar resultado

Dicas de formatação

  • A formatação altera espaços em branco e layout, e não o comportamento do seletor. Ainda assim, teste a folha de estilo após editar código complexo de cascata ou media query.
  • Minifique somente quando a saída for usada para entrega ou incorporação. Mantenha uma cópia legível do código-fonte para revisão e manutenção.

Casos de uso

Transformar CSS comprimido em regras legíveisCole CSS de um bundle, campo de CMS, devtools do navegador ou modelo de e-mail e formate com 2 espaços, 4 espaços ou tabulações para que seletores, declarações e blocos de media aninhados fiquem mais fáceis de revisar. Uma vez expandido, a ordem das regras também se torna auditável, o que ajuda ao rastrear uma sobrescrita de cascata ou uma media query que dispara mais tarde do que o esperado.
Minificar CSS editado para uma pequena entregaApós alterar um snippet, mude para o modo minificar para remover comentários e espaços em branco desnecessários, depois copie ou baixe o resultado como um arquivo CSS para incorporação rápida em um modelo de e-mail, protótipo no Codepen ou página estática. Formate a versão legível primeiro para que fique claro quais seletores foram alterados, e valide o resultado minificado com stylelint ou uma passagem de linter do projeto, já que a minificação não verifica especificidade de seletores, propriedades duplicadas ou sobrescritas de cascata não intencionais.
Usar para snippets, sem garantias de análise CSS completaO formatador é uma implementação leve no navegador que preserva strings entre aspas, conteúdo de url() e comentários dentro de declarações, mas não substitui um pipeline PostCSS completo para sintaxe de fornecedor, source maps, linting ou validação de build de produção. Compile Sass, Less ou CSS Modules para CSS puro primeiro, depois passe a saída por esta ferramenta para snapshots de revisão; confie em stylelint, PurgeCSS ou uma ferramenta de auditoria CSS para a verificação de produção.
Normalizar saída com prefixos de fornecedor ou pré-processadorFormate a saída compilada de Sass, Less ou PostCSS para que os prefixos -webkit-, -moz- e -ms- fiquem alinhados e a ordem de cascata das media queries fique visível à primeira vista durante a revisão de código. O bloco expandido também facilita identificar regras @supports ou @container aninhadas ao auditar prioridade de cascata.
Escolher largura de indentação que corresponda ao guia de estilo do projetoEscolha 2 espaços, 4 espaços ou tabulações desde o início para que o snippet formatado caia diretamente no repositório sem uma passagem posterior do linter, o que é mais importante ao colar em um arquivo compartilhado de design system. Dois espaços tendem a manter o aninhamento profundo legível, enquanto tabulações permitem que cada contribuidor escolha sua própria largura visual.

Princípio técnico

A formatação de CSS é um problema de tokenização e pretty-printing, não uma análise completa. Um analisador CSS compatível com a especificação (CSS Syntax Module Level 3, Recomendação W3C) é mais pesado do que um formatador precisa: ele constrói uma AST com regras de estilo, at-rules, declarações e valores de componentes, e resolve casos extremos de análise (strings não terminadas, chaves desbalanceadas, propriedades com prefixo de fornecedor). Esta página utiliza um tokenizador mais leve que percorre o fluxo de caracteres, reconhece as mesmas classes de tokens (ident, at-keyword, hash, string, bad-string, number, dimension, percentage, url, function, punctuation, comment) e os emite como uma lista plana; em seguida, o pretty-printer remonta os tokens com a indentação escolhida, estilo de chaves e regras de espaços em branco. As duas unidades estruturais no CSS são blocos de regra (selector { declarations }) e blocos de at-rule (@media, @supports, @container, @keyframes envolvem um ou mais blocos de regra). O formatador percorre um fluxo de tokens e controla a profundidade das chaves: um `{` incrementa a profundidade (e uma nova linha + indentação segue), um `}` decrementa a profundidade (e a indentação reduz para corresponder ao `{` correspondente). Seletores são emitidos literalmente — o formatador não os analisa, porque analisar um seletor como `.foo > .bar:hover:not(.baz)` é um problema separado (CSS Selectors Level 4). Seletores são mantidos byte a byte, apenas com espaços em branco normalizados (múltiplos espaços colapsados em um, espaços à direita removidos) para que um `.a,.b,.c` minificado se mantenha como `.a, .b, .c`. Declarações são formatadas com um estilo escolhido: 'expanded' (cada propriedade em sua própria linha, o mais legível), 'compact' (uma regra por linha, múltiplas declarações compactadas, o mais comum em CSS de produção) ou 'compressed' (minificado, sem espaços em branco, a menor saída possível). Os dois-pontos após o nome da propriedade são sempre seguidos por um espaço; o valor é emitido literalmente, exceto por algumas normalizações (zeros finais removidos de `0.500` para `.5`, unidades removidas de `0px` para `0`, os truques clássicos de minificação de CSS). A minificação é a direção oposta: remover comentários, colapsar espaços em branco dentro e entre declarações, remover o ponto e vírgula final após a última declaração de um bloco (permitido conforme CSS 2.1 §4.1.7), mesclar blocos de regra adjacentes com o mesmo seletor e contexto de mídia, e normalizar valores de cor (`#ffffff` -> `#fff`, `rgb(255,255,255)` -> `#fff` quando possível). Minificadores modernos (cssnano, lightningcss, clean-css) também fazem otimizações estruturais: mesclar propriedades longhand em shorthand (`margin-top: 1px; margin-right: 1px; margin-bottom: 1px; margin-left: 1px;` -> `margin: 1px;`), remover declarações duplicadas dentro de uma regra, e remover regras que não correspondem a nenhum elemento (`div:has-no-children { color: red; }` em passes de eliminação de código morto). Para saída minificada, a página aplica as transformações padrão; para saída legível, a página aplica a indentação e o estilo de chaves escolhidos. O CSS Nesting Module (CSSWG, rascunho 2023, Baseline 2024) introduz aninhamento nativo: `.a { color: red; & .b { color: blue; } }` agora é CSS válido em navegadores modernos (Chrome 112+, Firefox 117+, Safari 16.5+). Aninhamento pré-2024 exigia reescrita por pré-processadores (Sass `&` ou Less `&` para encadear seletores). A página trata ambos: CSS aninhado por pré-processador é formatado como se fosse SCSS/Less (preservando o `&`), e CSS aninhado nativo (sem necessidade de `&`) é formatado pela caminhada de blocos de regra independentemente. Outras at-rules que a página trata: @keyframes e @counter-style recebem um corpo de declarações, não blocos de regra aninhados, então se formatam de forma diferente (declarações dentro da at-rule, sem chaves aninhadas). @media, @supports, @container, @layer recebem um corpo de blocos de regra. @import, @charset, @namespace são apenas de nível superior e são emitidos em sua própria linha. @property (propriedades personalizadas registradas) recebe um bloco de declarações. @font-face é um único bloco de regra com declarações complexas sem seletor. A página trata cada uma pelo formato do corpo definido pela especificação, não pelo nome. A armadilha de formatação mais comum é quebrar o conteúdo dentro de literais de string: `content: "hello world";`, `font-family: "Arial Black", sans-serif;`, `background: url("image.png")` — o formatador não deve colapsar o espaço dentro da string, não deve dividir a URL em `/`, e não deve tocar no texto do comentário dentro de `/* ... */`. Um tokenizador que controla corretamente o estado de string e comentário é a diferença entre um formatador que preserva o conteúdo do usuário e um que o corrompe. O tokenizador desta página é feito à mão e é pequeno o suficiente para verificar visualmente; formatadores de produção usam postcss ou lightningcss, que carregam a mesma obrigação em seus léxicos internos.

  • Análise léxica (CSS Syntax Level 3): percorre o fluxo de caracteres, emite tokens ident / at-keyword / hash / string / number / dimension / percentage / url / function / punctuation / comment. Strings e comentários têm estado — um tokenizer com comportamento incorreto quebra `content: "hello world";`.
  • Duas unidades estruturais: blocos de regra (selector { declarations }) e blocos de at-rule (@media, @supports, @container, @layer envolvem blocos de regra). O formatador caminha pela profundidade das chaves e indenta cada `{` em um novo nível; o `}` correspondente reduz o nível.
  • Seletores são emitidos literalmente, com espaços em branco normalizados: `.a,.b,.c` -> `.a, .b, .c`. O formatador não analisa seletores (CSS Selectors Level 4 é um problema separado) — apenas limpa espaços e vírgulas.
  • Estilos de saída: 'expanded' (uma declaração por linha, mais legível), 'compact' (uma regra por linha, comum em produção), 'compressed' (sem espaços em branco, minificado). Dois-pontos + espaço após o nome da propriedade é a única regra de formato universal.
  • Minificação: remove comentários, colapsa espaços em branco, remove `;` finais, mescla regras com mesmo seletor, normaliza `#ffffff` -> `#fff`, `0.500` -> `.5`, `0px` -> `0`. Mesclagens estruturais: longhand -> shorthand (`margin-top: 1px; ... margin-left: 1px;` -> `margin: 1px;`).
  • CSS Nesting (CSSWG 2023, Baseline 2024): `.a { & .b { ... } }` agora é CSS nativo no Chrome 112+, Firefox 117+, Safari 16.5+. Aninhamento de pré-processador pré-2024 (Sass `&`, Less) ainda é válido; a página formata ambos caminhando pela estrutura de blocos de regra.
  • Corpos de at-rule: @keyframes e @counter-style recebem declarações; @media / @supports / @container / @layer recebem blocos de regra; @import / @charset / @namespace são instruções de nível superior; @property e @font-face recebem blocos de declarações. A página trata cada uma pelo formato do corpo definido pela especificação, não pelo nome.
  • Limite de segurança: literais de string (content, nomes de fontes, URLs) e texto de comentários são deixados intocados por todas as transformações. Um round-trip byte-exato é o teste de correção para um formatador CSS — quebre uma string de content e o usuário nota imediatamente.

Exemplos

Formatação de CSS minificado

Entrada:  .btn{color:red;background:#fff;padding:8px 16px;border-radius:4px}
Saída:
.btn {
  color: red;
  background: #fff;
  padding: 8px 16px;
  border-radius: 4px;
}

Expansão de regras aninhadas

Entrada:  .card{padding:16px}.card h2{margin:0 0 8px}.card p{color:#666}
Saída:
.card {
  padding: 16px;
}
.card h2 {
  margin: 0 0 8px;
}
.card p {
  color: #666;
}

Formatação de Media Query

Entrada:  @media(max-width:768px){.nav{display:none}.menu{width:100%}}
Saída:
@media (max-width: 768px) {
  .nav {
    display: none;
  }
  .menu {
    width: 100%;
  }
}

Perguntas frequentes

O que o formatador de CSS faz?

Reformata o CSS deixando o layout legível: indentação consistente, uma declaração por linha, espaços em torno dos dois-pontos e uma regra por linha. Não altera a especificidade dos seletores nem os valores das propriedades — apenas espaçamento e posicionamento das chaves.

Ele também minifica CSS?

Sim, se houver uma opção 'minify' ou 'compress'. A minificação remove comentários e espaços em branco, encurta cores hexadecimais (#ffffff → #fff) e remove o ponto e vírgula final da última declaração de uma regra. O caminho inverso (beautify) restaura a legibilidade.

Por que ele não corrigiu meu CSS inválido?

É um formatador, não um validador. Chaves não pareadas, ponto e vírgula faltando ou propriedades não reconhecidas passam direto. Use um linter de CSS (Stylelint) ou carregue seu CSS no painel de DevTools do navegador para ver erros de sintaxe.

Lida com CSS moderno (nesting, container queries, custom properties)?

A maioria das versões usa um parser de CSS que entende a sintaxe atual, incluindo @container, @supports, custom properties (--var), nesting e @layer. Se o parser for mais antigo, sintaxes novas podem ficar formatadas de forma estranha — cole seu CSS e revise o resultado antes de usar.

Meus comentários serão preservados?

Sim. Comentários em bloco /* ... */ são preservados pelo formatador. Alguns minificadores removem comentários por padrão; desative se você precisar deles. Comentários de linha única // não são CSS padrão e podem ser removidos (eles existem no SCSS, não no CSS).

O CSS é enviado para algum servidor?

Não. A formatação acontece no seu navegador usando um parser/printer de CSS em JavaScript. O CSS colado não é transmitido.

Posso configurar a indentação?

Sim — geralmente 2 ou 4 espaços, ou tabulações. Escolha o que combinar com o estilo já usado no seu projeto. Indentação misturada no original é normalizada para o valor escolhido.