Add Magical Snowfall to Your Squarespace Site
Follow these steps to add a snowfall effect to your Squarespace site. Enjoy adding a touch of winter magic to your Squarespace site!
Step 1: Add the JavaScript
Log in to your Squarespace account.
Navigate to Settings > Advanced > Code Injection.
Scroll to the Footer section.
Paste the following JavaScript code into the footer code box and save your changes.
<script> document.addEventListener("DOMContentLoaded", function () { const body = document.body; // Use the entire page as the container const snowflakes = []; const snowflakeCount = 75; // Number of snowflakes created per batch const snowDuration = 5 * 1000; // 5 seconds const fadeDuration = 2000; // 2 seconds fade-out // Check if the user has already seen the snowfall effect const hasSeenSnowfall = sessionStorage.getItem('seenSnowfall'); if (!hasSeenSnowfall) { sessionStorage.setItem('seenSnowfall', 'true'); // Mark as seen let snowInterval; // Function to create snowflakes function createSnowflakes() { for (let i = 0; i < snowflakeCount; i++) { const snowflake = document.createElement('div'); snowflake.classList.add('snowflake'); snowflake.style.left = Math.random() * 100 + '%'; // Random horizontal position snowflake.style.animationDuration = Math.random() * 10 + 8 + 's'; // Very slow fall snowflake.style.animationDelay = Math.random() * 2 + 's'; // Stagger the start snowflake.style.width = snowflake.style.height = Math.random() * 8 + 5 + 'px'; // Random size snowflake.style.opacity = Math.random() * 0.85 + 0.05; // Random opacity between 5% and 90% body.appendChild(snowflake); snowflakes.push(snowflake); } } // Start creating snowflakes at an interval createSnowflakes(); snowInterval = setInterval(createSnowflakes, 1000); // Create snowflakes every second // Stop snow after 5 seconds and globally fade out all snowflakes setTimeout(() => { clearInterval(snowInterval); // Stop creating new snowflakes // Apply global fade-out to all snowflakes const allSnowflakes = document.querySelectorAll('.snowflake'); allSnowflakes.forEach(snowflake => { snowflake.style.transition = `opacity ${fadeDuration / 1000}s ease-out`; // Smooth fade-out snowflake.style.opacity = 0; // Gradually fade out }); // Wait for the fade-out duration before removing snowflakes setTimeout(() => { allSnowflakes.forEach(snowflake => snowflake.remove()); }, fadeDuration); }, snowDuration); } }); </script>
Step 2: Add Custom CSS
Navigate to Design > Custom CSS.
Paste the following CSS code into the Custom CSS editor:
Save your changes.
/* Snowflake styles */ .snowflake { position: absolute; top: -5%; width: 10px; height: 10px; background-color: white; border-radius: 50%; opacity: 0.8; pointer-events: none; z-index: 9999; } /* Snowfall animation */ @keyframes fall { 0% { transform: translateY(0); } 100% { transform: translateY(110vh); /* Fall beyond the bottom */ } } .snowflake { animation: fall linear infinite; /* Apply falling animation */ transition: opacity 3s ease-out; /* Smooth fade-out */ }
Key Features of the Effect
Display: Shows on any first page that is visited and doesn’t repeat again.
Duration: Snowfall lasts for 15 seconds after hovering over the logo.
Fade-Out: All snowflakes fade out smoothly over 3 seconds at the end.
Customizable: You can adjust:
snowflakeCount (number of snowflakes per batch).
snowDuration (total duration of snowfall).
fadeDuration (fade-out time).
Snowflake size, speed, and opacity in the JavaScript and CSS.