Dimensionamento de caixa CSS


Índice

    Mostrar índice


Dimensionamento de caixa CSS

A propriedade CSS box-sizing nos permite incluir o preenchimento e a borda em a largura e altura total de um elemento.


Sem a propriedade CSS box-sizing

Por padrão, a largura e a altura de um elemento são calculadas assim:

largura + preenchimento + borda=largura real de um elemento
altura + preenchimento + borda=altura real de um elemento

Isto significa: Quando você define a largura/altura de um elemento, o elemento geralmente aparece maior do que você definiu (porque a borda e o preenchimento do elemento são adicionados à largura/altura especificada do elemento).

A ilustração a seguir mostra dois elementos <div> com o mesmo largura e altura especificadas:

This div is smaller (width is 300px and height is 100px).

This div is bigger (width is also 300px and height is 100px).

Os dois elementos <div> acima acabam com tamanhos diferentes no resultado (porque div2 tem um preenchimento Especificadas):

Exemplo

.div1 {
  width: 300px;
  height: 
100px;
  border: 1px solid blue; 
}

.div2 {
  width: 300px;
  height: 100px;
  padding: 50px;
  border: 1px solid red;
} 

Experimente você mesmo →

<!DOCTYPE html>
<html>
<head>
<style> 
.div1 {
  width: 300px;
  height: 100px;
  border: 1px solid blue;
}

.div2 {
  width: 300px;
  height: 100px;  
  padding: 50px;
  border: 1px solid red;
}
</style>
</head>
<body>

<h1>Without box-sizing</h1>

<div class="div1">This div is smaller (width is 300px and height is 100px).</div>
<br>
<div class="div2">This div is bigger (width is also 300px and height is 100px).</div>

</body>
</html>


A propriedade box-sizing resolve este problema.



Com a propriedade CSS box-sizing

A propriedade box-sizing nos permite incluir o preenchimento e a borda na largura e altura total de um elemento.

Se você definir box-sizing: border-box; em um elemento, o preenchimento e a borda serão incluídos na largura e na altura:

Both divs are the same size now!

Hooray!

Aqui está o mesmo exemplo acima, com box-sizing: border-box; adicionado a ambos os elementos <div>:

Exemplo

.div1 {
  width: 300px;
  height: 
100px;
  border: 1px solid blue;
  box-sizing: border-box;
}

.div2 {
  width: 300px;
  
height: 100px;
  padding: 50px;
  border: 1px solid red;
  box-sizing: border-box;
} 

Experimente você mesmo →

<!DOCTYPE html>
<html>
<head>
<style> 
.div1 {
  width: 300px;
  height: 100px;
  border: 1px solid blue;
  box-sizing: border-box;
}

.div2 {
  width: 300px;
  height: 100px;  
  padding: 50px;
  border: 1px solid red;
  box-sizing: border-box;
}
</style>
</head>
<body>

<h1>With box-sizing</h1>

<div class="div1">Both divs are the same size now!</div>
<br>
<div class="div2">Hooray!</div>

</body>
</html>


Como o resultado do uso de box-sizing: border-box; é muito melhor, muitos desenvolvedores desejam que todos os elementos em suas páginas funcionem dessa maneira.

O código abaixo garante que todos os elementos sejam dimensionados desta forma mais intuitiva. Muitos navegadores já usam box-sizing: border-box; para muitos elementos de formulário (mas não todos - e é por isso que as entradas e as áreas de texto parecem diferentes em width: 100%; ).

Aplicar isso a todos os elementos é seguro e sábio:

Exemplo

* {
  box-sizing: border-box;
}

Experimente você mesmo →

<!DOCTYPE html>
<html>
<head>
<style>
body {
  margin: 0;
}

* {
  box-sizing: border-box;
} 

input, textarea {
  width: 100%;
}
</style>
</head>
<body>

<form action="/action_page.php">
  First name:<br>
  <input type="text" name="firstname" value="Mickey"><br>
  Last name:<br>
  <input type="text" name="lastname" value="Mouse"><br>
  Comments:<br>
  &lt;textarea name="message" rows="5" cols="30">
  &lt;/textarea>
  <br><br>
  <input type="submit" value="Submit">
</form> 

<p><strong>Tip:</strong> Try to remove the box-sizing property from the style element and look what happens.
Notice that the width of input, textarea, and submit button will go outside of the screen.</p>

</body>
</html>



Propriedade de dimensionamento de caixa CSS

box-sizing

Define como a largura e a altura de um elemento são calculadas: deve eles incluem preenchimento e bordas, ou não