Blend Invert
Fill & Texture · Animated · pure CSS
A self-contained backdrop of drifting two-tone stripes sits behind the glyphs, and mix-blend-mode: difference inverts a near-white duplicate wherever the boundary crosses it. The invert line sweeps continuously through the letterforms as the bands drift — bright over the dark stripe, dark over the light one — walled off inside the scope so the blend never touches the page.
How it works
Blend Invert is an animated fill & texture text effect rendered entirely in CSS. A data-text attribute mirrors the word into ::before/::after layers, so copy that attribute together with the CSS.
Controls
Blend Invert exposes 3 dedicated controls — Backdrop Hue, Drift Speed and Band Angle — 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
/* Blend Invert — made with TEXT-FX · https://text-fx.app
* HTML: the element needs a data-text attribute equal to its text.
* Font: 'Bungee', cursive (load from Google Fonts).
*/
.text-effect {
font-family: 'Bungee', cursive;
font-weight: 700;
letter-spacing: 8px;
text-transform: none;
}
.text-effect {
position: relative;
display: inline-block;
isolation: isolate;
color: transparent;
box-shadow: 0 14px 30px rgba(0,0,0,0.5);
border-radius: 0.1em;
}
.text-effect::before {
content: "";
position: absolute;
inset: -0.22em -0.42em;
border-radius: 0.14em;
background-image: repeating-linear-gradient(60deg, hsl(126 70% 16%) 0px, hsl(126 70% 16%) 40px, hsl(126 52% 84%) 40px, hsl(126 52% 84%) 80px);
animation: text-effect-drift 4.6s linear infinite;
}
.text-effect::after {
content: attr(data-text);
position: absolute;
inset: 0;
color: hsl(0 0% 97%);
mix-blend-mode: difference;
pointer-events: none;
}
@keyframes text-effect-drift {
from { background-position: 0px 0px; }
to { background-position: 69.28px -40px; }
}
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: 'Bungee', cursive;
font-weight: 700;
letter-spacing: 8px;
text-transform: none;
}
.text-effect {
position: relative;
display: inline-block;
isolation: isolate;
color: transparent;
box-shadow: 0 14px 30px rgba(0,0,0,0.5);
border-radius: 0.1em;
}
.text-effect::before {
content: "";
position: absolute;
inset: -0.22em -0.42em;
border-radius: 0.14em;
background-image: repeating-linear-gradient(60deg, hsl(126 70% 16%) 0px, hsl(126 70% 16%) 40px, hsl(126 52% 84%) 40px, hsl(126 52% 84%) 80px);
animation: text-effect-drift 4.6s linear infinite;
}
.text-effect::after {
content: attr(data-text);
position: absolute;
inset: 0;
color: hsl(0 0% 97%);
mix-blend-mode: difference;
pointer-events: none;
}
@keyframes text-effect-drift {
from { background-position: 0px 0px; }
to { background-position: 69.28px -40px; }
}
</style>
<div data-text="Your text" class="text-effect">Your text</div>
- Category
- Fill & Texture
- Type
- Animated
- Browser support
- mix-blend-mode: difference over an isolated ::before/::after pair (all modern browsers)
- Capabilities
- dataText