Frontend

Você está dimensionando elementos do jeito errado. E o CSS já tem a solução há anos.

Você define width: 200px. Funciona... até virar min-width, max-width e um calc() ilegível. E se o conteúdo dissesse o tamanho ideal?

Você está dimensionando elementos do jeito errado. E o CSS já tem a solução há anos.

O problema clássico: você tem um botão. O texto do botão muda dependendo do contexto — às vezes é "Salvar", às vezes é "Salvar e continuar editando". Você define width: 200px. Funciona... até não funcionar. Aí vira min-width, depois max-width, depois um calc() que ninguém mais consegue ler.

Existe uma abordagem diferente. Em vez de você decidir o tamanho do elemento, você deixa o conteúdo decidir. É exatamente isso que os valores intrínsecos de dimensionamento do CSS fazem.

Dois jeitos de pensar tamanho em CSS

Antes de entrar nos três valores, vale entender a distinção que os documenta:

Dimensionamento extrínseco é quando você impõe um tamanho ao elemento — width: 300px, width: 50%. Você decide, o elemento obedece.

Dimensionamento intrínseco é quando o tamanho emerge do conteúdo. O elemento diz qual é o seu tamanho ideal, e o CSS respeita isso. min-content, max-content e fit-content são valores intrínsecos.

min-content

min-content

O menor tamanho possível sem causar overflow. Para texto, equivale à palavra mais longa.

max-content

max-content

O tamanho ideal se o espaço fosse infinito. Sem quebra de linha, sem compressão.

fit-content

fit-content

O meio-termo inteligente: cresce até o max-content, encolhe até o espaço disponível.

min-content: o menor tamanho que não quebra nada

Com min-content, o elemento encolhe até o seu limite mínimo viável. Para um bloco de texto, esse limite é a palavra mais longa — o CSS vai quebrar linha em cada espaço até sobrar apenas o termo que não pode ser dividido.

TYPESCRIPT
.card {  width: min-content;}/* O card vai ter a largura exata da sua palavra ou imagem mais larga */

O caso de uso mais elegante é o clássico de <figure> com legenda. Sem nada, o elemento de figura é um bloco e ocupa 100% do container. Com min-content, ele abraça a imagem — e a legenda obedece o mesmo limite.

TYPESCRIPT
figure {  width: min-content;}figcaption {  font-size: 0.85rem;  color: #666;  /* Segue automaticamente a largura da imagem */}

max-content: espaço infinito, tamanho real

max-content é a resposta pra pergunta: "qual seria o tamanho ideal desse elemento se o espaço não fosse problema?" O CSS calcula o tamanho como se tivesse espaço ilimitado disponível — sem quebras de linha forçadas, sem compressão.

TYPESCRIPT
.tooltip {  width: max-content;  /* Expande até caber todo o texto numa linha */}.nav-item {  width: max-content;  /* Cada item ocupa exatamente o espaço do seu label */}

O aviso importante: se o conteúdo for mais largo do que o container pai, vai ter overflow. max-content não é responsivo por natureza — ele é preciso.

✕ Overflow acontece

TYPESCRIPT
.container { width: 300px; }.filho {  width: max-content;  /* texto longo = overflow */}
✓ Uso correto

TYPESCRIPT
.badge {  width: max-content;  /* conteúdo curto e previsível */  white-space: nowrap;}

fit-content: o mais inteligente dos três

fit-content combina os dois anteriores de forma adaptativa. O comportamento é: cresce até o max-content, mas nunca mais do que o espaço disponível — e jamais menor do que o min-content.

TYPESCRIPT
.button {  width: fit-content;  /* Abraça o texto — sem padding excessivo, sem overflow */}.card-titulo {  width: fit-content;  /* Ocupa só o que o título precisa */}

Existe também a versão função, fit-content(valor), que adiciona um teto máximo explícito:

TYPESCRIPT
.coluna-sidebar {  width: fit-content(300px);  /* Cresce com o conteúdo, mas nunca passa de 300px */}

Como usar nos contextos de Grid e Flexbox

Os valores intrínsecos ganham mais poder ainda dentro de Grid e Flexbox, porque controlam diretamente o comportamento das trilhas e dos itens:

TYPESCRIPT
/* Grid: coluna que abraça o conteúdo, outra que preenche o resto */.layout {  display: grid;  grid-template-columns: max-content 1fr;  /* sidebar com largura exata do conteúdo | main área que cresce */}/* Flexbox: item que não encolhe além do seu conteúdo mínimo */.flex-item {  flex-basis: min-content;  flex-grow: 1;}
TYPESCRIPT
/* minmax com conteúdo intrínseco — colunas que nunca ficam pequenas demais */.grid-cards {  display: grid;  grid-template-columns: repeat(auto-fit, minmax(min-content, 1fr));  gap: 1rem;}

Animar entre valores intrínsecos

Por muito tempo, animar de height: 0 pra height: auto era impossível no CSS. Animações pra valores de sizing como min-content e fit-content também não funcionavam.

De impossível a suave: animação de altura intrínseca 1. Fechado height: 0 ▶ Accordion conteúdo oculto Antes: impossível animar para auto Chrome 129+ interpolate-size: allow-keywords 2. Aberto height: fit-content ▼ Accordion Item 1 Item 2 Item 3 3. Transição suave transition: height 0.3s ease ◀ Accordion Item 1 ← animando... → /* Ativa no documento inteiro */ :root { interpolate-size : allow-keywords } .open { height : fit-content } Sem JavaScript — apenas CSS nativo Valores intrínsecos (auto, min-content, fit-content) agora interpoláveis
Transição de height: 0 para fit-content com interpolate-size

O Chrome 129 mudou isso com interpolate-size:

TYPESCRIPT
/* Ativa animações pra valores intrínsecos no documento inteiro */:root {  interpolate-size: allow-keywords;}.accordion-content {  height: 0;  overflow: hidden;  transition: height 0.3s ease;}.accordion-content.open {  height: fit-content;  /* Agora anima suavemente — sem JavaScript */}

Onde cada um se encaixa

Valor

Comportamento

Melhor uso

min-content

Menor tamanho sem overflow

figure + legenda, colunas de grid compactas

max-content

Tamanho ideal com espaço infinito

tooltips, badges, nav items previsíveis

fit-content

Cresce até o disponível, sem exceder

botões, títulos, navegação centralizada

fit-content(x)

fit-content com teto explícito

sidebars, colunas com limite máximo


Quiz interativo

CSS Quiz

Responda e valide seu entendimento.

1. Qual é a principal diferença entre o dimensionamento extrínseco e o dimensionamento intrínseco no CSS?
2. Como o valor `min-content` se comporta quando aplicado à largura de um parágrafo de texto?
3. Qual é a principal característica do valor `max-content`?
4. Por que o valor `fit-content` é frequentemente descrito como o mais 'inteligente' entre os valores intrínsecos?
5. Qual técnica de layout pode ser simplificada usando `width: fit-content` e `margin: auto`?
6. Sobre o suporte à animação de valores intrínsecos, o que a propriedade `interpolate-size` introduziu em 2024?
7. Considere um elemento `<figure>` contendo uma imagem e uma legenda. Qual valor de largura aplicado ao `<figure>` garante que ele não seja mais largo que a própria imagem?
8. Qual é a função do parâmetro `x` em `fit-content(x)`?
9. Em quais propriedades de layout os valores `min-content`, `max-content` e `fit-content` podem ser utilizados?
10. O que acontece se você usar `max-content` em um item cuja largura ideal é de $500px$, mas o container pai tem apenas $300px$?