Nenhum produto encontrado nessa seleção.
Todo elemento de uma página é uma caixa (box), sendo assim, o CSS Box Model trata da maneira sobre como calcular o tamanho final das caixas utilizando as propriedades width (largura), height (altura), border (borda), padding (enchimento) e margin (margem).
Por padrão, o CSS Box Model soma todas essas propriedades para formar o tamanho exato de um elemento, tanto para altura como para largura.
Por exemplo, imagine um DIV com classe "caixa" no seu HTML (se quiser pode ir fazendo junto para entender).
<div class="caixa"></div>
Já no CSS você teria algo simples, como:
.caixa { width: 200px; height: 200px; background: #f00; }
É uma caixa vermelha que tem exatamente 200px de altura e 200px de largura, nada mais, nada menos.
Até aqui não temos nada de novo, já que o tamanho do nosso elemento é exatamente o que queremos. Porém, agora vamos adicionar a propriedade borda de 1px, e margem de 20px para todos os quatro lados da caixa:
.caixa { width: 200px; height: 200px; background: #f00; border: 1px solid #000; margin: 20px; }
Veja como fica quando analisamos o elemento com o Firebug:
Agora o nosso elemento tem 202px de altura e largura, mas a ocupação de espaço desse elemento, na verdade, é de 242px de altura e de largura.
Vamos ver como fazer a soma?
CSS Box Model – O cálculo
Quando vamos fazer o cálculo para saber a dimensão exata de um elemento na tela, devemos levar em consideração a parte horizontal, que envolve:
- width (largura);
- border-left (borda da esquerda) e border-right (borda da direita);
- margin-left (margem da esquerda) e margin-right (margem da direita);
- padding-left (enchimento da esquerda) e padding-right (enchimento da direita).
E a parte vertical, que envolve:
- height (altura);
- border-top (borda do topo) e border-bottom (borda inferior);
- margin-top (margem do topo) e margin-bottom (margem inferior);
- padding-top (enchimento do topo) e padding-bottom (enchimento inferior).
Para saber a largura exata do elemento, basta somar tudo que envolve a parte horizontal, por exemplo:
.caixa { width: 200px; height: 200px; background: #f00; border: 1px solid #000; margin: 20px; }
Para este exemplo temos a seguinte soma:
200 (width) + 1 (border-left) + 1 (border-right) + 20 (margin-left) + 20 (margin-right) = 242
Sabemos que é 242px porque só utilizamos o pixel (px) como unidade em todas as propriedades.
Para saber a altura exata do elemento, basta somar tudo que envolve a parte vertical, por exemplo:
200 (height) + 1 (border-top) + 1 (border-bottom) + 20 (margin-top) + 20 (margin-bottom) = 242
Essa conta é bem simples, porém, faça a conta abaixo e me diga qual a largura exata do elemento:
.caixa { width: 200px; height: 200px; background: #f00; border: 1px solid #000; margin: 10px 1.24em 2.2em 31px; padding: 0.1em 10em 2.5em 31px; }
Vou ser bonzinho e deixar até os números:
Brincadeira, não precisa fazer as contas. Mas perceba o quanto isso é chato para o desenvolvedor, ter que analisar cada recurso para calcular o tamanho de um elemento não é uma tarefa fácil, apesar de não é totalmente necessário.
Abaixo vou mostrar uma propriedade do CSS que vai salvar sua vida.
Box-sizing
Ainda vamos criar um artigo específico para box-sizing, porém, vou mostrar apenas uma opção só para que você entenda como essa propriedade altera o modo com que o CSS Box Model gera o tamanho final de um elemento:
Se eu modificar o meu exemplo para:
.caixa { width: 200px; height: 200px; background: #f00; border: 10px solid #000; box-sizing: border-box; }
Meu elemento, teoricamente, teria que ter 220px de largura e de altura, isso porque cada lado do elemento tem uma borda de 10px, porém, ao analisar o elemento com o firebug, meu offset continua 200:
Isso acontece porque a propriedade box-sizing com o valor border-box, fazem com que o elemento não exceda o tamanho configurado em width (largura) e height (altura).
Com exceção da margem (margin), todas as propriedades que foram descritas por afetarem o CSS Box Model, são configuradas para dentro do elemento, como na imagem acima, que mostra a borda voltada para dentro do elemento, e não para fora. Com isso, o elemento vai continuar a ter 200px de largura e de altura sempre, não importa o que você configure.
Observação: Como já era de se esperar, a margem continua afetando o espaço que o elemento ocupa nada tela.
Conclusão
Caso queira brincar um pouco mais com o CSS Box Model, acesse o endereço abaixo:
Este é um exemplo interativo sobre o funcionamento do CSS Box Model, basta arrastar os sliders e ver o que acontece.