Box Model no CSS: padding, border e margin explicados com exemplos

Você já tentou afastar um botão do texto, aumentou um número no CSS e o botão ficou maior em vez de se afastar? Ou definiu uma largura de 300px e o elemento apareceu com 350px na tela? Se isso já aconteceu, o culpado tem nome: você ainda não estava enxergando o Box Model, o modelo de caixa do CSS.

Entender esse conceito é o que separa quem “vai chutando valores até ficar bom” de quem monta layouts com precisão. Neste artigo vamos destrinchar as quatro camadas de toda caixa — content, padding, border e margin — com ilustrações, exemplos de código e as armadilhas mais comuns que vejo em sala de aula.

Todo elemento HTML é uma caixa

Para o navegador, não existe parágrafo, imagem ou botão: existe uma caixa retangular. Um <p> é uma caixa, um <img> é uma caixa, até um <a> no meio de uma frase é uma caixa. E toda caixa é formada por quatro camadas, uma envolvendo a outra, como as camadas de uma cebola.

Diagrama do Box Model: margin por fora, depois border, padding e content no centro margin border padding content texto, imagem, outros elementos top bottom left right
As quatro camadas do Box Model, de dentro para fora: content → padding → border → margin.
Content · ConteúdoA parte mais interna

É onde fica o conteúdo real do elemento: texto, imagens ou outros elementos HTML. Suas dimensões são controladas por width e height.

Padding · PreenchimentoO espaço entre o conteúdo e a borda

Dá “espaço para respirar” ao conteúdo. Detalhe importante: o fundo (background) do elemento se estende por baixo do padding.

Border · BordaA linha que contorna tudo

Envolve o padding e o conteúdo. Pode ser visível ou invisível e ter cor, largura e estilo (sólida, tracejada, pontilhada…).

Margin · MargemO espaço do lado de fora

Cria distância entre este elemento e os vizinhos. É sempre transparente: o fundo do elemento não pinta a margem.

Guarde esta frase, porque ela resolve 90% das dúvidas: padding afasta o conteúdo da borda (espaço de dentro); margin afasta a caixa das outras caixas (espaço de fora).

Content: width e height

O conteúdo é a área que você dimensiona com width (largura) e height (altura). Na maioria das vezes é melhor deixar a altura livre, crescendo conforme o texto, e controlar só a largura:

.caixa {
  width: 300px;        /* largura do conteúdo */
  max-width: 100%;     /* nunca passa da largura da tela */
  background: #8FB6E6;
}

Padding: o espaço de dentro

Você pode definir o padding de cada lado separadamente:

.caixa {
  padding-top: 10px;
  padding-right: 20px;
  padding-bottom: 10px;
  padding-left: 20px;
}

Ou, bem mais comum, usar a forma abreviada (shorthand) em uma única linha:

.caixa {
  padding: 10px 20px;   /* 10px em cima e embaixo, 20px nas laterais */
}

Como o fundo se estende pelo padding, é ele que faz um botão parecer “gordinho” e clicável. Um link com padding: 12px 24px e fundo colorido vira instantaneamente um botão.

Border: a linha que contorna

A borda tem três ingredientes: largura, estilo e cor. Sem o estilo, ela simplesmente não aparece — esse é um esquecimento clássico.

.caixa {
  border-width: 3px;
  border-style: solid;   /* solid, dashed, dotted, double, none... */
  border-color: #C4262E;

  /* ou tudo junto, na forma abreviada: */
  border: 3px solid #C4262E;
}

Também dá para estilizar só um lado, o que é ótimo para destaques e citações:

.destaque {
  border-left: 5px solid #C4262E;
  padding-left: 16px;
}

E, embora não faça parte das quatro camadas, vale conhecer a prima da borda: border-radius, que arredonda os cantos da caixa (incluindo o fundo).

.cartao { border-radius: 12px; }
.avatar { border-radius: 50%; }   /* vira um círculo se a caixa for quadrada */

Margin: o espaço de fora

A margem funciona com a mesma sintaxe do padding, mas age do lado de fora da borda:

.caixa {
  margin: 20px;            /* 20px de distância em todos os lados */
  margin-bottom: 40px;     /* ou só em um lado */
}

O truque do margin: auto

Quando um elemento de bloco tem largura definida, margin: 0 auto divide o espaço sobrando igualmente entre esquerda e direita — ou seja, centraliza a caixa na horizontal:

.container {
  width: 90%;
  max-width: 1100px;
  margin: 0 auto;   /* 0 em cima/embaixo, auto nas laterais */
}

Cuidado: margens verticais se “fundem”

Se um parágrafo tem margin-bottom: 30px e o próximo tem margin-top: 20px, a distância entre eles não será 50px, e sim 30px. As margens verticais de elementos de bloco vizinhos se sobrepõem e prevalece a maior. Isso se chama margin collapse, acontece só na vertical (nunca na horizontal) e não acontece com padding.

Comparação: margens verticais somadas (50px) versus fundidas (30px) O que você espera O que acontece Parágrafo 1 margin-bottom 30px margin-top 20px Parágrafo 2 distância: 50px Parágrafo 1 30px (a maior vence) Parágrafo 2 distância: 30px
Margin collapse: entre dois blocos empilhados, só a maior margem vertical conta.

