* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background-color: #222;
width: 100vw;
height: 100vh;
position: relative;
overflow: hidden;
}
.star {
--twinkle-duration: "";
--twinkle-delay: "";
--star-size: "";
position: absolute;
width: var(--star-size);
height: var(--star-size);
background: #fff;
border-radius: 50%;
animation: twinkle infinite alternate;
animation-duration: var(--twinkle-duration);
animation-delay: var(--twinkle-delay);
}
@keyframes twinkle {
from {
transform: scale(1);
}
to {
transform: scale(1.5);
box-shadow: 0 0 5px 0.5px rgba(150, 150, 150, 0.6);
}
}
// Night Sky element
const $el = document.body;
// Generate a random number between min and max values
const genRandomNumber = (min, max) => {
return Math.random() * (max - min) + min;
}
// Generate a star <div>
const genStar = () => {
const star = document.createElement("div");
star.classList.add("star");
// Gen star coordinates relative to $el size
let x = genRandomNumber(1, $el.offsetWidth);
let y = genRandomNumber(1, $el.offsetHeight);
const { style } = star;
style.left = Math.floor(x) + "px";
style.top = Math.floor(y) + "px";
style.setProperty(
"--star-size",
genRandomNumber(1, 3) + "px"
);
style.setProperty(
"--twinkle-duration",
Math.ceil(genRandomNumber(1, 5)) + "s"
);
style.setProperty(
"--twinkle-delay",
Math.ceil(genRandomNumber(1, 5)) + "s"
);
return star;
}
for (let index = 0; index < 200; index++) {
$el.append(genStar());
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.