Funciones Matemáticas CSS: Una Guía de cos() y sin()

Las funciones trigonométricas de CSS han transformado la forma en que creamos diseños complejos y animaciones sin JavaScript. Entre estas poderosas herramientas, cos()
y sin()
destacan como funciones esenciales para diseños circulares, patrones de ondas y animaciones fluidas.
Puntos Clave
- Las funciones CSS
cos()
ysin()
mapean ángulos a coordenadas X e Y utilizando el concepto del círculo unitario - Estas funciones eliminan la necesidad de JavaScript al crear diseños circulares y animaciones de ondas
- Los valores devueltos varían de -1 a 1 y pueden escalarse usando
calc()
para aplicaciones prácticas - El soporte de navegadores es ahora estándar en todos los navegadores principales con rendimiento optimizado
Entendiendo cos() y sin() de CSS a Través del Círculo Unitario
Las funciones CSS cos()
y sin()
mapean ángulos a coordenadas utilizando el concepto del círculo unitario. Piensa en el círculo unitario como un círculo con radio 1, centrado en el origen de un sistema de coordenadas.
cos()
devuelve la coordenada X para un ángulo dadosin()
devuelve la coordenada Y para un ángulo dado
Cuando pasas un ángulo a estas funciones matemáticas CSS, devuelven valores entre -1 y 1, representando posiciones en el círculo unitario. Esta relación matemática se convierte en la base para crear diseños CSS dinámicos.
/* Sintaxis básica */
.element {
--angle: 45deg;
--x: cos(var(--angle)); /* Devuelve ~0.707 */
--y: sin(var(--angle)); /* Devuelve ~0.707 */
}
Creando Diseños Circulares con Funciones Trigonométricas CSS
Una de las aplicaciones más prácticas de cos()
y sin()
de CSS es posicionar elementos alrededor de un círculo. Esta técnica elimina la necesidad de posiciones codificadas o cálculos en JavaScript.
.circular-menu {
--radius: 150px;
--total-items: 6;
}
.menu-item {
--angle: calc(360deg / var(--total-items) * var(--index));
transform:
translateX(calc(cos(var(--angle)) * var(--radius)))
translateY(calc(sin(var(--angle)) * var(--radius)));
}
Este enfoque distribuye automáticamente los elementos de manera uniforme alrededor de un círculo, haciéndolo perfecto para menús radiales, esferas de reloj o diseños decorativos. El concepto del círculo unitario CSS escala naturalmente con cualquier valor de radio que elijas.
Discover how at OpenReplay.com.
Construyendo Patrones de Ondas y Animaciones CSS Oscilatorias
Las funciones trigonométricas CSS sobresalen en la creación de patrones de ondas orgánicos. Dado que sin()
y cos()
producen oscilaciones suaves, son ideales para animaciones CSS similares a ondas sin keyframes complejos.
.wave-element {
--frequency: 2;
--amplitude: 50px;
--phase: calc(var(--index) * 30deg);
transform: translateY(
calc(sin(var(--phase) * var(--frequency)) * var(--amplitude))
);
}
Para ondas animadas, combina estas funciones con propiedades personalizadas CSS y animaciones:
@property --progress {
syntax: "<number>";
initial-value: 0;
inherits: false;
}
.oscillating {
--wave: calc(sin(var(--progress) * 360deg) * 100px);
transform: translateX(var(--wave));
animation: wave-motion 2s linear infinite;
}
@keyframes wave-motion {
to { --progress: 1; }
}
Rendimiento y Soporte de Navegadores
Las funciones matemáticas CSS, incluyendo cos()
y sin()
, ahora tienen soporte estándar en todos los navegadores principales. Estas funciones están optimizadas nativamente dentro del pipeline de renderizado del navegador, proporcionando mejor rendimiento que los cálculos basados en JavaScript para diseños y animaciones CSS.
Ventajas clave:
- Sin sobrecarga de JavaScript en tiempo de ejecución
- Los cálculos ocurren durante la fase de computación de estilos
- Recálculo automático ante cambios en el viewport o propiedades
- Animaciones fluidas a 60fps cuando se combinan con transformaciones CSS
Consejos Prácticos de Implementación
Al trabajar con funciones trigonométricas CSS, recuerda estas mejores prácticas:
- Usa propiedades personalizadas CSS para valores reutilizables y mantenimiento más fácil
- Combina con
calc()
para escalar resultados del rango -1 a 1 del círculo unitario - Aprovecha las propiedades
transform
para animaciones aceleradas por hardware - Considera unidades responsivas como
vw
ocqi
para diseños escalables
/* Diseño circular responsivo */
.item {
--responsive-radius: min(40vw, 300px);
--x: calc(cos(var(--angle)) * var(--responsive-radius));
--y: calc(sin(var(--angle)) * var(--responsive-radius));
transform: translate(var(--x), var(--y));
}
Conclusión
Las funciones CSS cos()
y sin()
aportan precisión matemática a los diseños web sin dependencias de JavaScript. Desde menús de navegación circulares hasta animaciones de ondas suaves, estas funciones matemáticas CSS ofrecen rendimiento nativo del navegador y código más limpio y mantenible. A medida que el soporte de navegadores continúa consolidándose, las funciones trigonométricas CSS se están convirtiendo en herramientas esenciales para diseños y animaciones CSS modernos.
Preguntas Frecuentes
Sí, las funciones trigonométricas CSS tienen soporte estándar en navegadores como Chrome, Firefox, Safari y Edge. Son seguras para uso en producción, aunque podrías querer alternativas de respaldo para versiones antiguas de navegadores si tu audiencia lo requiere.
Las funciones trigonométricas CSS tienen mejor rendimiento que sus equivalentes en JavaScript porque los cálculos ocurren durante la fase de computación de estilos del navegador. Esto elimina la sobrecarga en tiempo de ejecución y proporciona animaciones más fluidas, especialmente cuando se combinan con transformaciones CSS.
Las funciones trigonométricas CSS aceptan tanto grados como radianes. Usa deg para grados o rad para radianes. La mayoría de los desarrolladores encuentran los grados más intuitivos, pero los radianes pueden ser útiles al trabajar con fórmulas matemáticas o al portar cálculos desde otros sistemas.
Truly understand users experience
See every user interaction, feel every frustration and track all hesitations with OpenReplay — the open-source digital experience platform. It can be self-hosted in minutes, giving you complete control over your customer data. . Check our GitHub repo and join the thousands of developers in our community..