JSFiddle - React, Tailwind, and code Playground
by HDL52
HTML
<div id="bg"></div>
<svg>
<filter id='noise'>
<feTurbulence type='fractalNoise' baseFrequency='0.03' numOctaves='1' seed='1'>
<!--
<animate attributeName="seed" dur="0.5s" values="1;5" repeatCount="indefinite" />
<animate attributeName="baseFrequency" dur="5s" values="-0.01;0.01;-0.01" repeatCount="indefinite" />
-->
</feTurbulence>
<feDisplacementMap xChannelSelector="B" yChannelSelector="G" scale="150" in="SourceGraphic">
<animate attributeName="scale" dur="10s" values="150;0;-150;0;150" repeatCount="indefinite" />
</feDisplacementMap>
</filter>
</svg>
CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
*::before,
*::after {
box-sizing: border-box;
}
html,
body {
overscroll-behavior-x: none;
overscroll-behavior-y: none;
scroll-behavior: smooth;
}
body {
position: relative;
width: 100vw;
min-height: 100vh;
text-align: center;
overflow-x: hidden;
background: black;
}
:root {
--angle: 0deg;
}
@property --angle {
syntax: "<angle>";
initial-value: 0deg;
inherits: false;
}
#bg {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background-image: url(https://upload.wikimedia.org/wikipedia/commons/8/86/Edvard_Munch_-_The_Scream_-_Google_Art_Project.jpg);
background-size: cover;
--origin: top 60% left 40%;
background-position: var(--origin);
transform-origin: center;
transform: scale3d(1.3, 1.3, 1);
filter: hue-rotate(var(--angle)) url(#noise);
/*
animation: anim 20s linear infinite;
*/
}
@keyframes anim {
0% {
--angle: 0deg;
}
100% {
--angle: 360deg;
}
}
svg {
position: fixed;
top: 0;
left: 0;
width: 0;
height: 0;
z-index: -1;
}