Cómo generar colores de fondo aleatorios con JavaScript
Spanish (Español) translation by Ana Paulina Figueroa (you can also view the original English article)
En este tutorial aprenderás cómo cambiar el color de fondo de una página aleatoriamente usando JavaScript. También aprenderás cómo modificar tu código usando valores de color HSL para generar solamente colores pastel o colores oscuros.
Echemos un vistazo a lo que estaremos creando:
En esta demostración, cambiamos el color del fondo y el color del texto de la página cada 1500ms. La mayor parte del trabajo pesado se lleva a cabo usando JavaScript, pero echemos un vistazo al contenido y al estilo:
HTML
Para el contenido de nuestra página, crearemos un elemento con un id background y colocaremos algo de texto en él.
1 |
<main id="background"> |
2 |
<h1>
|
3 |
Generate Random Background Colors with JavaScript |
4 |
</h1>
|
5 |
</main>
|
CSS
Usaremos CSS para controlar la transición background-color y así lograr que el cambio se vea más suave.
1 |
main { |
2 |
transition: background 1s; |
3 |
}
|
JavaScript
Vamos a generar colores aleatorios en JavaScript combinando estos dos métodos:
- Notación de color HSL, y
- La biblioteca
Math
"La notación funcional
hsl()expresa un color dado en base a sus componentes de tono, saturación y luminosidad" (MDN)
El valor de tono tiene un máximo de 360 y representa el grado de la posición del color en una rueda de colores. Los valores de saturación y luminosidad tienen un máximo de 100 y representan el porcentaje de saturación y luminosidad de un color, respectivamente.
Juega con los rangos a continuación para ver cómo es que los valores de tono, saturación y luminosidad afectan la apariencia de un color.
Para generar colores completamente aleatorios, vamos a enviar números aleatorios dentro de un rango fijo a los tres valores HSL. Podemos hacer esto usando Math.random y Math.floor.
Math.random genera números aleatorios entre 0 y 1. Podemos multiplicar estos números por nuestro rango especificado y usar Math.floor para redondear al número entero más cercano.
1 |
const getRandomNumber = (maxNum) => { |
2 |
return Math.floor(Math.random() * maxNum); |
3 |
};
|
Luego usaremos la función getRandomNumber para generar valores aleatorios para nuestra notación HSL.
1 |
const getRandomColor = () => { |
2 |
const h = getRandomNumber(360); |
3 |
const s = getRandomNumber(100); |
4 |
const l = getRandomNumber(100); |
5 |
|
6 |
return `hsl(${h}deg, ${s}%, ${l}%)`; |
7 |
};
|
Finalmente, enviamos el color generado aleatoriamente a nuestro elemento "background".
1 |
const setBackgroundColor = () => { |
2 |
const randomColor = getRandomColor(); |
3 |
document.getElementById("background").style.backgroundColor = randomColor; |
4 |
}
|
Esto nos permite establecer un color aleatorio para nuestro fondo.
Aplicar el nuevo color
Podemos decidir si queremos cambiar el color de fondo cada vez que el usuario cargue la página, o bien de manera regular en un intervalo establecido, enviando el código anterior a una función onLoad o setInterval.
1 |
window.onload = () => { |
2 |
setBackgroundColor() |
3 |
};
|
1 |
setInterval(() => { |
2 |
setBackgroundColor(); |
3 |
}, 1500); |
Aquí puedes ver el código JavaScript terminado:
1 |
const background = document.getElementById("background"); |
2 |
|
3 |
const getRandomNumber = (maxNum) => { |
4 |
return Math.floor(Math.random() * maxNum); |
5 |
};
|
6 |
|
7 |
const getRandomColor = () => { |
8 |
const h = getRandomNumber(360); |
9 |
const s = getRandomNumber(100); |
10 |
const l = getRandomNumber(100); |
11 |
|
12 |
return `hsl(${h}deg, ${s}%, ${l}%)`; |
13 |
};
|
14 |
|
15 |
const setBackgroundColor = () => { |
16 |
const randomColor = getRandomColor(); |
17 |
background.style.backgroundColor = randomColor; |
18 |
background.style.color = randomColor; |
19 |
};
|
20 |
|
21 |
setBackgroundColor(); |
22 |
|
23 |
setInterval(() => { |
24 |
setBackgroundColor(); |
25 |
}, 1500); |
26 |
En la demostración anterior, podemos ver que el color del texto también cambia aleatoriamente pero de manera invertida, para que siga siendo legible con respecto al fondo. Esto se hace usando CSS.
Invierte colores de texto con CSS
Primero enviamos el mismo color que tiene el fondo para el color del texto en nuestra función setBackgroundColor.
1 |
const setBackgroundColor = () => { |
2 |
const randomColor = getRandomColor(); |
3 |
background.style.backgroundColor = randomColor; |
4 |
background.style.color = randomColor; |
5 |
};
|
Luego usamos el filtro invert de CSS para asegurarnos de que el color del texto contraste con el fondo.
1 |
h1 { |
2 |
-webkit-filter: invert(100%); |
3 |
filter: invert(100%); |
4 |
transition: color 1s; |
5 |
}
|
Cómo generar colores pastel aleatoriamente
Un beneficio del uso de valores de color HSL es que podemos controlar qué tan saturados o brillantes son los colores generados aleatoriamente. De esta manera podemos modificar nuestro código para generar solamente colores pastel.
Hacemos esto estableciendo un valor fijo de 100% para la saturación y un valor de 90% para la luminosidad. Nuestro código actualizado se ve de esta manera:
1 |
const getRandomPastelColor = () => { |
2 |
const h = getRandomNumber(360); |
3 |
|
4 |
return `hsl(${h}deg, 100%, 90%)`; |
5 |
};
|
Cómo generar colores oscuros aleatoriamente
Podemos aplicar la misma lógica para generar colores más oscuros.
1 |
const getRandomDarkColor = () => { |
2 |
const h = getRandomNumber(360); |
3 |
|
4 |
return `hsl(${h}deg, 50%, 10%)`; |
5 |
};
|
Conclusión
Este tutorial te ha enseñado principalmente cómo generar colores aleatorios con JavaScript, pero también debería haberte proporcionado una buena noción sobre la notación HSL para colores, además del uso de la biblioteca Math para generar números.
¡No dudes en aplicar esto a un proyecto en el que estés trabajando para enriquecer tu página!
Aprende habilidades de JavaScript
Tenemos una amplia gama de tutoriales de JavaScript de nivel principiante a intermedio que te enseñan conocimientos básicos y habilidades prácticas.


CSSCambia entre esquemas de color con variables CSS y JavaScriptJemima Abu

JavaScriptCómo crear una barra de progreso de lectura con CSS y JavaScriptAdi Purdila

Eventos de desplazamientoCómo animar durante el desplazamiento con JavaScript puroJemima Abu

HTMLCrea una aplicación meteorológica simple con JavaScript puroGeorge Martsoukos

JavaScriptUna introducción a los oyentes de eventos de JavaScript para los diseñadores webAnna Monus

JavaScriptCómo implementar rebote y aceleración con JavaScriptJemima Abu

JavaScriptCómo crear un modal emergente con JavaScript desde ceroGeorge Martsoukos



