Sketch Outline
Outline & Stroke · Static · pure CSS
Hollow pen-drawn letterforms pushed through a gentle SVG turbulence displacement so every stroke wavers like a hand-drawn line, doubled by a fainter, differently-wobbled second pass for that gone-over-twice sketchbook feel. Choose graphite, ink-black or ballpoint-blue and flip on faint diagonal hatching inside the glyphs; it reads on the dark stage or the paper-white theme.
How it works
Sketch Outline is a static outline & stroke 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. A data-text attribute mirrors the word into ::before/::after layers, so copy that attribute together with the CSS.
Controls
Sketch Outline exposes 3 dedicated controls — Wobble, Ink and Hatching — 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
/* Sketch Outline — made with TEXT-FX · https://text-fx.app
* HTML: the element needs a data-text attribute equal to its text; requires the inline <svg> filter defs — see the HTML export.
* Font: 'Archivo Black', sans-serif (load from Google Fonts).
*/
.text-effect {
font-family: 'Archivo Black', sans-serif;
font-weight: 900;
letter-spacing: 0px;
text-transform: uppercase;
}
.text-effect {
position: relative;
display: inline-block;
background: repeating-linear-gradient(46deg, hsl(223 80% 74% / 0.4) 0, hsl(223 80% 74% / 0.4) 0.6px, transparent 0.6px, transparent 4.5px);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
color: transparent;
}
.text-effect::before,
.text-effect::after {
content: attr(data-text);
position: absolute;
inset: 0;
color: transparent;
-webkit-text-fill-color: transparent;
pointer-events: none;
}
.text-effect::before {
-webkit-text-stroke: 1.6px hsl(223 80% 74%);
filter: url(#text-effect-wob);
}
.text-effect::after {
-webkit-text-stroke: 1.2px hsl(223 80% 74%);
filter: url(#text-effect-wob2);
opacity: 0.5;
transform: translate(0.8px, -0.6px);
}
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: 'Archivo Black', sans-serif;
font-weight: 900;
letter-spacing: 0px;
text-transform: uppercase;
}
.text-effect {
position: relative;
display: inline-block;
background: repeating-linear-gradient(46deg, hsl(223 80% 74% / 0.4) 0, hsl(223 80% 74% / 0.4) 0.6px, transparent 0.6px, transparent 4.5px);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
color: transparent;
}
.text-effect::before,
.text-effect::after {
content: attr(data-text);
position: absolute;
inset: 0;
color: transparent;
-webkit-text-fill-color: transparent;
pointer-events: none;
}
.text-effect::before {
-webkit-text-stroke: 1.6px hsl(223 80% 74%);
filter: url(#text-effect-wob);
}
.text-effect::after {
-webkit-text-stroke: 1.2px hsl(223 80% 74%);
filter: url(#text-effect-wob2);
opacity: 0.5;
transform: translate(0.8px, -0.6px);
}
</style>
<svg width="0" height="0" style="position:absolute" aria-hidden="true"><defs>
<filter id="text-effect-wob" x="-15%" y="-25%" width="130%" height="150%">
<feTurbulence type="fractalNoise" baseFrequency="0.014 0.018" numOctaves="2" seed="4" result="n"/>
<feDisplacementMap in="SourceGraphic" in2="n" scale="2" xChannelSelector="R" yChannelSelector="G"/>
</filter>
<filter id="text-effect-wob2" x="-15%" y="-25%" width="130%" height="150%">
<feTurbulence type="fractalNoise" baseFrequency="0.02 0.024" numOctaves="2" seed="17" result="n"/>
<feDisplacementMap in="SourceGraphic" in2="n" scale="1.7" xChannelSelector="R" yChannelSelector="G"/>
</filter>
</defs></svg>
<div data-text="Your text" class="text-effect">Your text</div>
- Category
- Outline & Stroke
- Type
- Static
- Browser support
- -webkit-text-stroke roughened by an SVG feDisplacementMap; hatch via background-clip:text
- Capabilities
- svgDefs, dataText