Modelo de Caixa

O Modelo de Caixa (Box Model) é um dos conceitos fundamentais do CSS e descreve como cada elemento HTML é representado visualmente como uma caixa retangular na página. Essa caixa não se limita apenas ao conteúdo do elemento, mas é formada por quatro camadas, que juntas definem o espaço ocupado pelo elemento e sua relação com os demais.

No centro da caixa está o conteúdo (content), que pode ser texto, imagem ou outros elementos. Ao redor do conteúdo existe o preenchimento (padding), que cria um espaço interno entre o conteúdo e a borda. A próxima camada é a borda (border), que contorna a caixa e pode ter espessura, estilo e cor personalizados. Por fim, há a margem (margin), que define o espaço externo, separando a caixa de outros elementos na página.

Em termos de cálculo, a largura e a altura total de um elemento no navegador não são apenas os valores definidos em width e height. Elas incluem também os valores de padding, border e margin. Por exemplo, um elemento com width: 200px; padding: 10px; border: 5px solid; margin: 20px; terá, na prática, uma largura total de 200 + 20 (padding) + 10 (bordas) = 240px, além do espaço extra de 20px de margem ao redor.

O que torna o Box Model essencial para entender como os layouts são construídos no CSS. Ele explica porque, muitas vezes, um elemento ocupa mais espaço do que o esperado e orienta o desenvolvedor na hora de alinhar, dimensionar e espaçar os elementos corretamente em uma página. Para facilitar o controle, a propriedade box-sizing pode ser usada: o valor padrão content-box considera apenas o conteúdo em width e height, enquanto border-box inclui padding e border dentro dessas medidas, simplificando cálculos em projetos modernos.

Margin, Border, Padding, Content

O Box Model define que cada elemento HTML é composto por quatro camadas principais. No centro está o content (conteúdo), que pode ser texto, imagem ou outro elemento. Em volta dele temos o padding (preenchimento), que cria um espaço interno entre o conteúdo e a borda. Logo após vem a border (borda), que envolve o elemento e pode ser configurada em espessura, estilo e cor. Por fim, a camada mais externa é a margin (margem), responsável por gerar espaço entre a caixa do elemento e as caixas vizinhas. A soma dessas partes determina o espaço real ocupado pelo elemento na página.

Box-sizing

A propriedade box-sizing controla como o navegador calcula as dimensões de um elemento. O valor padrão, content-box, considera que width e height se aplicam apenas ao conteúdo, acrescentando padding e border por fora. Isso pode aumentar a dimensão final além do esperado. Já o valor border-box inclui o conteúdo, o padding e a border dentro das medidas definidas, tornando mais previsível o cálculo de largura e altura em layouts modernos. Essa configuração é amplamente utilizada em projetos responsivos.

Dimensões (width, height, max/min)

As propriedades width e height definem respectivamente a largura e a altura de um elemento. Além delas, existem max-width e min-width, bem como max-height e min-height, que limitam as dimensões máximas e mínimas permitidas. Essas propriedades são fundamentais para o controle de layouts adaptativos, pois evitam que elementos fiquem pequenos ou grandes demais em telas diferentes, garantindo consistência visual.

Overflow

A propriedade overflow define o que acontece quando o conteúdo de um elemento ultrapassa as dimensões estabelecidas. O valor visible (padrão) permite que o conteúdo transborde para fora da caixa. O valor hidden oculta o que ultrapassar os limites. Já scroll adiciona barras de rolagem sempre, independentemente da necessidade, enquanto auto exibe barras de rolagem apenas quando o conteúdo excede as dimensões. Essa propriedade é essencial para controlar o fluxo e a legibilidade de conteúdos em caixas limitadas.

Atividade

Nesta atividade, vamos construir passo a passo exemplos práticos para entender como o CSS organiza e controla os elementos de uma página. Dividimos o conteúdo em cinco partes numeradas de 0 a 4, cada uma com foco em um conceito importante. No (0) começamos pela base, ajustando a tipografia: margens de títulos e parágrafos, a fonte da página e o destaque para trechos de código. Em seguida, no (1) exploramos o Box Model, que é a forma como o navegador representa cada elemento em camadas — content, padding, border e margin. No (2) vamos comparar o comportamento do box-sizing, entendendo a diferença entre content-box (padrão) e border-box (muito usado em layouts modernos). Já no (3) trabalhamos com as dimensões de um elemento, usando width, height, min-width e max-width para mostrar a diferença entre caixas fixas e adaptáveis. Por fim, no (4) analisamos a propriedade overflow, que define o que acontece quando o conteúdo “transborda” da caixa, testando os valores visible, hidden, scroll e auto. Assim, ao final, teremos uma visão clara e prática de como o CSS controla o espaço, o tamanho e o comportamento dos elementos em uma página web.

