<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Muhammad Ali</title>
    <description>The latest articles on Forem by Muhammad Ali (@alikhanzada577).</description>
    <link>https://forem.com/alikhanzada577</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1520949%2F60b4ad8e-bb8e-49a1-aeab-72afc6a71ee1.JPEG</url>
      <title>Forem: Muhammad Ali</title>
      <link>https://forem.com/alikhanzada577</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/alikhanzada577"/>
    <language>en</language>
    <item>
      <title>Partial Routing in React</title>
      <dc:creator>Muhammad Ali</dc:creator>
      <pubDate>Fri, 19 Jul 2024 13:33:16 +0000</pubDate>
      <link>https://forem.com/alikhanzada577/partial-routing-in-react-290p</link>
      <guid>https://forem.com/alikhanzada577/partial-routing-in-react-290p</guid>
      <description>&lt;p&gt;React Router allows for partial matching of paths, which can sometimes lead to unexpected behavior if not managed correctly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Partial Matching?&lt;/strong&gt;&lt;br&gt;
Partial matching means that a route will match any path that starts with the specified path.&lt;br&gt;
&lt;strong&gt;Example:&lt;/strong&gt; a route defined for &lt;strong&gt;/about&lt;/strong&gt; will match both &lt;strong&gt;/about&lt;/strong&gt; and &lt;strong&gt;/about/team.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Control Partial Matching&lt;/strong&gt;&lt;br&gt;
To prevent partial matching, use the exact prop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Route exact path="/about" component={About} /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>react</category>
      <category>reactjsdevelopment</category>
      <category>reactrouting</category>
      <category>webdev</category>
    </item>
    <item>
      <title>On-Scroll Animation</title>
      <dc:creator>Muhammad Ali</dc:creator>
      <pubDate>Wed, 05 Jun 2024 21:30:47 +0000</pubDate>
      <link>https://forem.com/alikhanzada577/on-scroll-animation-11am</link>
      <guid>https://forem.com/alikhanzada577/on-scroll-animation-11am</guid>
      <description>&lt;p&gt;Hey everyone!&lt;/p&gt;

&lt;p&gt;I recently worked on a cool feature: &lt;strong&gt;on-scroll animations&lt;/strong&gt;. &lt;br&gt;
These animations make your site more engaging and interactive. I used the Intersection Observer API to achieve this effect, and it was surprisingly easy. Here’s a quick rundown of how I did it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTML&lt;/strong&gt;&lt;br&gt;
First, I set up the HTML structure. I created several sections that would animate into view as the user scrolls. Here’s the code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;body&amp;gt;
  &amp;lt;section class="hidden"&amp;gt;
    &amp;lt;h1&amp;gt;Hello Folks!&amp;lt;/h1&amp;gt;
    &amp;lt;p&amp;gt;On scroll code snippet&amp;lt;/p&amp;gt;
  &amp;lt;/section&amp;gt;
  &amp;lt;section class="hidden"&amp;gt;
    &amp;lt;h2&amp;gt;Tech Stack&amp;lt;/h2&amp;gt;
    &amp;lt;div class="logos"&amp;gt;
      &amp;lt;div class="logo hidden"&amp;gt;
        &amp;lt;img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTYk594AhSKw5Eb3iHkPHs_XmpCqaRVgu0mvg&amp;amp;s" alt="logo"&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;div class="logo hidden"&amp;gt;
        &amp;lt;img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ_9-dX6ofdk9qorLSVu4R02VV2StVoC1rboA&amp;amp;s" alt="logo"&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;div class="logo hidden"&amp;gt;
        &amp;lt;img src="https://logodownload.org/wp-content/uploads/2022/04/javascript-logo-1.png" alt="logo"&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;div class="logo hidden"&amp;gt;
        &amp;lt;img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcThGyyY4OZ3bk3rFDaYtAbHR8htxrLHnjw2nxRL_80Xs7F0KG8-4dgIxP-wtQKFhdyXyvQ&amp;amp;usqp=CAU" alt="logo"&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/section&amp;gt;
  &amp;lt;section class="hidden"&amp;gt;
    &amp;lt;h2&amp;gt;Front End Engineering&amp;lt;/h2&amp;gt;
    &amp;lt;p&amp;gt;The things you own end up owning you! It's only after you lose everything that you're free to do anything&amp;lt;/p&amp;gt;
  &amp;lt;/section&amp;gt;
&amp;lt;/body&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;CSS&lt;/strong&gt;&lt;br&gt;
Next, I wrote some CSS to style the sections. The key was to start with the elements hidden and then animate them into view. Here’s what the CSS looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;body {
  background-color: #131316;
  color: #ffffff;
  font-family: 'Poppins', sans-serif;
  padding: 0;
  margin: 0;
}

section {
  display: grid;
  place-items: center;
  align-content: center;
  min-height: 100vh;
}

