Lichen Creep
Elemental & Nature · Static · pure CSS
Each glyph is weathered stone with its own patch of moss growing up from the baseline, coverage seeded per letter so growth rises unevenly across the word instead of sweeping in one front. Warm green-to-gray-green radial patches, dusted with mottled crust flecks, stay strictly clipped to the letterform so nothing spills past the glyph outline.
How it works
Lichen Creep is a static elemental & nature text effect rendered entirely in CSS. Each character is wrapped in its own span so it can animate independently — the HTML and JSX exports include that per-letter markup. It relies on an inline SVG <defs> block (filters, gradients or clip-paths), which the HTML export carries alongside the CSS.
Controls
Lichen Creep exposes 5 dedicated controls — Coverage Height, Moss Hue, Speck Density, Crust Amount and Unevenness — on top of the shared type controls (font, weight, letter-spacing and case). Open it in the generator to tune every value live, then copy the updated CSS.
CSS
/* Lichen Creep — made with TEXT-FX · https://text-fx.app
* HTML: each character is wrapped in a <span> — see the HTML export; requires the inline <svg> filter defs — see the HTML export.
* Font: 'Syne', sans-serif (load from Google Fonts).
*/
.text-effect {
font-family: 'Syne', sans-serif;
font-weight: 700;
letter-spacing: -1px;
text-transform: none;
}
.text-effect {
position: relative;
white-space: pre;
filter: url(#text-effect-grain);
}
.text-effect .fx-ch {
position: relative;
display: inline-block;
background: radial-gradient(circle at 30% 22%, hsl(0 0% 100% / 0.12) 0%, transparent 42%),
radial-gradient(circle at 68% 80%, hsl(0 0% 0% / 0.3) 0%, transparent 46%),
linear-gradient(155deg, hsl(210 6% 56%) 0%, hsl(210 5% 42%) 45%, hsl(212 6% 30%) 100%);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
color: transparent;
-webkit-text-stroke: 0.5px hsl(210 8% 12% / 0.6);
}
.text-effect .fx-ch.fx-sp {
-webkit-text-stroke: 0;
}
.text-effect .fx-moss {
position: absolute;
inset: 0;
display: block;
pointer-events: none;
background-image:
radial-gradient(circle at calc(26% + var(--fj, 0%) * 1) 32%, hsl(68 53% 52% / 0.84) 0% 2.4%, transparent 3.4%),
radial-gradient(circle at calc(60% + var(--fj, 0%) * -1) 22%, hsl(120 35% 62% / 0.84) 0% 1.9%, transparent 2.9%),
radial-gradient(26% calc(var(--cover, 35%) * 0.6) at calc(50% + var(--bx, 0%) * 2) calc(100% - var(--cover, 35%) * 0.85), hsl(106 39% 50%) 0% 55%, transparent 68%),
radial-gradient(15% calc(var(--cover, 35%) * 0.55) at calc(13% - var(--bx, 0%)) calc(100% - var(--cover, 35%) * 0.45), hsl(92 43% 36%) 0% 55%, transparent 70%),
radial-gradient(40% calc(var(--cover, 35%) * 1.2) at calc(28% + var(--bx, 0%)) 103%, hsl(92 43% 36%) 0% 60%, transparent 72%),
radial-gradient(34% calc(var(--cover, 35%) * 0.9) at calc(72% - var(--bx, 0%)) 102%, hsl(78 49% 24%) 0% 58%, transparent 71%),
linear-gradient(to top, hsl(78 49% 24%) 0% 7%, transparent 14%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
HTML
This effect needs the markup below (per-letter spans, SVG defs, or a data-text attribute).
<!-- Made with TEXT-FX · https://text-fx.app -->
<style>
.text-effect {
font-family: 'Syne', sans-serif;
font-weight: 700;
letter-spacing: -1px;
text-transform: none;
}
.text-effect {
position: relative;
white-space: pre;
filter: url(#text-effect-grain);
}
.text-effect .fx-ch {
position: relative;
display: inline-block;
background: radial-gradient(circle at 30% 22%, hsl(0 0% 100% / 0.12) 0%, transparent 42%),
radial-gradient(circle at 68% 80%, hsl(0 0% 0% / 0.3) 0%, transparent 46%),
linear-gradient(155deg, hsl(210 6% 56%) 0%, hsl(210 5% 42%) 45%, hsl(212 6% 30%) 100%);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
color: transparent;
-webkit-text-stroke: 0.5px hsl(210 8% 12% / 0.6);
}
.text-effect .fx-ch.fx-sp {
-webkit-text-stroke: 0;
}
.text-effect .fx-moss {
position: absolute;
inset: 0;
display: block;
pointer-events: none;
background-image:
radial-gradient(circle at calc(26% + var(--fj, 0%) * 1) 32%, hsl(68 53% 52% / 0.84) 0% 2.4%, transparent 3.4%),
radial-gradient(circle at calc(60% + var(--fj, 0%) * -1) 22%, hsl(120 35% 62% / 0.84) 0% 1.9%, transparent 2.9%),
radial-gradient(26% calc(var(--cover, 35%) * 0.6) at calc(50% + var(--bx, 0%) * 2) calc(100% - var(--cover, 35%) * 0.85), hsl(106 39% 50%) 0% 55%, transparent 68%),
radial-gradient(15% calc(var(--cover, 35%) * 0.55) at calc(13% - var(--bx, 0%)) calc(100% - var(--cover, 35%) * 0.45), hsl(92 43% 36%) 0% 55%, transparent 70%),
radial-gradient(40% calc(var(--cover, 35%) * 1.2) at calc(28% + var(--bx, 0%)) 103%, hsl(92 43% 36%) 0% 60%, transparent 72%),
radial-gradient(34% calc(var(--cover, 35%) * 0.9) at calc(72% - var(--bx, 0%)) 102%, hsl(78 49% 24%) 0% 58%, transparent 71%),
linear-gradient(to top, hsl(78 49% 24%) 0% 7%, transparent 14%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
</style>
<svg width="0" height="0" style="position:absolute" aria-hidden="true"><defs>
<filter id="text-effect-grain" x="-20%" y="-20%" width="140%" height="140%">
<feTurbulence type="fractalNoise" baseFrequency="0.55" numOctaves="2" seed="7" result="n"/>
<feColorMatrix in="n" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.76 0 0 0 0" result="na"/>
<feComposite in="na" in2="SourceGraphic" operator="in" result="g"/>
<feBlend in="SourceGraphic" in2="g" mode="multiply"/>
</filter>
</defs></svg>
<div class="text-effect"><span class="fx-ch" style="--i:0;--cover:24.6%;--bx:-0.1%;--fj:0.5%">Y<span class="fx-moss" aria-hidden="true">Y</span></span><span class="fx-ch" style="--i:1;--cover:41.2%;--bx:-2.1%;--fj:7%">o<span class="fx-moss" aria-hidden="true">o</span></span><span class="fx-ch" style="--i:2;--cover:52%;--bx:-2.4%;--fj:-3.4%">u<span class="fx-moss" aria-hidden="true">u</span></span><span class="fx-ch" style="--i:3;--cover:48.2%;--bx:3.8%;--fj:1.4%">r<span class="fx-moss" aria-hidden="true">r</span></span><span class="fx-ch fx-sp" style="--i:4"> </span><span class="fx-ch" style="--i:5;--cover:40.3%;--bx:-2.1%;--fj:2%">t<span class="fx-moss" aria-hidden="true">t</span></span><span class="fx-ch" style="--i:6;--cover:42.9%;--bx:5.7%;--fj:3.6%">e<span class="fx-moss" aria-hidden="true">e</span></span><span class="fx-ch" style="--i:7;--cover:35%;--bx:-1.9%;--fj:4.8%">x<span class="fx-moss" aria-hidden="true">x</span></span><span class="fx-ch" style="--i:8;--cover:48.9%;--bx:-5.8%;--fj:0.9%">t<span class="fx-moss" aria-hidden="true">t</span></span></div>
- Category
- Elemental & Nature
- Type
- Static
- Browser support
- background-clip:text + SVG feTurbulence grain (all modern browsers)
- Capabilities
- perLetter, svgDefs