Pagina inicial » Codificação » Uma olhada no CSS3 Box-Sizing

    Uma olhada no CSS3 Box-Sizing

    Este artigo faz parte do nosso "Série de tutoriais HTML5 / CSS3" - dedicado a ajudar a torná-lo um melhor designer e / ou desenvolvedor. Clique aqui para ver mais artigos da mesma série.

    Não muito tempo atrás, quando criamos um caixa em uma página da web, digamos com um div, nós especificamos 100 px para a largura e a altura, seguidas por preenchimento para 10px e bordas de cerca de 10px também.

     div largura: 100px; altura: 100 px; preenchimento: 10px; borda: 10px #eaeaea sólido;  

    Os navegadores expandirão o tamanho da caixa para 140px, onde essa quantidade de 140px da largura total / altura é composta da adição da preenchimento e a fronteiras do seguinte modo; 100px [largura / altura] + (2 x 10px [preenchimento]) + (2 x 10px [borda]).

    No entanto, às vezes esse resultado não é o que esperamos que seja. Às vezes, precisamos que a caixa seja sempre 100 px independentemente do preenchimento ou das bordas adicionadas.

    Para superar esse problema recorrente ao criar o layout da página da web, podemos usar o CSS3 dimensionamento de caixa propriedade para controlar como o Modelo de caixa CSS deve funcionar nos navegadores.

    Usando o dimensionamento de caixa

    o dimensionamento de caixa propriedade tem duas opções de valor, primeiro content-box; que é o valor padrão, ao usar este valor, o modelo de caixa se comportará como descrevemos acima.

    E o segundo é caixa de borda, onde o tamanho da caixa será calculado subtraindo o tamanho do conteúdo especificado com o preenchimento e as bordas adicionadas.

     div largura: 100px; altura: 100 px; preenchimento: 10px; borda: 10px #eaeaea sólido; dimensionamento de caixa: caixa de borda; -moz-box-size: border-box; / * Firefox 1-3 * / -webkit-box-sizing: caixa de borda; / * Safari * / 

    Por exemplo, quando temos uma caixa como a que descrevemos acima (quadrado de 100 px com 10 pixels para o preenchimento e as bordas), o tamanho do conteúdo diminuirá para 60 px, e o tamanho total da caixa permanece 100 px, onde a equação da subtração pode ser descrita da seguinte maneira; 100px [largura / altura] - ((2 x 10px [preenchimento]) + (2 x 10px [borda])).

    • Demonstração
    • Fonte de download

    Suporte de Navegador

    o dimensionamento de caixa propriedade é suportado em todos os navegadores; Firefox 3.6+, Safari 3, Opera 8.5+ e Internet Explorer 8 e superior.

    Então, se você sabe que a maioria de seus visitantes não estará usando as versões do Internet Explorer abaixo de 8, você pode usar essa recomendação útil (graças a Paul Irish).

     * box-sizing: border-box; -moz-box-size: border-box; / * Firefox 1-3 * / -webkit-box-sizing: caixa de borda; / * Safari * / 

    O snippet acima aplicará o dimensionamento de caixa propriedade para todos os elementos na sua página web.

    Exemplo

    Nesta seção, mostraremos um exemplo da vida real sobre como podemos fazer uso desse dimensionamento de caixa propriedade. Vamos criar uma navegação simples, baseada na marcação HTML abaixo, com cinco menus de links..

      

    Então, vamos adicionar alguns estilos decorativos; como, definir a navegação fixar largura para 500 px e a largura do link para 100px cada, em seguida, inline o item da lista e forneça fundos diferentes para cada menu de link, para que você possa ver a diferença entre eles.

     nav width: 500px; margem: 50px auto 0; altura: 50 px;  nav ul preenchimento: 0; margem: 0;  nav li float: left;  nav a display: inline-block; largura: 100px; altura: 100%; background-color: #ccc; cor: # 555; text-decoration: nenhum; fonte-família: Arial, sans-serif; tamanho da fonte: 12pt; altura da linha: 300%; texto-alinhar: centro;  nav a display: inline-block; largura: 100px; altura: 100%; cor: # 555; text-decoration: nenhum; fonte-família: Arial, sans-serif;  nav li: nth-child (1) a cor de fundo: # E9E9E9; borda esquerda: 0;  nav li: nth-child (2) a cor de fundo: # E4E4E4;  nav li: nth-child (3) a cor de fundo: #DFDFDF;  nav li: nth-child (4) a cor de fundo: # D9D9D9;  nav li: nth-child (5) a cor de fundo: # D4D4D4; borda direita: 0;  

    Neste ponto, nossa navegação parece normal.

    No entanto, o problema virá quando adicionarmos as bordas esquerda ou direita ao menu de links.

     nav a border-left: 1px sólido #aaa; borda direita: 1px sólido # f3f3f3;  

    O menu irá transbordar para o fundo, já que a largura do link não é mais 100 px. É agora 102px, fazendo com que a largura total da navegação seja 10px por mais tempo que tenhamos especificado acima (500 px).

    Para superar esse problema, precisamos aplicar o dimensionamento de caixa propriedade, da seguinte forma:

     nav a border-left: 1px sólido #aaa; borda direita: 1px sólido # f3f3f3; dimensionamento de caixa: caixa de borda; -moz-box-size: border-box; -webkit-box-sizing: caixa de borda;  
    • Demonstração
    • Fonte de download

    Leitura Adicional

    E, finalmente, se você é do tipo aventureiro e quer se aprofundar nesse assunto, reunimos algumas referências selecionadas para você:

    • Entendendo o Modelo de Caixa de CSS - Tech Republic
    • Bug de tamanho de caixa no Firefox - BugZilla
    • Box-Dimensionamento FTW - Paul Irish