CSS min(), max() e clamp()

Aprenda a controlar o dimensionamento de elementos, manter o espaçamento adequado e implementar a tipografia fluida usando essas funções CSS bem compatíveis.

À medida que o design responsivo se torna mais sutil, o CSS está em constante evolução para dar aos autores mais controle. As funções min(), max() e clamp(), agora compatíveis com todos os navegadores mais recentes, estão entre as ferramentas mais recentes para tornar a criação de sites e apps mais dinâmica e responsiva. Você pode usar essas funções para controlar o dimensionamento e o redimensionamento de elementos, manter o espaçamento entre eles e criar uma tipografia flexível e fluida.

As funções matemáticas calc(), min(), max() e clamp() permitem que expressões matemáticas com adição (+), subtração (-), multiplicação (*) e divisão (/) sejam usadas como valores de componentes.

Valores e unidades de CSS nível 4

Suporte ao navegador

min()

Browser Support

  • Chrome: 79.
  • Edge: 79.
  • Firefox: 75.
  • Safari: 11.1.

Source

max()

Browser Support

  • Chrome: 79.
  • Edge: 79.
  • Firefox: 75.
  • Safari: 11.1.

Source

clamp()

Browser Support

  • Chrome: 79.
  • Edge: 79.
  • Firefox: 75.
  • Safari: 13.1.

Source

Uso

É possível usar min(), max() e clamp() no lado direito de qualquer expressão CSS em que isso faça sentido. Para min() e max(), você fornece uma lista de argumentos de valores, e o navegador determina qual é o menor ou o maior. Por exemplo, no caso de width: min(1rem, 50%, 10vw), o navegador calcula qual dessas unidades relativas é a menor e usa esse valor para a largura do elemento.

A função min() seleciona o valor mínimo de uma lista de opções nesta demonstração do Codepen.

A função max() faz o mesmo para o valor máximo.

A função max() seleciona um valor de uma lista de opções nesta demonstração do Codepen.

Para usar clamp(), insira três valores: um valor mínimo, um valor ideal para calcular e um valor máximo.

A função clamp() mantém o valor entre o mínimo e o máximo especificados nesta demonstração do Codepen.

É possível usar essas funções em qualquer lugar em que um <length>, <frequency>, <angle>, <time>, <percentage>, <number> ou <integer> seja permitido. É possível usá-los sozinhos (como em font-size: max(0.5vw, 50%, 2rem)), com calc() (como em font-size: max(calc(0.5vw - 1em), 2rem)) ou compostos (como em font-size: max(min(0.5vw, 1em), 2rem)).

Veja a seguir alguns exemplos de como usar essas funções.

A largura perfeita

De acordo com The Elements of Typographic Style (link em inglês), de Robert Bringhurst, "qualquer coisa de 45 a 75 caracteres é amplamente considerada como um comprimento de linha satisfatório para uma página de coluna única definida em uma face de texto com serifa em um tamanho de texto".

Para garantir que os blocos de texto tenham entre 45 e 75 caracteres de largura, use clamp() e a unidade ch (avanço de caracteres de largura 0):

p {
  width: clamp(45ch, 50%, 75ch);
}

Isso permite que o navegador determine a largura do parágrafo. Ele define a largura como 50% por padrão. Se 50% for menor que 45ch, ele usará 45ch como a largura. Se 50% for maior que 75ch, ele usará 75ch.

Use a função clamp() para definir uma largura mínima e máxima. Confira a demonstração no Codepen.

Também é possível dividir isso usando apenas min() ou max(). Se você quiser que o elemento sempre tenha a largura 50% e não exceda a largura 75ch em telas maiores, use width: min(75ch, 50%); para definir o tamanho máximo.

Use a função min() para definir uma largura máxima.

Da mesma forma, é possível definir um tamanho mínimo para texto legível usando a função max(), como em width: max(45ch, 50%);. Nesse caso, o navegador seleciona o valor maior, o que significa que o elemento precisa ter 45ch ou mais de largura.

Use a função max() para definir uma largura mínima.

Gerenciar padding

Também é possível usar max() para definir um tamanho mínimo de padding. Este exemplo é do CSS Tricks, em que o leitor Caluã de Lacerda Pataca compartilhou esta ideia: permitir que um elemento tenha mais padding em telas maiores, mas manter um padding mínimo em telas menores. Para fazer isso, use calc() ou max() e subtraia o padding mínimo dos dois lados do elemento: calc((100vw - var(--contentWidth)) / 2) ou max(2rem, 50vw - var(--contentWidth) / 2). Na folha de estilo, ela deve ficar assim:

footer {
  padding: var(--blockPadding) max(2rem, 50vw - var(--contentWidth) / 2);
}
Defina um padding mínimo para um componente usando a função max(). Confira a demonstração no Codepen.

Tipografia fluida

Para ativar a tipografia fluida, Mike Riethmeuller popularizou uma técnica que usa a função clamp() para definir um tamanho mínimo e máximo de fonte e permitir o escalonamento entre esses tamanhos.

Use clamp() para criar uma tipografia fluida. Confira a demonstração no Codepen.

Antes do clamp(),, o dimensionamento de fontes exigia strings de estilo complexas. Agora, você pode deixar o navegador fazer o trabalho por você. Defina o tamanho mínimo aceitável da fonte (por exemplo, 1.5rem para um título), o tamanho máximo (como 3rem) e o tamanho ideal (como 5vw). Agora você tem uma tipografia que se ajusta à largura da janela de visualização da página até atingir os valores mínimo e máximo, usando pouquíssimo código:

p {
  font-size: clamp(1.5rem, 5vw, 3rem);
}

Mais recursos