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.

Embroidery Stitch

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

Related Fill & Texture effects