Batik Crackle

Fill & Texture · Static · pure CSS

A flat indigo or rust dye field fills the glyphs, then an SVG turbulence filter etches a dense network of thin, angular fracture veins across them in color-dodged cream. A second coarse turbulence pass pools deeper dye tone into the stroke centers via multiply, mimicking the uneven saturation real wax-resist batik leaves behind.

Batik Crackle

How it works

Batik Crackle is a static fill & texture text effect rendered entirely in CSS. It relies on an inline SVG <defs> block (filters, gradients or clip-paths), which the HTML export carries alongside the CSS.

Controls

Batik Crackle exposes 5 dedicated controls — Dye, Vein Density, Vein Brightness, Blotch Amount and Crackle Seed — 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

/* Batik Crackle — made with TEXT-FX · https://text-fx.app
 * HTML: requires the inline <svg> filter defs — see the HTML export.
 * Font: 'Major Mono Display', monospace (load from Google Fonts).
 */

.text-effect {
  font-family: 'Major Mono Display', monospace;
  font-weight: 700;
  letter-spacing: -1px;
  text-transform: none;
}

.text-effect {
  background: linear-gradient(172deg, hsl(223 48% 58%) 0%, hsl(223 48% 52%) 45%, hsl(223 48% 47%) 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
  filter: url(#text-effect-batik) drop-shadow(0 2px 3px hsl(220 30% 6% / 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: 'Major Mono Display', monospace;
  font-weight: 700;
  letter-spacing: -1px;
  text-transform: none;
}

.text-effect {
  background: linear-gradient(172deg, hsl(223 48% 58%) 0%, hsl(223 48% 52%) 45%, hsl(223 48% 47%) 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
  filter: url(#text-effect-batik) drop-shadow(0 2px 3px hsl(220 30% 6% / 0.45));
}
</style>

<svg width="0" height="0" style="position:absolute" aria-hidden="true"><defs>
<filter id="text-effect-batik" x="-10%" y="-10%" width="120%" height="120%" color-interpolation-filters="sRGB">
  <feTurbulence type="turbulence" baseFrequency="0.0248 0.031" numOctaves="2" seed="86" stitchTiles="stitch" result="crackNoise"/>
  <feColorMatrix in="crackNoise" type="matrix" values="0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  1 0 0 0 0" result="crackField"/>
  <feComponentTransfer in="crackField" result="veinSoft">
    <feFuncA type="table" tableValues="0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0"/>
  </feComponentTransfer>
  <feColorMatrix in="veinSoft" type="matrix" values="0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 3 0" result="veinMask"/>
  <feFlood flood-color="hsl(43 55% 90%)" flood-opacity="0.81" result="veinFlood"/>
  <feComposite in="veinFlood" in2="veinMask" operator="in" result="veins"/>
  <feTurbulence type="turbulence" baseFrequency="0.011 0.013" numOctaves="2" seed="123" stitchTiles="stitch" result="blotchNoise"/>
  <feColorMatrix in="blotchNoise" type="matrix" values="0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  1 0 0 0 0" result="blotchField"/>
  <feComponentTransfer in="blotchField" result="blotchMask">
    <feFuncA type="table" tableValues="0 0 0.35 0.7 1"/>
  </feComponentTransfer>
  <feFlood flood-color="hsl(227 60% 34%)" flood-opacity="0.07" result="blotchFlood"/>
  <feComposite in="blotchFlood" in2="blotchMask" operator="in" result="blotchFull"/>
  <feMorphology in="SourceAlpha" operator="erode" radius="1.2" result="strokeCore"/>
  <feComposite in="blotchFull" in2="strokeCore" operator="in" result="blotches"/>
  <feBlend in="blotches" in2="SourceGraphic" mode="multiply" result="dyeBlotched"/>
  <feMerge result="texturedFull">
    <feMergeNode in="dyeBlotched"/>
    <feMergeNode in="veins"/>
  </feMerge>
  <feComposite in="texturedFull" in2="SourceGraphic" operator="in" result="textured"/>
  <feMerge>
    <feMergeNode in="SourceGraphic"/>
    <feMergeNode in="textured"/>
  </feMerge>
</filter>
</defs></svg>

<div class="text-effect">Your text</div>
Category
Fill & Texture
Type
Static
Browser support
background-clip:text dye field + SVG feTurbulence crackle filter via filter:url(#…)
Capabilities
pure, svgDefs

Related Fill & Texture effects