Create a Magical Night Sky Effect with CSS and JavaScript

WHAT TO KNOW - Sep 10 - - Dev Community

<!DOCTYPE html>





Create a Magical Night Sky Effect with CSS and JavaScript

<br> body {<br> margin: 0;<br> padding: 0;<br> background-color: #000;<br> overflow: hidden;<br> }</p> <div class="highlight"><pre class="highlight plaintext"><code> .canvas { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; } .star { position: absolute; background-color: #fff; border-radius: 50%; box-shadow: 0 0 10px #fff; opacity: 0.8; animation: twinkle 3s linear infinite; } @keyframes twinkle { 0% { transform: scale(1); } 50% { transform: scale(1.2); } 100% { transform: scale(1); } } .moon { position: absolute; width: 150px; height: 150px; border-radius: 50%; background-color: #fff; box-shadow: 0 0 30px #fff; top: 100px; left: 50%; transform: translateX(-50%); animation: moon-shine 10s linear infinite; } @keyframes moon-shine { 0% { opacity: 1; } 50% { opacity: 0.8; } 100% { opacity: 1; } } .cloud { position: absolute; width: 300px; height: 100px; background-color: #fff; opacity: 0.5; border-radius: 50%; animation: cloud-drift 20s linear infinite; } @keyframes cloud-drift { 0% { transform: translateX(0) translateY(100px); } 100% { transform: translateX(100%) translateY(100px); } } </code></pre></div> <p>




<br> const canvas = document.querySelector(&#39;.canvas&#39;);<br> const numStars = 200;</p> <div class="highlight"><pre class="highlight plaintext"><code> // Create stars for (let i = 0; i &lt; numStars; i++) { const star = document.createElement('div'); star.classList.add('star'); // Randomize position and size star.style.left = `${Math.random() * 100}%`; star.style.top = `${Math.random() * 100}%`; star.style.width = `${Math.random() * 3}px`; star.style.height = `${Math.random() * 3}px`; canvas.appendChild(star); } // Create the moon const moon = document.createElement('div'); moon.classList.add('moon'); canvas.appendChild(moon); // Create clouds for (let i = 0; i &lt; 3; i++) { const cloud = document.createElement('div'); cloud.classList.add('cloud'); // Randomize position and size cloud.style.left = `${Math.random() * 100}%`; cloud.style.width = `${Math.random() * 300}px`; cloud.style.height = `${Math.random() * 100}px`; cloud.style.top = `${Math.random() * 50}%`; canvas.appendChild(cloud); } </code></pre></div> <p>


Create a Magical Night Sky Effect with CSS and JavaScript



This article will guide you through the process of creating a mesmerizing night sky effect using CSS and JavaScript. We will explore how to simulate twinkling stars, a glowing moon, and drifting clouds to bring a touch of celestial wonder to your web pages.



Introduction: The Magic of a Night Sky



The night sky holds a captivating allure. From the twinkling stars to the silvery moon, it inspires wonder and evokes a sense of awe. Incorporating a night sky effect into your web design can create a magical and inviting atmosphere. This effect is particularly useful for projects related to astronomy, space exploration, dreamscapes, and even calming websites.



Building Blocks: The Tools of Our Trade



Our night sky creation will rely on the powerful combination of CSS and JavaScript. Here's a breakdown of how these technologies will come into play:



CSS: Styling the Celestial Elements



CSS will be our primary tool for styling and animating the different celestial bodies. Here's what we'll be using:



  • Positioning:
    We'll use absolute positioning to place elements on the canvas and control their movement.

  • Background Color:
    White will be our default star color, but we can experiment with different hues.

  • Border Radius:
    This will give our stars and moon their circular shape.

  • Box Shadow:
    A subtle box shadow will add depth and realism to the stars and moon.

  • Opacity:
    We'll adjust the opacity to create a sense of distance and depth.

  • Animation:
    CSS animations are key for simulating the twinkling of stars and the drift of clouds.


JavaScript: Adding Dynamicism and Randomness



JavaScript will enable us to dynamically create and place our celestial elements. We'll leverage its power to:



  • Dynamic Star Creation:
    Generate a large number of stars with random positions and sizes.

  • Positioning:
    Set the precise position of each star using random values.

  • Moon Placement:
    Place the moon at a desired location on the canvas.

  • Cloud Generation:
    Create multiple clouds with randomized characteristics.


Step-by-Step Guide: Constructing the Night Sky



Let's dive into the hands-on process of creating our night sky masterpiece:


  1. Setting Up the HTML Structure

Start by creating a simple HTML file. Include a div with the class canvas , which will act as our container for the night sky elements.

<div class="canvas"></div>

  • Styling with CSS

    Next, add the following CSS rules to your stylesheet (or within a style tag in your HTML file):

    body {
        margin: 0;
        padding: 0;
        background-color: #000;
        overflow: hidden;
    }
    
    .canvas {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        z-index: -1;
    }
    
    .star {
        position: absolute;
        background-color: #fff;
        border-radius: 50%;
        box-shadow: 0 0 10px #fff;
        opacity: 0.8;
        animation: twinkle 3s linear infinite;
    }
    
    @keyframes twinkle {
        0% {
            transform: scale(1);
        }
        50% {
            transform: scale(1.2);
        }
        100% {
            transform: scale(1);
        }
    }
    
    .moon {
        position: absolute;
        width: 150px;
        height: 150px;
        border-radius: 50%;
        background-color: #fff;
        box-shadow: 0 0 30px #fff;
        top: 100px;
        left: 50%;
        transform: translateX(-50%);
        animation: moon-shine 10s linear infinite;
    }
    
    @keyframes moon-shine {
        0% {
            opacity: 1;
        }
        50% {
            opacity: 0.8;
        }
        100% {
            opacity: 1;
        }
    }
    
    .cloud {
        position: absolute;
        width: 300px;
        height: 100px;
        background-color: #fff;
        opacity: 0.5;
        border-radius: 50%;
        animation: cloud-drift 20s linear infinite;
    }
    
    @keyframes cloud-drift {
        0% {
            transform: translateX(0) translateY(100px);
        }
        100% {
            transform: translateX(100%) translateY(100px);
        }
    }
    

    This CSS defines the appearance and behavior of our celestial elements. The twinkle animation gives the stars their pulsating effect, while the moon-shine animation simulates a subtle change in the moon's brightness. The cloud-drift animation makes the clouds move gracefully across the sky.


  • Bringing it to Life with JavaScript

    Now, let's add some JavaScript code within a script tag at the end of your HTML file:

    <script>
        const canvas = document.querySelector('.canvas');
        const numStars = 200;
    
        // Create stars
        for (let i = 0; i < numStars; i++) {
            const star = document.createElement('div');
            star.classList.add('star');
    
            // Randomize position and size
            star.style.left = `${Math.random() * 100}%`;
            star.style.top = `${Math.random() * 100}%`;
            star.style.width = `${Math.random() * 3}px`;
            star.style.height = `${Math.random() * 3}px`;
    
            canvas.appendChild(star);
        }
    
        // Create the moon
        const moon = document.createElement('div');
        moon.classList.add('moon');
        canvas.appendChild(moon);
    
        // Create clouds
        for (let i = 0; i < 3; i++) {
            const cloud = document.createElement('div');
            cloud.classList.add('cloud');
    
            // Randomize position and size
            cloud.style.left = `${Math.random() * 100}%`;
            cloud.style.width = `${Math.random() * 300}px`;
            cloud.style.height = `${Math.random() * 100}px`;
            cloud.style.top = `${Math.random() * 50}%`;
    
            canvas.appendChild(cloud);
        }
    </script>
    

    This JavaScript code does the following:

    • Selects the canvas: It finds the canvas element in the HTML.
    • Creates stars: It generates a set number of stars ( numStars ) using a loop. For each star, it sets random positions and sizes.
    • Creates the moon: It creates a single moon element and positions it in the middle-top of the canvas.
    • Creates clouds: It generates a few clouds with random positions, sizes, and speeds. The cloud-drift animation makes them move from left to right.

    Customization and Expansion: Taking it Further

    Now that you have a basic night sky, let's explore some ways to enhance it:


  • Experiment with Colors

    Don't limit yourself to white stars! Change the background-color of the .star class to experiment with different colors. You could have blue stars, red stars, or even a mix of colors to create a more vibrant sky.


  • Add Meteor Showers

    Add a touch of drama by simulating meteor showers. You could create a new class for meteors and then use JavaScript to generate them randomly, making them appear briefly before disappearing.


  • Incorporate Star Constellations

    For an astronomical theme, create star constellations by strategically placing stars in specific patterns. You could use CSS to group stars together and even add labels to identify the constellations.


  • Enhance the Clouds

    Experiment with different cloud shapes and sizes by modifying the width and height of the .cloud class. You could also add multiple layers of clouds, with each layer having different opacity and movement speeds.


  • Dynamic Moon Phases

    Instead of a static moon, you can create a moon phase animation using CSS or JavaScript. Use an array of images representing different moon phases and cycle through them to simulate the lunar cycle.

    Conclusion: A Night Sky of Your Own

    Congratulations! You now have the knowledge and skills to create your own magical night sky effect using CSS and JavaScript. Remember, the possibilities are endless. Experiment, customize, and unleash your creativity to build a truly breathtaking celestial spectacle on your web pages.

    Key takeaways:

    • CSS is powerful for styling and animating visual elements.
    • JavaScript enables dynamic generation and control of elements.
    • The combination of CSS and JavaScript is essential for creating captivating interactive experiences.
    • Don't be afraid to experiment and add your own unique touches to make your night sky truly special.
  • . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    Terabox Video Player