Seguindo o formato de exibição de textos antigos, os elementos de uma página HTML são exibidos como se fossem textos, ou seja, de cima para baixo e da esquerda para a direita e numa 'linha' ou 'parágrafo' que coordena ou alinha esses elementos.
Portanto se o objeto a esquerda é alto e o da direita baixo vai ficar um espaço vazio no segundo elemento.
Como os novos elementos são bem mais complexos que um simples texto foi criado o contexto de boxing.
BOXING é como cada elemento da página web é exibido e como diz o nome, é uma caixa
.
Este 'espaçamento/modo/modelo' foi definido como sendo a melhor maneira de exibir um objeto nos mais amplos contextos.
O primeiro item não pertence em si ao elemento mas é sim um espaçamento, uma margem para que um elemento não encoste em outro elemento. É um espaçamento para que um elemento não 'encoste' no outro elemento logo a seguir, anterior, superior ou inferior. Note que até aqui nosso elemento nem começou a ser renderizado (exibido) ainda, só estamos tentando 'encaixar' ele dentro da página HTML.
Note que o elemento margem sempre existe no elemento mas nem sempre é exibido porque podemos definir com uma espessura de zero pixels ou com uma cor de fundo igual ao da página ai ela seria exibida mas não seria notada pelo usuário.
A margem como a maioria dos elementos do box pode ser definida como sendo :
•As 4 margens iguais (ex: margin:10px;).
•A margem superior e inferior com uma dimensão e a lateral esquerda e direita com outra ( margin:10 px 5 px ).
•Definindo as 4 margens diferentes ( topo, lateral direita, inferior, lateral esquerda -
Ex: margin:10px 15px 20px 25px)
Também no estilo da CSS podemos definir apenas uma das margens, por exemplo, margin-top:10px;. Neste caso as demais ficariam com 0px que é o default do browser. Ainda podemos definir margin-left, margin-bottom, margin-right da mesma maneira.
A margem é útil em certas situações separando os elementos da página ( como textos ) mas em certas ocasiões
ele deixa um espaço indesejado como quando entre imagens e outros itens que devem ser exibidos colados.
Só mesmo vendo como fica na página para ver se o elemento fica melhor com ou sem a margem.
A seguir cito um exemplo prático de utilização da margem.
Finalmente o elemento mais interno do box é o Conteúdo que é o que desejamos exibir realmente. Pode ser texto, imagem, vídeo som etc.
animação.Como vimos acima todos elementos HTML são exibidos dentro de um 'BOX' que tem margem, borda, padding e a largura/altura do conteúdo.
Mas se eu definir, por exemplo, uma div com um padding ou borda e outra sem elas serão exibidas com o mesmo tamanho no browser ?.
A resposta, por default é NÃO, elas terão tamanho diferentes e isto traz problemas no alinhamento dos itens.
Nota : Se você não define o padding de um elemento o browser define esse padding default como 1px normalmente.
Box sizing é um recurso da CSS que informa ao browser se deve contabilizar ou não na dimensão do objeto o
padding, borda, margem do elemento.
Para cobrir todas as possibilidades o box-sizing tem 3 tipos:
Este é o padrão.
As propriedades width (largura) e height (altura) são contabilizadas
mas padding, borda e margem não são levados em conta.
Exemplo.: Se num .box de width: 200px você aplicar uma propriedade padding:10px solid black; o resultado renderizado no navegador (browser) será .box {width: 220px;}
A largura (width), altura (height), padding são incluidos
mas, não incluem borda ou margem.
Cuidado: A maioria dos browsers atuais ainda não aceitam este padrão.
A largura (width), altura (height), padding e a borda são incluidos, mas não a margem.
box-sizing | Padding | Borda | Margem |
---|---|---|---|
content-box | |||
padding-box | X | ||
border-box | X | X |
Nota : Testei com uma imagem de 37px no lugar do texto Divx e obtive exatamente o mesmo resultado.
Nesta primeira experiencia vamos criar uma div sem padding e outra com padding.
Vamos ver se o browser contabiliza ou não o padding (10px) na dimensão do elemento.
Agora vá no depurador do browser (F12) e clique em - Dimensão dos objetos
No depurador vemos que da Div1 e a Div2 continuam com 100px cada o que significa que o padding de 10px foi contabilizado e por esse motivo não alterou o tamanho da div.
Nesta segunda experiência vamos criar uma div com padding mas usando o default do browser e vamos criar uma segunda div usando box-sizing:content-box.
No depurador vemos que da Div3 ficou com 100px por 100px enquanto a Div4 ficou com 122px por 122px significando que o box-sizing:content-box não contou o padding, ou seja, alterou o tamanho da div ao definirmos um padding.
Nesta terceira experiência vamos criar uma div com padding mas usando o default do browser e vamos criar uma segunda div usando box-sizing:border-box.
No depurador vemos que da Div5 e a Div6 continuam com 100px cada o que significa que o padding de 10px foi contabilizado e por esse motivo não alterou o tamanho da div. Portanto o box-sizing:border-box contabiliza o padding (não altera o tamanho do objeto quando definimos o padding).
Nesta quarta experiência vamos criar uma div com padding mas usando o default do browser e vamos criar uma segunda div usando box-sizing:padding-box.
No depurador vemos que da Div7 e a Div8 continuam com 100px cada o que significa que o padding de 10px foi contabilizado e por esse motivo não alterou o tamanho da div. Portanto o box-sizing:padding-box contabiliza o padding (não altera o tamanho do objeto quando definimos o padding).
Resumo box-sizing: Só content-box não levou padding em conta.
Nesta quinta experiencia vamos criar uma div com borda de 1px e outra com borda de 5px.
Vamos ver se o browser contabiliza a borda na dimensão do elemento.
No depurador vemos que da Div9 e a Div10 continuam com 100px cada o que significa que a borda de 5px foi contabilizado e por esse motivo não alterou o tamanho da div.
Nesta sexta experiência vamos criar uma div com borda mas usando o default do browser e vamos criar uma segunda div usando box-sizing:content-box.
No depurador vemos que da Div11 ficou com 100px por 100px enquanto a Div12 ficou com 112px por 112px significando que o box-sizing:content-box não contou o border, ou seja, alterou o tamanho da div ao definirmos uma borda.
Nesta sétima experiência vamos criar uma div com borda de 1px mas usando o default do browser e vamos criar uma segunda div com 5px usando box-sizing:border-box.
No depurador vemos que da Div13 e a Div14 continuam com 100px cada o que significa que a margem de 5px foi contabilizado e por esse motivo não alterou o tamanho da div. Portanto o box-sizing:border-box contabiliza a borda (não altera o tamanho do objeto quando definimos o padding).
Nesta oitava experiência vamos criar uma div com uma borda de 1px usando o default do browser e vamos criar uma segunda div com 5 px de borda e usando box-sizing:padding-box.
No depurador vemos que da Div15 e a Div16 continuam com 100px cada o que significa que a margem de 5px foi contabilizado e por esse motivo não alterou o tamanho da div. Portanto o box-sizing:padding-box contabiliza a margem (não altera o tamanho do objeto quando definimos o padding).
Resumo box-sizing: Só content-box não levou padding em conta.
box-sizing | Padding | Borda | Margem |
---|---|---|---|
content-box | |||
padding-box | X | X | |
order-box | X | X |
Por definição nenhum dos boxes sizes contabiliza a margem e isto provavelmente deve-se ao fato que margem não pertence ao elemento mas sim é um separador externo do elemento.
Abaixo defino diversas divs todas com 5 px de margem mas box-sizing diferentes
Resumo box-sizing: Só content-box alterou o tamanho da div de 100px por 100px para 104px para 104px por causa da margem.
box-sizing | Padding | Borda | Margem |
---|---|---|---|
content-box | |||
padding-box | X | X | |
order-box | X | X |
Nota : Só no content-box o tamanho do box foi alterado por causa da margem, ou seja, o content-box
não levou em conta a margem e isto acrescentou no tamanho do objeto.
Não foi o que os sites de referência afirmaram mas os resultados são empiricamente indiscutíveis.