How to create an animated spinning background in Elementor

Wide transparent graphic asset of a torn paper edge rendered in white, appearing blank against a white background
Thumbnail with a man in a dark jacket on the left over a purple glow with the partly hidden heading Management: Where Talent Meets Opportunity behind him, and a large slanted orange side menu panel listing Home, About Us, Services, Our Work, Careers and Contact Us with Facebook, YouTube, Instagram and LinkedIn links, a yellow CLOSE button at the top right, a magenta circle with a white list icon at the lower left, and model portrait cards visible behind the panel

The Creative Overlay Menu in Elementor — A Full-Screen Menu That Shows Off

Reboot Addons' Creative Overlay Menu: a full-screen Elementor menu with kicker, headline, CTA and eleven animated surface options. No custom ...

Read More
A web-design studio desk with a laptop and monitors showing website layouts and design tools — the kind of monthly managed-build behind the R749 to R1999 plans.

R749 vs R999 vs R1999 — What Each Website Package Actually Gets You

R749, R999, R1499 or R1999 a month — what each Reboot Websites package actually builds, and why the gap between ...

Read More
Tall parallax website demo screenshot for Apple Watch Ultra showing a hero with the heading Apple Watch Ultra: Your Companion for Every Adventure over a close up of the watch face on a wrist, a dark section with the heading A REVOLUTIONARY BLEND OF CUTTING-EDGE TECHNOLOGY AND RUGGED DURABILITY FOR THE MODERN EXPLORER beside a floating watch band image, a section of layered watch photos with translucent highlight text, and a flat lay of the watch with an orange band beside a succulent and a Bullet planner notebook, all inside the WordPress admin bar

Advanced Text FX in Elementor — 58 Text Effects in One Widget

Advanced Text FX gives you 58 text-in effects in one Elementor widget — scramble, typewriter, glitch, neon, and a whole ...

Read More
Thumbnail with a man in a dark shirt on the right, a fan of eight portrait cards of women behind him, large distressed red and orange CARD EFFECT lettering across the bottom, a magenta circle with a white list icon at the lower right, and a blurred purple radial background

Elementor Card Widgets without Custom JS — The Free Tier

Seven content widgets plus all six form stylers that build card effects, carousels, and styled forms without writing JS. Widget ...

Read More
Showing Slide 1 of 5
Thumbnail with a man in a black jacket with red trim on the left, and a red and white radial zoom burst background with large orange gradient text reading ANIMATED over a white starburst in the centre

So if you follow along in the video, I refer to this blog post for you to enter code at certain points, so below is everything you will need!

The Following are the css class names I used in the tutorial:

				
					feastanimationbackground
				
			

The Following code goes into the HMTL widget:

				
					<style>
  .feastanimationbackground {
    position: relative;
    overflow: hidden;
  }

  .feastanimationbackground::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    width: 100%;
    height: 200%;
    background-size: cover;
    background-position: center;
    transform-origin: center;
    z-index: -1;
    transform: translate(-50%, -50%) scale(1.5);
    
    
    /*to set the speed, you can change the 15s to somthing much monger or shorted */
    
    animation: spinBackground 35s linear infinite;
    
    
  }

  @keyframes spinBackground {
    from { transform: translate(-50%, -50%) scale(1.5) rotate(0deg); }
    to { transform: translate(-50%, -50%) scale(1.5) rotate(360deg); }
  }
</style>

<script>
  document.addEventListener('DOMContentLoaded', function() {
    const elements = document.querySelectorAll('.feastanimationbackground');

    elements.forEach((element, index) => {
      const computedStyle = window.getComputedStyle(element);
      const backgroundImage = computedStyle.backgroundImage;

      const styleSheet = document.createElement('style');
      styleSheet.textContent = `
        .feastanimationbackground:nth-of-type(${index + 1})::before {
          background-image: ${backgroundImage};
        }

        .feastanimationbackground:nth-of-type(${index + 1}) {
          background-image: none !important;
        }
      `;

      document.head.appendChild(styleSheet);
    });
  });
</script>