Welcome Experience Animation
Preview
Edit
Download
Run
Download Options
HTML File
Download as .html file
CSS File
Download as .css file
JavaScript File
Download as .js file
Combined HTML
All code in one HTML file
Project ZIP
All files in a ZIP archive
Cancel
HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Luxury Welcome</title> <link rel="stylesheet" href="style.css"> </head> <body> <div class="hero"> <canvas id="particles"></canvas> <div class="content"> <h1 class="typewriter">Welcome to the Future</h1> <p class="fade-in">Crafted with elegance, built with power.</p> <button class="cta-button">Explore Now</button> </div> </div> <script src="script.js"></script> </body> </html>
CSS
* { margin: 0; padding: 0; box-sizing: border-box; } body, html { height: 100%; font-family: 'Segoe UI', sans-serif; background: #000; overflow: hidden; } .hero { position: relative; height: 100vh; width: 100%; display: flex; align-items: center; justify-content: center; color: #fff; } canvas#particles { position: absolute; width: 100%; height: 100%; z-index: 0; } .content { text-align: center; z-index: 2; } .typewriter { font-size: 3em; color: gold; border-right: 2px solid gold; width: 0; white-space: nowrap; overflow: hidden; animation: typing 4s steps(30, end) forwards, blink 0.75s step-end infinite; } @keyframes typing { from { width: 0; } to { width: 100%; } } @keyframes blink { from, to { border-color: transparent; } 50% { border-color: gold; } } .fade-in { margin-top: 20px; font-size: 1.5em; opacity: 0; animation: fade 2s ease-in-out 4s forwards; } @keyframes fade { to { opacity: 1; } } .cta-button { margin-top: 30px; padding: 12px 30px; background: gold; color: black; border: none; border-radius: 30px; font-size: 1em; cursor: pointer; transition: transform 0.3s ease; } .cta-button:hover { transform: scale(1.1); }
JavaScript
const canvas = document.getElementById("particles"); const ctx = canvas.getContext("2d"); canvas.width = window.innerWidth; canvas.height = window.innerHeight; let particles = []; for (let i = 0; i < 80; i++) { particles.push({ x: Math.random() * canvas.width, y: Math.random() * canvas.height, radius: Math.random() * 2 + 1, speedX: (Math.random() - 0.5) * 0.8, speedY: (Math.random() - 0.5) * 0.8 }); } function animate() { ctx.clearRect(0, 0, canvas.width, canvas.height); particles.forEach(p => { p.x += p.speedX; p.y += p.speedY; if (p.x < 0 || p.x > canvas.width) p.speedX *= -1; if (p.y < 0 || p.y > canvas.height) p.speedY *= -1; ctx.beginPath(); ctx.arc(p.x, p.y, p.radius, 0, Math.PI * 2); ctx.fillStyle = "rgba(255, 215, 0, 0.5)"; ctx.fill(); }); requestAnimationFrame(animate); } animate();
Output Preview
Desktop
Mobile
Fullscreen