Code Templates Collection angularforall.com

- Background Animé Ciel Nuageux CSS JS

Background Anime Nuages Css Animation Javascript Html Css Js Ciel Atmospheric Landing Page Animation Effets Visuels Design Premium Snippet

Fond d'écran animé avec nuages réalistes en CSS et JavaScript. Effets atmosphériques premium, transitions fluides et style design moderne pour landing pages.

<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8" />
  <meta name="copyright" content="AngularForAll" />
  <meta name="author" content="AngularForAll" />
  <meta name="robots" content="noindex, nofollow" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="Cache-Control" content="public, max-age=604800" />
  <title>Snippet Background Animate HTML CSS JS 2026 050700 | AngularForAll</title>
<style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    body {
      background: #000;
      min-height: 100vh;
      display: flex;
      align-items: center;
      justify-content: center;
      margin: 0;
      overflow: hidden;
    }

    .scene {
      position: relative;
      width: 100vw;
      height: 100vh;
      overflow: hidden;
      background: linear-gradient(
        180deg,
        #1e3c72 0%,
        #2a5298 15%,
        #4a7db5 35%,
        #6ea5cc 55%,
        #98c5dd 75%,
        #b8d8eb 100%
      );
    }

    /* Dégradé ciel réaliste avec plusieurs couches */
    .sky-gradient {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background: 
        radial-gradient(ellipse at 50% 0%, rgba(255,255,255,0.15) 0%, transparent 60%),
        radial-gradient(ellipse at 80% 20%, rgba(255,220,180,0.2) 0%, transparent 50%),
        radial-gradient(ellipse at 20% 80%, rgba(180,200,255,0.1) 0%, transparent 40%);
      z-index: 0;
    }

    /* Soleil */
    .sun {
      position: absolute;
      top: 8%;
      right: 15%;
      width: 120px;
      height: 120px;
      background: radial-gradient(circle at 40% 40%, 
        rgba(255,255,255,1) 0%, 
        rgba(255,250,235,1) 15%, 
        rgba(255,235,190,0.9) 40%, 
        rgba(255,200,100,0.4) 70%, 
        transparent 100%);
      border-radius: 50%;
      z-index: 1;
      box-shadow: 
        0 0 80px rgba(255,220,150,0.6),
        0 0 160px rgba(255,200,100,0.4),
        0 0 240px rgba(255,180,80,0.2);
    }

    /* Nuages */
    .clouds-layer {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      z-index: 2;
      pointer-events: none;
    }

    .cloud {
      position: absolute;
      background: white;
      border-radius: 50%;
      filter: blur(8px);
      opacity: 0.85;
      box-shadow: 
        inset 0 -4px 8px rgba(0,0,0,0.05),
        inset 0 4px 8px rgba(255,255,255,0.5);
    }

    .cloud-group {
      position: absolute;
      display: flex;
      align-items: center;
      justify-content: center;
    }

    /* Oiseaux */
    .bird {
      position: absolute;
      z-index: 3;
      color: #1a1a2e;
      font-size: 14px;
      line-height: 1;
      letter-spacing: 2px;
      opacity: 0.7;
      filter: blur(0.3px);
      transition: transform 0.1s ease;
      pointer-events: none;
      user-select: none;
    }

    /* Brume basse */
    .haze {
      position: absolute;
      bottom: 0;
      left: 0;
      width: 100%;
      height: 25%;
      background: linear-gradient(to top, 
        rgba(200,210,225,0.5) 0%, 
        rgba(200,210,225,0.2) 40%, 
        transparent 100%);
      z-index: 4;
      pointer-events: none;
    }

    /* Vignette */
    .vignette {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background: radial-gradient(ellipse at center, transparent 60%, rgba(0,0,0,0.15) 100%);
      z-index: 5;
      pointer-events: none;
    }

    @media (max-width: 768px) {
      .sun {
        width: 80px;
        height: 80px;
        top: 5%;
        right: 10%;
      }
      .bird {
        font-size: 11px;
      }
    }
  </style>
