JSFiddle - React, Tailwind, and code Playground
by HDL52
HTML
<div id="bg"></div>
<main>
<section>
<div>
<h1>SVG Noise filter</h1>
<h2>#4 fractalNoise</h2>
</div>
</section>
</main>
<svg>
<filter id='noise'>
<feTurbulence type='fractalNoise' baseFrequency='0.3' numOctaves='1' seed='10'>
<!--
<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="50" in="SourceGraphic">
<animate attributeName="scale" dur="8s" values="50;1;1;50" repeatCount="indefinite" />
</feDisplacementMap>
</filter>
</svg>
CSS
@font-face {
font-family: "NeueMontreal-Bold";
src: url("https://raw.githubusercontent.com/Hongda-OSU/PicGo-2.3.1/master/imgNeueMontreal-Bold.otf");
font-display: swap;
}
* {
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 {
font-family: "NeueMontreal-Bold", sans-serif;
font-size: 3rem;
position: relative;
width: 100vw;
min-height: 100vh;
text-align: center;
overflow-x: hidden;
background: black;
color: #e2e2e2;
}
: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/6/63/Vincent_van_Gogh_-_Wheat_Field_with_Cypresses_-_Google_Art_Project.jpg);
background-size: cover;
--origin: bottom center;
background-position: var(--origin);
transform-origin: center;
transform: scale3d(1.3, 1.3, 1);
filter: hue-rotate(var(--angle)) url(#noise);
animation: anim 30s linear infinite;
}
@keyframes anim {
0% {
--angle: 0deg;
}
100% {
--angle: 360deg;
}
}
svg {
position: fixed;
top: 0;
left: 0;
width: 0;
height: 0;
z-index: -1;
}
main {
position: relative;
mix-blend-mode: color-dodge;
}
section {
position: relative;
width: 100vw;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
h2 {
font-size: 2rem;
}
@media screen and (max-width: 900px) {
body {
font-size: 1rem;
}
h2 {
font-size: 0.8rem;
}
}