A regra do relógio: como ler 1, 2, 3 ou 4 valores

Padding e margin aceitam de um a quatro valores na forma abreviada. Com quatro valores, a ordem segue os ponteiros do relógio, começando pelo topo: top → right → bottom → left.

Regra do relógio: top, right, bottom, left em sentido horário caixa 1 · top 2 · right 3 · bottom 4 · left
Quatro valores = sentido horário a partir do topo.
Você escreveO navegador entende
padding: 10px;10px nos quatro lados
padding: 10px 20px;10px em cima e embaixo · 20px na esquerda e direita
padding: 10px 20px 30px;10px em cima · 20px nas laterais · 30px embaixo
padding: 10px 20px 30px 40px;top 10 · right 20 · bottom 30 · left 40

Quanto espaço a caixa ocupa de verdade?

Aqui mora a surpresa dos 350px do começo do artigo. Por padrão, width define só a largura do conteúdo. Padding e borda são somados por fora. Veja:

.caixa {
  width: 300px;
  padding: 20px;
  border: 5px solid #1d2327;
  margin: 10px;
}
Largura visível = 300 (content) + 20 + 20 (padding) + 5 + 5 (border) = 350px
Espaço ocupado na página = 350 + 10 + 10 (margin) = 370px

Em layouts com colunas, esses pixels extras são exatamente o que faz a última coluna “cair” para a linha de baixo.

box-sizing: border-box, a solução

A propriedade box-sizing muda a regra do jogo. Com border-box, o width passa a incluir padding e borda: se você pediu 300px, a caixa terá 300px visíveis, e o conteúdo é que encolhe para caber.

Comparação entre box-sizing content-box (350px) e border-box (300px) content-box (padrão) conteúdo = 300px caixa = 350px

border-box conteúdo = 250px caixa = 300px

Mesmo CSS (width 300px, padding 20px, border 5px): com border-box, a caixa respeita a largura que você pediu.

É tão mais previsível que a maioria dos projetos profissionais aplica essa regra a todos os elementos logo no início do CSS:

*,
*::before,
*::after {
  box-sizing: border-box;
}
Dica de sala de aula: coloque essas quatro linhas no topo de todo CSS novo que você começar. Elas eliminam uma categoria inteira de bugs de layout antes mesmo de eles aparecerem.

Mão na massa: um cartão usando as quatro camadas

Vamos juntar tudo em um componente real. Repare como cada camada tem um papel claro:

<div class="cartao">
  <h4>Curso de HTML e CSS</h4>
  <p>Aprenda a construir páginas do zero, entendendo cada camada do layout.</p>
  <a href="#" class="botao">Quero aprender</a>
</div>
.cartao {
  box-sizing: border-box;
  max-width: 320px;
  margin: 0 auto;              /* MARGIN: centraliza o cartão */
  padding: 24px;               /* PADDING: afasta o texto da borda */
  border: 2px solid #e2e5ea;   /* BORDER: contorno discreto */
  border-radius: 12px;
  background: #fff;
}

.cartao h4 { margin: 0 0 8px; }     /* margin só embaixo do título */
.cartao p  { margin: 0 0 16px; }    /* espaço antes do botão */

.botao {
  display: inline-block;       /* permite padding vertical em um link */
  padding: 10px 20px;          /* deixa o botão "clicável" */
  border-radius: 8px;
  background: #C4262E;
  color: #fff;
  text-decoration: none;
}

O resultado:

Curso de HTML e CSS

Aprenda a construir páginas do zero, entendendo cada camada do layout.

Quero aprender

Por que o display: inline-block no botão? Links são elementos inline, e em elementos inline o padding e a margin verticais não empurram as linhas vizinhas. Trocando para inline-block, o link passa a respeitar o box model completo.

Enxergue o Box Model no navegador

Você não precisa imaginar as camadas: o navegador mostra. Abra qualquer página, clique com o botão direito em um elemento e escolha Inspecionar (ou pressione F12). Na aba Computed (Calculado) aparece o diagrama do box model daquele elemento, com os valores reais de margin, border, padding e content. Passe o mouse sobre o elemento no código e cada camada é destacada em uma cor diferente na página.

Esse é o melhor hábito que um iniciante pode criar: quando o layout fizer algo estranho, inspecione antes de mudar valores no escuro.

Resumo rápido

CamadaOnde ficaPinta o fundo?Propriedade
ContentNo centroSimwidth, height
PaddingEntre o conteúdo e a bordaSimpadding
BorderContornando o paddingTem cor própriaborder
MarginFora da bordaNão (sempre transparente)margin

Desafio para praticar

Crie três cartões lado a lado, cada um com width: 33.33%, padding: 20px e border: 2px solid. Primeiro, sem box-sizing: observe o terceiro cartão quebrar para a linha de baixo. Depois, adicione box-sizing: border-box e veja os três se alinharem. Por último, abra o Inspecionar e confira a largura calculada de cada um nos dois casos. Se você entender por que isso acontece, entendeu o Box Model.

Washington Paiva — instrutor de Desenvolvimento de Sistemas · washington.pro.br

Compartilhe:

Profissional engajado com as últimas tendências tecnológicas e de gestão, buscando continuamente aprimorar suas competências e compartilhar seu conhecimento.

Publicar comentário