(0) - Tipografia básica (não afeta os conceitos do Box Model).

body: margin de 16px em toda a página, criando espaçamento nas bordas; fonte do sistema (system-ui), Arial ou sans-serif, para leitura limpa.

body {
  margin: 16px;
  font-family: system-ui, Arial, sans-serif;
}    

(1) - Simulação do Box Model (margin, border, passing, content)

O Box Model define margin, border, padding e content. margin: espaço externo transparente (12px). border: contorno azul de 12px. padding: espaço interno entre conteúdo e borda. background: cor de fundo do content. box-shadow: cria uma “faixa” verde ao redor, simulando uma margem colorida.

.box-model {
  margin: 12px;
  border: 12px solid #1e66ff;
  padding: 12px;
  background: #eaf3ff;
  box-shadow: 0 0 0 12px #03f68d;
}

(2) - Box-sizing (comparação direta)

O Box Model define margin, border, padding e content. margin: espaço externo transparente (12px). border: contorno azul de 12px. padding: espaço interno entre conteúdo e borda. background: cor de fundo do content. box-shadow: cria uma “faixa” verde ao redor, simulando uma margem colorida.

.box-model {
  margin: 12px;
  border: 12px solid #1e66ff;
  padding: 12px;
  background: #eaf3ff;
  box-shadow: 0 0 0 12px #03f68d;
}

(3) Dimensões (with / height / min /max)

Largura fixa de 220px e altura fixa de 80px. Possui borda amarela (#e2b100), fundo amarelo claro (#fff4cc) e padding interno de 8px. Resultado: uma caixa rígida, útil para componentes de tamanho controlado.

.fixed {
  width: 220px;
  height: 80px;
  border: 2px solid #e2b100;
  background: #fff4cc;
  padding: 8px;
}

(4) Overflow

Caixa de referência com largura fixa de 260px e altura de 90px. Possui borda tracejada cinza (#777), fundo cinza claro (#fafafa), padding interno de 8px e margin-bottom de 12px.

.ov {
  width: 260px;
  height: 90px;
  border: 2px dashed #777;
  background: #fafafa;
  padding: 8px;
  margin-bottom: 12px;
}

Exemplo completo

<!DOCTYPE html>
<html lang="pt-br">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Box Model: exemplos mínimos</title>
</head>

<body>

    <h1>Exemplos: Box Model, box-sizing, dimensões e overflow</h1>

    <!-- 1) Box Model -->
    <h2>1) Box Model (margin, border, padding, content)</h2>
    <p>Esta caixa tem <code>margin</code>, <code>border</code>, <code>padding</code> e o <code>content</code> (área
        amarela/azul).</p>
    <div class="box-model">
        Aqui é o <strong>conteúdo</strong>. O espaço entre o texto e a borda é o <em>padding</em>.
        A linha azul é a <em>border</em>. Por fora dela há a <em>margin</em>.
    </div>

    <!-- 2) box-sizing -->
    <h2>2) box-sizing</h2>
    <p class="hint">A caixa tracejada tem 180px só para referência visual.</p>
    <div class="wrap-180">
        <div class="content-box">
            <strong>content-box</strong><br />
            Largura final &gt; 180px (soma conteúdo + padding + border).
        </div>
        <div class="border-box">
            <strong>border-box</strong><br />
            Tudo cabe em 180px (conteúdo se ajusta).
        </div>
    </div>

    <!-- 3) Dimensões -->
    <h2>3) Dimensões (width, height, min/max)</h2>
    <div class="fixed">
        <strong>Fixo:</strong> width: 220px; height: 80px.
    </div>
    <div class="limited">
        <strong>Limitado:</strong> width: 60%; min-width: 260px; max-width: 420px.
    </div>

    <!-- 4) Overflow -->
    <h2>4) overflow</h2>
    <div class="ov visible">
        <strong>visible (padrão)</strong> — Conteúdo pode “vazar” para fora da caixa se passar do tamanho.
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras at sapien.
    </div>
    <div class="ov hidden">
        <strong>hidden</strong> — O excesso é cortado e não aparece.
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras at sapien.
    </div>
    <div class="ov scroll">
        <strong>scroll</strong> — Barras sempre aparecem, mesmo sem necessidade.
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras at sapien.
    </div>
    <div class="ov auto">
        <strong>auto</strong> — Barras aparecem só quando necessário.
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras at sapien.
    </div>

</body>

</html>

Last updated