Estudio de las funciones CSS min(), max(), clamp()

Hoja de estudio: Edú Romero Andrade | Guayaquil, Ecuador

Ir a www.duduromeroa.com

Contacto de correo: Dudú Romero A.

INTRODUCCIÓN

Entender las unidades de viewport, relativas y fijas

ATENCIÓN: Estas funciones en CSS estan activas solo para navegadores más actualizados. (en Ópera, se debe usar una versión v.75 o mayor). EN FireFox, funcionan con la v. Extendida.

La función min(valor, valor)

En otras palabras, min(valorA, valorB) quiere decir "se elige el valor más pequeño siempre que se mantenga menor al resto"; o, mientras el resto de valores sea mayor, se elige al menor"; o "se elegirá el valor más pequeño pero no será mayor al valor más grande".

En otras palabras, es buena combinación usar unidades vw (relativas) junto con rem (absolutas), siempre que el font-size se mantenga en 16px cuando deseamos un comportamiento de ampliación/reducción.

Ejemplo con propiedad min() con unidades vw y rem

A
B

font-size: min(5vw, 6rem);

¿Qué sucede con las unidades vw y rem?

¿Por qué la función min() elige el valor más pequeño?

¿Por qué es necesario más de un valor relativo en min()?, ¿No basta tener uno solo?

¿Es buena práctica usar valores relativos (%, rem, em) o valores absolutos (px).?

EJEMPLO 1

- Primero debemos responder a: ¿Qué propiedad CSS queremos usar?

- Funcionamiento de min(): Durante la alteración por parte del usuario de la ventana del navegador, la escala de la tipografía será igual al 5% del total del ancho de esa ventana.

Cuando el 5% del total del ancho del navegador sea mayor a 2rem, entonces la escala de la tipografía será igual a 2rem.

font-size: min(5vw, 2rem);

Todos los gatos ronronean

FUNCIÓN min()con valores de dimensiones de área

¿Por qué este recuadro solo muestra un ancho de 20vw (el 20% del ancho del viewport)?

Porque a pesar de ampliar la ventana del navegador, ese elemento (que ahora es de 20% del total del ancho de la ventana) todavía se mantiene menor a 600px. Cuando el ancho del elemento exceda los 600px, entonces la función min() elegirá que se mantenga a 600px de ancho.

EN RESUMEN: Cuando el ancho de la ventana gráfica supere los 3000px, el 20% (20vw) de 3000 será mayor que 600px; por lo que el ancho del elemento quedará fijado a 600px (fijado, por que px son unidades absolutas). Por ejemplo, cuando el ancho del viewport sea de más de 3050px (el 20% de 3050px es 610px) entonces el elemento siempre tendrá un ancho de 600px.

Esa es la razón por la cual todavía no vemos que el recuadro tenga 600px.

EJEMPLO 2

OJO como los valores en height están alternados, y aún así el efecto sigue siendo el mismo.

width: min(20vw, 600px);

height: min(600px, 20vw);

FUNCIÓN min() con dos valores relativos

EJEMPLO 3 - Dos valores relativos

Cuando 9% del ancho del marco sea mayor en unidades de pixeles, el elemento tendrá el 11% del total del ancho del marco.


La función max()

max()
width: max(23vw, 6rem);

max()
width: max(14vw, 6rem);

font-size: max(2.4vw, 1rem);

Entonces ¿En qué se diferencian min() y max()?: Ambas funciones limitan o imponen una sola elección de valor, pero de forma dinámica. Eso ocurrirá mientras las dimensiones de la ventana del navegador estén siendo estrechadas o ampliadas. Aún así, ambas funciones se diferencian en lo siguiente:

En el siguiente ejemplo se mostrará cómo iguales valores de argumentos funcionan diferente en ambas funciones.

Nota: Si esta viendo este contenido en un navegador de pantalla de teléfono, altere la posición vertical y horizontal de la pantalla para apreciar el comportamiento. Si está en navegador de computadora, altere las dimensiones del marco del navegador.

En resumen, la diferencias entre min() y max() está en la elección del único valor escogido; es decir, se elegirá un solo valor durante una constante medición de las dimensiones del marco del navegador. Si un valor elegido cambia, se elegirá el siguiente valor según la función indicada.

min()
width: min(23vw, 6rem);

max()
width: max(23vw, 6rem);

min(2.4vw, 1rem);

max(2.4vw, 1rem);

Por otro lado, la siguiente función a estudiar -clamp()- combina las funciones min() y max(), anteriormente revisadas.


La función calc()

Función para cálculos aritméticos. Ejemplos:

width: calc(10px + 100px);

width: calc(100% - 30px);

font-size: calc(1.5rem + 3vw);


Y con el uso de variables CSS:

--ancho: calc( var(--nuevo) / 2);

Desde el año 2015, autores como Geoff Graham y Mike Riethmuller proponían -desde la función CSS calc()- una sintaxis CSS para adaptar tipografías y otras formas según una variable y en tiempo-real modificación de las dimensiones del marco de un navegador web.

Graham propuso font-size: calc([ancho mínimo] + ([ancho máximo] - [ancho mínimo]) * ((100vw - [mínimo marco navegador]) / ([máximo marco navegador] - [mínimo marco navegador])));

Donde los valores presentes son:

En la siguiente imagen se muestra la relación de esas dimensiones



Y en la siguiente aplicación, se usa la función calc() como primer ejemplo de la adaptación de un elemento según datos de mínimos y máximos, pero aún sin usar la función clamp() a estudiar luego. Nota: Ojo con qué valor de calc() lleva el prefijo de la unidad (como px, por ejemplo) y qué no lleva ese prefijo

Solo con calc()
width: calc(157px + (80 - 10) * ((100vw - 300px) / (800 - 300)));

En lo siguiente, se intentará explicar cómo la función clamp() resume (en una sola línea) lo elaborado por calc().


La función clamp()

En el siguiente ejemplo se muestra la aplicación clamp() para escalar texto. El código usado es:

font-size: clamp(0.7rem, 3vw + 0.6rem, 3.25rem);

Titulo escalable con clamp()

En otro ejemplo, con un elemento geométrico

width: calc(100% / (10 * 2));


SUBIR