</head>
<body>
  <div class="scene">
    <div class="sky-gradient"></div>
    <div class="sun"></div>
    <div class="clouds-layer" id="cloudsLayer"></div>
    <div id="birdsLayer"></div>
    <div class="haze"></div>
    <div class="vignette"></div>
  </div>

  <script>
    (function() {
      const cloudsLayer = document.getElementById('cloudsLayer');
      const birdsLayer = document.getElementById('birdsLayer');
      const scene = document.querySelector('.scene');

      // === NUAGES RÉALISTES ===
      function createCloud(config) {
        const group = document.createElement('div');
        group.className = 'cloud-group';
        group.style.left = config.x + '%';
        group.style.top = config.y + '%';
        group.style.transform = `scale(${config.scale})`;
        group.style.width = '200px';
        group.style.height = '100px';
        group.style.position = 'absolute';

        const parts = [
          { w: 80, h: 40, x: 20, y: 30 },
          { w: 100, h: 50, x: 50, y: 15 },
          { w: 90, h: 45, x: 85, y: 28 },
          { w: 70, h: 35, x: 10, y: 22 },
          { w: 85, h: 42, x: 110, y: 20 },
          { w: 75, h: 38, x: 60, y: 40 },
        ];

        parts.forEach(part => {
          const blob = document.createElement('div');
          blob.className = 'cloud';
          blob.style.width = part.w + 'px';
          blob.style.height = part.h + 'px';
          blob.style.position = 'absolute';
          blob.style.left = part.x + 'px';
          blob.style.top = part.y + 'px';
          group.appendChild(blob);
        });

        // Animation
        const speed = config.speed || 0.3;
        const delay = config.delay || 0;
        group.style.animation = `drift${Math.floor(speed*10)} ${20 + speed * 30}s linear ${delay}s infinite`;

        return group;
      }

      // Keyframes dynamiques
      const styleEl = document.createElement('style');
      let keyframesCSS = '';
      for (let i = 1; i <= 5; i++) {
        const distance = 20 + i * 15;
        keyframesCSS += `
          @keyframes drift${i} {
            0% { transform: translateX(0px) scale(var(--s,1)); }
            100% { transform: translateX(${distance}px) scale(var(--s,1)); }
          }
        `;
      }
      styleEl.textContent = keyframesCSS;
      document.head.appendChild(styleEl);

      const cloudConfigs = [
        { x: -5, y: 12, scale: 1.0, speed: 0.4, delay: 0 },
        { x: 25, y: 5, scale: 0.75, speed: 0.3, delay: -8 },
        { x: 50, y: 15, scale: 0.9, speed: 0.35, delay: -15 },
        { x: 75, y: 8, scale: 0.7, speed: 0.32, delay: -5 },
        { x: 90, y: 18, scale: 0.65, speed: 0.38, delay: -12 },
        { x: 10, y: 28, scale: 0.55, speed: 0.28, delay: -3 },
        { x: 35, y: 22, scale: 0.8, speed: 0.33, delay: -10 },
        { x: 60, y: 30, scale: 0.6, speed: 0.3, delay: -18 },
        { x: 80, y: 25, scale: 0.5, speed: 0.35, delay: -7 },
      ];

      cloudConfigs.forEach(config => {
        const cloud = createCloud(config);
        cloud.style.setProperty('--s', config.scale);
        cloudsLayer.appendChild(cloud);
      });

      // === OISEAUX ===
      const birdSymbols = ['︿', '⌒', '︿︿', '⌒⌒'];
      const birds = [];

      function createBird(x, y, speed, direction) {
        const bird = document.createElement('div');
        bird.className = 'bird';
        bird.textContent = birdSymbols[Math.floor(Math.random() * birdSymbols.length)];
        bird.style.position = 'absolute';
        bird.style.left = x + '%';
        bird.style.top = y + '%';
        bird.style.transform = direction > 0 ? 'scaleX(1)' : 'scaleX(-1)';
        birdsLayer.appendChild(bird);

        return {
          el: bird,
          x,
          y,
          speed: speed || (0.02 + Math.random() * 0.05),
          direction: direction || (Math.random() > 0.5 ? 1 : -1),
          amplitude: 0.3 + Math.random() * 0.8,
          frequency: 0.02 + Math.random() * 0.03,
          phase: Math.random() * Math.PI * 2,
        };
      }

      // Créer 15 oiseaux
      for (let i = 0; i < 15; i++) {
        const x = Math.random() * 90;
        const y = 5 + Math.random() * 30;
        const speed = 0.02 + Math.random() * 0.06;
        const direction = Math.random() > 0.5 ? 1 : -1;
        birds.push(createBird(x, y, speed, direction));
      }

      // Animation des oiseaux
      function animateBirds(timestamp) {
        birds.forEach(bird => {
          bird.x += bird.speed * bird.direction;
          
          // Rebond
          if (bird.x > 98) {
            bird.x = 98;
            bird.direction = -1;
            bird.el.style.transform = 'scaleX(-1)';
          } else if (bird.x < 1) {
            bird.x = 1;
            bird.direction = 1;
            bird.el.style.transform = 'scaleX(1)';
          }

          // Mouvement ondulatoire vertical
          const yOffset = Math.sin(timestamp * bird.frequency + bird.phase) * bird.amplitude;
          
          bird.el.style.left = bird.x + '%';
          bird.el.style.top = (bird.y + yOffset) + '%';
        });

        requestAnimationFrame(animateBirds);
      }

      requestAnimationFrame(animateBirds);

      // === EFFET PARALLAX SOURIS ===
      document.addEventListener('mousemove', (e) => {
        const x = (e.clientX / window.innerWidth - 0.5) * 10;
        const y = (e.clientY / window.innerHeight - 0.5) * 10;
        
        document.querySelectorAll('.cloud-group').forEach((cloud, i) => {
          const factor = (i % 3 + 1) * 0.5;
          cloud.style.transform += ` translate(${x * factor}px, ${y * factor}px)`;
        });

        const sun = document.querySelector('.sun');
        if (sun) {
          sun.style.transform = `translate(${x * 0.3}px, ${y * 0.3}px)`;
        }
      });

      console.log('☁️ Ciel réaliste professionnel · Nuages & Oiseaux');
    })();
  </script>
</body>
</html>

Télécharger le fichier source

Partager