.hidden {
  opacity: 0;
  filter: blur(5px);
  transform: translateX(-100%);
  transition: all 1s;
}

.show {
  opacity: 1;
  filter: blur(0);
  transform: translateX(0);
}

.logos {
  display: flex;
}

.logo {
  margin-left: 2px;
  margin-right: 2px;
}

.logo img {
  height: 100px;
}

.logo:nth-child(2) {
  transition-delay: 200ms;
}

.logo:nth-child(3) {
  transition-delay: 400ms;
}

.logo:nth-child(4) {
  transition-delay: 600ms;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;JavaScript for Intersection Observer&lt;/strong&gt;&lt;br&gt;
The real magic happens with JavaScript. I used the Intersection Observer API to detect when each section comes into view and apply the animation. Here’s the script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;document.addEventListener('DOMContentLoaded', () =&amp;gt; {
  const observer = new IntersectionObserver((entries) =&amp;gt; {
    entries.forEach((entry) =&amp;gt; {
      if (entry.isIntersecting) {
        entry.target.classList.add('show');
      } else {
        entry.target.classList.remove('show');
      }
    });
  });

  const hiddenElements = document.querySelectorAll('.hidden');
  hiddenElements.forEach((el) =&amp;gt; observer.observe(el));
});

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;How It Works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTML&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I created sections with the class &lt;strong&gt;hidden&lt;/strong&gt; which will be animated into view.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;CSS&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The .hidden class hides the elements initially using opacity, blur, and transform properties.&lt;/li&gt;
&lt;li&gt;The .show class makes the elements visible by resetting these properties.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;JavaScript&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;IntersectionObserver&lt;/strong&gt; checks if elements are in the viewport.&lt;/li&gt;
&lt;li&gt;When elements come into view, the &lt;strong&gt;show&lt;/strong&gt; class is added to make them visible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that’s it! With this setup, as you scroll down the page, the hidden sections will smoothly animate into view. This little touch can really enhance the user experience on your site. I had a lot of fun implementing it, and I hope you do too. &lt;br&gt;
&lt;strong&gt;Happy coding!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Also, Check out this Pen I made!&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/Alikhanzada577/embed/pomwNqo?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>animation</category>
      <category>frontend</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Background Animation with Pure CSS</title>
      <dc:creator>Muhammad Ali</dc:creator>
      <pubDate>Mon, 03 Jun 2024 11:15:40 +0000</pubDate>
      <link>https://forem.com/alikhanzada577/background-animation-with-pure-css-3j55</link>
      <guid>https://forem.com/alikhanzada577/background-animation-with-pure-css-3j55</guid>
      <description>&lt;p&gt;If you're looking to add some life to your website, a background animation can do wonders. Today, I'll show you how to create a beautiful, animated bubble background using just HTML and CSS. This simple effect can add a modern and dynamic touch to your site. Let's dive into the code!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTML Structure&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;body&amp;gt;
  &amp;lt;div class='container'&amp;gt;
    &amp;lt;div class='bubbles'&amp;gt;

&amp;lt;span style='--i:11;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:12;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:14;'&amp;gt;&amp;lt;/span&amp;gt;
 &amp;lt;span style='--i:16;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:13;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:15;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:20;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:24;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:23;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:22;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:20;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:11;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:12;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:14;'&amp;gt;&amp;lt;/span&amp;gt;
 &amp;lt;span style='--i:16;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:13;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:15;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:20;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:24;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:23;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:22;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:20;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:11;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:12;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:14;'&amp;gt;&amp;lt;/span&amp;gt;
 &amp;lt;span style='--i:16;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:13;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:15;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:20;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:24;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:23;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:22;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:20;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:11;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:12;'&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span style='--i:14;'&amp;gt;&amp;lt;/span&amp;gt;
 &amp;lt;span style='--i:16;'&amp;gt;

  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the &lt;strong&gt;HTML&lt;/strong&gt;, we have a container div that holds another div with the class bubbles. Inside the bubbles div, there are multiple span elements representing each bubble. The --i variable will be used to control the animation speed of each bubble.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CSS Styling&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*
{
  margin:0;
  padding:0;
  box-sizing:border-box;
}

body{
  min-height:100vh;
  background: #0c192c;

}
.container{
  position:relative;
  width:100%;
    height:100vh;
  overflow:hidden;
}
.bubbles{
  position:relative;
  display:flex;

}
.bubbles span{
  position:relative;
width:30px;
  height:30px;
  background:#4fc3dc;
  margin:0 4px;
  border-radius:50%;
  box-shadow:0 0 0 10px #4fc3dc44,0 0 50px #4fc3dc,
    0 0 100px #4fc3dc;
  animation:animate 15s linear infinite;
animation-duration:calc(60s/var(--i))

}
.bubbles span:nth-child(even){
  background:#ff2d75;
  box-shadow:0 0 0 10px #4fc3dc44,
    0 0 50px #ff2d7544,
    0 0 100px #ff2d75;
}
@keyframes animate{
  0%{
   transform: translateY(100vh) scale(0);
  }
 100%{
   transform: translateY(-10vh) scale(1);
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's break down the CSS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Global Styles:&lt;/strong&gt; We start by resetting the margin, padding, and setting box-sizing to border-box for all elements to ensure consistent styling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Body and Container:&lt;/strong&gt; The body has a dark blue background (#0c192c) and a minimum height of 100vh to cover the entire viewport. The .container takes up the full viewport height and width and hides any overflow content.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bubbles:&lt;/strong&gt; The .bubbles div is set to display: flex to arrange the bubble spans horizontally. Each span (bubble) is styled with a specific size, color, and box-shadow to give it a glowing effect. The animation property animates each bubble with a duration dependent on the --i variable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Even Bubbles:&lt;/strong&gt; Bubbles at even positions are given a different color (#ff2d75) and matching shadows for a more dynamic effect.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Keyframes:&lt;/strong&gt; The @keyframes rule defines the animation. Bubbles start at the bottom (translateY(100vh)) and scale from 0 to their full size, moving upward out of the viewport (translateY(-10vh)).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With just a few lines of HTML and CSS, you've created an eye-catching bubble animation for your website's background. This effect can be easily customized by adjusting the bubble colors, sizes, and animation speeds. Feel free to experiment and make it your own!&lt;/p&gt;

&lt;p&gt;Adding such dynamic visuals can greatly enhance the user experience and make your site stand out. &lt;br&gt;
&lt;strong&gt;Happy coding!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/Alikhanzada577/embed/rNgmaPB?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>backgroundanimation</category>
      <category>frontend</category>
      <category>css</category>
      <category>animation</category>
    </item>
    <item>
      <title>Interactive Loading Animation with CSS</title>
      <dc:creator>Muhammad Ali</dc:creator>
      <pubDate>Mon, 27 May 2024 15:57:04 +0000</pubDate>
      <link>https://forem.com/alikhanzada577/interactive-loading-animation-with-css-26fm</link>
      <guid>https://forem.com/alikhanzada577/interactive-loading-animation-with-css-26fm</guid>
      <description>&lt;p&gt;This project demonstrates how to create an engaging loading animation using pure CSS.&lt;br&gt;
 The animation features a rotating background color and a loader composed of** 20 spinning dots **that pulsate sequentially. The background hue shifts continuously, creating a dynamic visual effect. Each dot is positioned using CSS variables and animated with keyframes to scale up and down in a rhythmic pattern.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rotating Background: Smooth color transitions using hue-rotate.&lt;/li&gt;
&lt;li&gt;Pulsating Dots: Sequential animation delays for a wave effect.&lt;/li&gt;
&lt;li&gt;Pure CSS: No JavaScript required, ensuring lightweight performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Embed the HTML in your webpage.&lt;/li&gt;
&lt;li&gt;Add the CSS to your stylesheet.&lt;/li&gt;
&lt;li&gt;Adjust the number of spans and their styles as needed for different visual effects.
&lt;strong&gt;This loader is perfect for adding a modern, visually appealing touch to your web projects.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;HTML&lt;/strong&gt;
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;section&amp;gt;
  &amp;lt;div class="loader"&amp;gt;
    &amp;lt;span style="--i:1;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:2;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:3;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:4;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:5;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:6;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:7;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:8;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:9;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:10;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:11;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:12;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:13;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:14;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:15;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:16;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:17;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:18;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:19;"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;span style="--i:20;"&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/section&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;CSS&lt;/strong&gt;
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;body, html {
  margin: 0;
  padding: 0;
  overflow: hidden;
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
width:100%;
  background: #042104;
  animation: animateBg 10s linear infinite;
}

@keyframes animateBg {
  0% {
    filter: hue-rotate(0deg);
  }
  100% {
    filter: hue-rotate(360deg);
  }
}

section .loader {
  position: relative;
  width: 120px;
  height: 120px;
}
section .loader:hover {
  position: relative;
  width: 140px;
  height: 140px;
}
section .loader span {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  transform: rotate(calc(18deg * var(--i)));
}

section .loader span::before {
  content: '';
  position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 15px;
  height: 15px;
  background: #00ff0a;
  border-radius: 50%;
  box-shadow: 0 0 10px #00ff0a, 
              0 0 20px #00ff0a, 
              0 0 40px #00ff0a, 
              0 0 60px #00ff0a, 
              0 0 80px #00ff0a, 
              0 0 100px #00ff0a;
  animation: animate 2s linear infinite;
  animation-delay: calc(0.1s * var(--i));
}

@keyframes animate {
  0% {
    transform: scale(1);
  }
  80%, 100% {
    transform: scale(0);
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/Alikhanzada577/embed/oNRYzME?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codepen</category>
      <category>css</category>
      <category>frontend</category>
      <category>animation</category>
    </item>
  </channel>
</rss>
