Back-End

22 out, 2012

Você conhece a função calc() das CSS3?

Publicidade

O Módulo das CSS3 denominado “CSS Values and Units Module Level 3” atingiu, em 28 de agosto de 2012, o status de Candidata a Recomendação. Esse módulo destina-se a descrever os valores e unidades aceitas pelas propriedades CSS, bem como a sintaxe usada para definir tais valores.

O módulo, entre outras novidades, criou três funções CSS destinadas a definir valores. São elas: attr(), calc() e toggle(). Nesse artigo estudaremos a função CSS calc().

Expressões matemáticas

A função calc() permite que se definam valores CSS com uso de expressões matemáticas, ou seja, o valor adotado para a propriedade é o resultado de uma expressão matemática.

Os operadores matemáticos válidos são: + (soma), – (subtração), * (multiplicação) e / (divisão) e as unidades de medida CSS válidas no cálculo matemático são as unidades para: comprimento, ângulo, tempo, frequência e números.

O uso dessa função para definir valor CSS permite que se misture diferentes unidades de medida. Isso não é possível com uso das CSS2.1 e anteriores.

Vejamos a seguir dois exemplos práticos de uso dessa função:

Exemplo 1

HTML

<div></div>

CSS

body {
margin: 0;
padding: 0;
}

div {
width: 90%;                         /* para navegadores que não suportam calc() */
width: -webkit-calc(100% - 100px);  /* para Chrome */
width: -moz-calc(100% - 100px);     /* para Firefox */
width: calc(100% - 100px);          /* para suporte nativo */
margin: 0 auto;
height: 200px;
border: 1px solid black ;
background: lime;
}

Nesse exemplo, centramos um elemento na tela e definimos sua largura total igual a dimensão total da tela menos 100px resultando em um elemento elástico com margens esquerda e direita constantes e iguais a 50px. Qualquer que seja a resolução da tela as margens laterais permanecem inalteradas. Lembrar que definir a largura em percentagem (por exemplo: 90%) sem uso de calc(), como fazemos com as CSS2.1 e anteriores, resulta em margens elásticas (no exemplo: 5% para cada lado) e não fixas.

Veja a renderização do exemplo mostrado no Exemplo 1. Examine o código fonte da página e também redimensione a janela do navegador para observar as margens constantes. Use navegador Chrome ou Firefox, que atualmente suportam essa funcionalidade com uso de prefixos proprietários. Em outros navegadores a largura do elemento será 90% com margens elásticas.

Exemplo 2

HTML

<section id="container">
<div></div>
<div></div>
</section>

CSS

body {
margin: 0;
padding: 0;
}
#container {
width: 90%;
height: 300px;
border: none;
background: yellow;
}
div {
width: -webkit-calc(50% - 20px - 2em);  /* para Chrome */
width: -moz-calc(50% - 20px - 2em);     /* para Firefox */
width: calc(50% - 20px - 2em);           /* para suporte nativo */
/* width: 50%; */
margin: 0 10px;
height: 200px;
border: 1em solid black ;
float: left;
background: lime;
}
.dois {
float: right;
background: red;
}

Nesse exemplo flutuamos dois elementos com bordas e margens, dentro de um container, cada um deles ocupando 50% da largura do container. Usamos a função calc() para ajustar os elementos no container.

Veja a renderização do exemplo mostrado em: Exemplo 2. Examine o código fonte da página e também redimensione a janela do navegador para observar o comportamento dos elementos. Use navegador Chrome ou Firefox, que atualmente suportam essa funcionalidade com uso de prefixos proprietários. Observe que sem uso da função calc() não seria possível obter o efeito. Nas declarações CSS para os elementos div descomente a declaração width: 50%, e observe a renderização.

***

Oferta exclusiva para os leitores iMasters deste artigo: todos os livros do Maujor com 25% de desconto no site da Novatec Editora! Insira o código promocional maujor25 no carrinho de compras para gerar o desconto. (Válido até 01/11/2012)