Rafael Camargo

Cálculo de font size clamp explicado de maneira fácil

Se você já pesquisou sobre como tornar variável o tamanho de um texto sem que seja necessário o uso de media queries, certamente se deparou com um recurso chamado clamp.

Diferentemente da responsividade oferecida pela estratégia media query, que acarreta em mudanças abruptas no tamanho do texto, o clamp recebe a definição de valores mínimo e máximo, e se encarrega de interpolar o tamanho da fonte de acordo com o tamanho da tela onde o texto está sendo exibido, aumentando ou diminuindo o texto de forma suave e gradual.

A ideia por trás do clamp é ótima, mas ao ver um exemplo real de uso, a fim de entender melhor como aplicar a função ao seu contexto, você pode se deparar com algo do tipo:

font-size: clamp(24px, 4vw, 48px)

O primeiro e o terceiro parâmetros são bastante auto-explicativos. O problema é o parâmetro que está entre os outros dois.

clamp(min, val, max)

Ao ler a documentação, descobrimos que val é a expressão que será utilizada enquanto o resultado dela estiver entre os valores mínimo e máximo.

É neste momento que você pode ficar completamente perdido, já que multiplicando a largura da tela (viewport width) por 4 obtém-se um tamanho de fonte absurdamente maior do que o valor máximo definido (48px). Para que a expressão gerasse um valor que ficasse entre 24px e 48px, a largura da tela teria que ficar entre 6px e 12px, algo que não faz o menor sentido porque nenhum dispositivo tem uma largura de tela assim tão estreita.

A confusão dura apenas até entendermos que o número 4 não representa um número inteiro, mas sim um valor percentual. Na prática, a notação expressa o seguinte: 4% * vw.

Interpolando tamanho de fonte usando a função clamp

Agora sim, as coisas começam a fazer algum sentido. Teremos 24px em telas com 600px de largura ou menos, teremos 48px em telas com 1200px de largura ou mais, e nas telas intermediárias teremos um tamanho de texto aumentando ou diminuindo suave e gradualmente na medida que a largura da tela aumenta ou diminui. Por exemplo, num tablet que esteja na posição retrato teremos um tamanho de texto de aproximadamente 30px (4% * 768px). Se colocarmos o tablet na posição paisagem, passaremos a ver o texto com o tamanho de aproximadamente 40px (4% * 1024px).

Nesse Gist você encontra todo o código necessário para rodar em sua máquina a demonstração exibida neste post. Se você curtiu este post e agora entendeu perfeitamente como usar a função clamp, poderá também se interessar em saber como usar flexbox para fazer um elemento ocupar todo o espaço restante disponível.