Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Reduce ring size with smoke animations

I found one beautiful ring with smoke animation, but I can’t fully understand it.

I want to change the size of this ring, let’s say 80px. Also, so that only one given color remains here.

I tried to just reduce the pixels, but then everything generally breaks down.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

How can I reduce the size of this ring and have only one color? Help me please.

body {
  background: #111;
}
.circle {
  position: relative;
  height: 500px;
  width: 500px;
  filter: url(#wave);
}
.circle::before {
  content: "";
  position: absolute;
  top: 100px;
  left: 100px;
  right: 100px;
  bottom: 100px;
  border: 10px solid #fff;
  border-radius: 50%;
  box-shadow: 0 0 50px #fff, inset 0 0 50px #fff;
  filter: url(#wave) blur(10px);
  animation: anim 4s linear infinite;
}

@keyframes anim {
  0% {
    box-shadow: 0 0 50px #fff, inset 0 0 50px #fff;
  }
  20% {
    box-shadow: 0 0 50px #f00, inset 0 0 50px #f00;
  }
  40% {
    box-shadow: 0 0 50px #ff0, inset 0 0 50px #ff0;
  }
  60% {
    box-shadow: 0 0 50px #0ff, inset 0 0 50px #0ff;
  }
  80% {
    box-shadow: 0 0 50px #f0f, inset 0 0 50px #f0f;
  }
}

svg {
  display: none;
}
<div class="circle"></div>

<svg>
  <filter id="wave">
    <feTurbulence x="0" y="0" baseFrequency="0.009" numOctaves="5" seed="2">
      <animate attributeName="baseFrequency" dur="30s" values="0.02;0.005;0.02" repeatCount="indefinite" />
    </feTurbulence>
    <feDisplacementMap in="SourceGraphic" scale="30" />
  </filter>
</svg>

>Solution :

I have editted your snippet to suit your needs.
Note:
because this effect uses a #wave, resizing it by setting the height and width property will ruin the effect, because #wave is not resized.
you can instead use transform: scale(0.625) to adjust the scale.

body {
  background: #111;
}
.circle {
  position: relative;
  height: 500px;
  width: 500px;
  filter: url(#wave);
  transform: scale(0.625) /* add this to adjust the scale */
}
.circle::before {
  content: "";
  position: absolute;
  top: 100px;
  left: 100px;
  right: 100px;
  bottom: 100px;
  border: 10px solid #fff;
  border-radius: 50%;
  box-shadow: 0 0 50px red, inset 0 0 50px red; /* change red with your desired color */
  filter: url(#wave) blur(10px);
}

/* remove the keyframe animation so the color stays static */

svg {
  display: none;
}
<div class="circle"></div>

<svg>
  <filter id="wave">
    <feTurbulence x="0" y="0" baseFrequency="0.009" numOctaves="5" seed="2">
      <animate attributeName="baseFrequency" dur="30s" values="0.02;0.005;0.02" repeatCount="indefinite" />
    </feTurbulence>
    <feDisplacementMap in="SourceGraphic" scale="30" />
  </filter>
</svg>
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading