Embroidery Stitch
Fill & Texture · Static · pure CSS
The word sewn in thread: a tight diagonal satin-stitch fill of fine dark/light floss ridges with a bright sheen line, ringed by a contrasting running-stitch outline chopped into dashes. An optional woven-linen backing chip turns any letters into a hand-embroidered patch.
How it works
Embroidery Stitch is a static 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
Embroidery Stitch exposes 3 dedicated controls — Thread Hue, Stitch Density and Backing — 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
/* Embroidery Stitch — made with TEXT-FX · https://text-fx.app
* HTML: the element needs a data-text attribute equal to its text.
* Font: 'Unbounded', sans-serif (load from Google Fonts).
*/
.text-effect {
font-family: 'Unbounded', sans-serif;
font-weight: 700;
letter-spacing: 8px;
text-transform: uppercase;
}
.text-effect {
position: relative;
display: inline-block;
isolation: isolate;
color: transparent;
-webkit-text-fill-color: transparent;
background: repeating-linear-gradient(50deg, hsl(2 60% 32%) 0 2.02px, hsl(2 72% 60%) 2.02px 4.04px, hsl(2 42% 86%) 4.04px 4.95px);
-webkit-background-clip: text;
background-clip: text;
}
.text-effect::after {
content: attr(data-text);
position: absolute;
inset: 0;
z-index: -1;
color: transparent;
-webkit-text-fill-color: transparent;
-webkit-text-stroke: 3.3px hsl(182 58% 70%);
-webkit-mask: repeating-linear-gradient(140deg, #000 0 4.4px, transparent 4.4px 7.6px);
mask: repeating-linear-gradient(140deg, #000 0 4.4px, transparent 4.4px 7.6px);
pointer-events: none;
}
.text-effect::before {
content: "";
position: absolute;
inset: -0.26em -0.5em;
z-index: -2;
border-radius: 0.16em;
background: repeating-linear-gradient(0deg, rgba(255,255,255,0.05) 0 1px, transparent 1px 4px), repeating-linear-gradient(90deg, rgba(255,255,255,0.05) 0 1px, transparent 1px 4px), hsl(2 12% 18%);
box-shadow: inset 0 0 0 1px hsl(2 12% 10%), 0 6px 16px rgba(0,0,0,0.45);
}
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: 'Unbounded', sans-serif;
font-weight: 700;
letter-spacing: 8px;
text-transform: uppercase;
}
.text-effect {
position: relative;
display: inline-block;
isolation: isolate;
color: transparent;
-webkit-text-fill-color: transparent;
background: repeating-linear-gradient(50deg, hsl(2 60% 32%) 0 2.02px, hsl(2 72% 60%) 2.02px 4.04px, hsl(2 42% 86%) 4.04px 4.95px);
-webkit-background-clip: text;
background-clip: text;
}
.text-effect::after {
content: attr(data-text);
position: absolute;
inset: 0;
z-index: -1;
color: transparent;
-webkit-text-fill-color: transparent;
-webkit-text-stroke: 3.3px hsl(182 58% 70%);
-webkit-mask: repeating-linear-gradient(140deg, #000 0 4.4px, transparent 4.4px 7.6px);
mask: repeating-linear-gradient(140deg, #000 0 4.4px, transparent 4.4px 7.6px);
pointer-events: none;
}
.text-effect::before {
content: "";
position: absolute;
inset: -0.26em -0.5em;
z-index: -2;
border-radius: 0.16em;
background: repeating-linear-gradient(0deg, rgba(255,255,255,0.05) 0 1px, transparent 1px 4px), repeating-linear-gradient(90deg, rgba(255,255,255,0.05) 0 1px, transparent 1px 4px), hsl(2 12% 18%);
box-shadow: inset 0 0 0 1px hsl(2 12% 10%), 0 6px 16px rgba(0,0,0,0.45);
}
</style>
<div data-text="Your text" class="text-effect">Your text</div>
- Category
- Fill & Texture
- Type
- Static
- Browser support
- background-clip:text satin ridges + masked -webkit-text-stroke running stitch (all modern browsers, prefixed)
- Capabilities
- pure, dataText