Design web · CSS · SVG
Exploiter toute la puissance des filtres SVG pour la typographie
Transformer le moteur de rendu du navigateur en outil de composition graphique vectorielle grâce aux filtres SVG personnalisés.
FILTRES SVG
Au-delà des filtres CSS classiques
En intégration web, la propriété CSS filter est souvent associée à des ajustements basiques comme blur(), drop-shadow() ou grayscale(). Pourtant, en la couplant à la déclaration de filtres SVG personnalisés avec <filter>, le navigateur devient un véritable outil de composition graphique vectorielle.
L’un des cas d’usage les plus révélateurs concerne les titres massifs à contours complexes, difficiles à maîtriser avec les propriétés CSS standards.
Le problème de -webkit-text-stroke
Sur un titre où les lettres sont collées ou dont l’intérieur est transparent, le contour CSS échoue pour deux raisons.
Le dessin séquentiel
Chaque caractère et son contour sont dessinés séparément. Lors d’un chevauchement, la bordure d’une lettre peut recouvrir le corps de la précédente.
Le centrage du tracé
La moitié du contour entre dans le glyphe. Avec une opacité réduite, cette partie interne reste visible et dénature la couleur du texte.
Traiter le mot comme un masque global
La solution consiste à ne plus voir le texte comme une suite de lettres, mais comme une forme vectorielle unique. Le filtre intercepte le SourceGraphicavant son affichage et lui applique un pipeline de cinq primitives.
- 1
feMorphologyDilate la silhouette globale du mot.
- 2
feComposite · outSoustrait le texte original pour évider le centre.
- 3
feFlood + compositeApplique la couleur uniquement sur le contour.
- 4
feComponentTransferRègle indépendamment l’opacité du texte intérieur.
- 5
feMergeSuperpose le contour et le texte traité.
Étape 1
La dilatation avec feMorphology
L’opérateur dilate étend tous les pixels du texte vers l’extérieur selon la valeur de radius. Il produit une forme pleine, plus massive, dans laquelle les espaces entre les lettres chevauchées sont comblés.
Étape 2
La soustraction avec feComposite
L’opérateur out agit comme un emporte-pièce : il découpe le texte d’origine dans la forme élargie. Le centre disparaît réellement et laisse un contour pur, sans pixels susceptibles de déborder dans le glyphe.
Étape 3
La coloration du contour
feFlood crée une surface de couleur unie. Un second feComposite, cette fois avec l’opérateur in, confine cette couleur à l’intérieur de l’anneau créé à l’étape précédente.
Étape 4
Le traitement de l’intérieur
feComponentTransfer isole le texte d’origine pour modifier son canal alpha. Une pente de 0.3 réduit son opacité à 30 %, indépendamment du contour extérieur.
Étape 5
La fusion finale avec feMerge
Les deux couches sont empilées : d’abord le contour coloré, puis le texte ajusté. Le résultat est un mot unifié, entouré proprement, dont l’intérieur reste totalement indépendant.
Code source d’implémentation
Le filtre peut être déclaré une seule fois dans un SVG invisible, puis appliqué à n’importe quel élément HTML avec la propriété CSS filter.
<svg
style="position: absolute; width: 0; height: 0; pointer-events: none;"
aria-hidden="true"
>
<filter
id="hollow-stroke"
x="-40%"
y="-40%"
width="180%"
height="180%"
color-interpolation-filters="sRGB"
>
<!-- Étape 1 : Élargissement global de la silhouette -->
<feMorphology
operator="dilate"
radius="2"
in="SourceGraphic"
result="base-elargie"
/>
<!-- Étape 2 : Évidage du centre par soustraction -->
<feComposite
in="base-elargie"
in2="SourceGraphic"
operator="out"
result="contour-seul"
/>
<!-- Étape 3 : Coloration du contour -->
<feFlood flood-color="#7000FF" result="couleur-bordure" />
<feComposite
in="couleur-bordure"
in2="contour-seul"
operator="in"
result="bordure-finale"
/>
<!-- Étape 4 : Opacité du texte intérieur -->
<feComponentTransfer in="SourceGraphic" result="fond-transparent">
<feFuncA type="linear" slope="0.3" />
</feComponentTransfer>
<!-- Étape 5 : Fusion des calques -->
<feMerge>
<feMergeNode in="bordure-finale" />
<feMergeNode in="fond-transparent" />
</feMerge>
</filter>
</svg>.titre-fusion {
color: #7000FF;
filter: url(#hollow-stroke);
font-size: 140px;
font-weight: 900;
letter-spacing: -12px;
line-height: 0.85;
}Que peut-on créer d’autre ?
Effet gooey
Un flou gaussien associé à une matrice de couleur permet à plusieurs formes de se souder comme des gouttes de mercure.
Grain et textures organiques
feTurbulence génère du bruit de Perlin pour créer du grain, du papier rétro, de la réfraction ou du verre dépoli.
Déformation et distorsion
feDisplacementMap déplace les pixels à partir d’une texture pour produire des effets de glitch, d’ondulation ou d’encre.
Ombre portée interne
En combinant décalage, flou et composition, le filtre applique une ombre à l’intérieur d’une silhouette complexe.
Conclusion
Les filtres SVG constituent une passerelle puissante entre design graphique et intégration web. Leur logique demande une compréhension progressive des primitives de composition, mais le résultat reste vectoriel, accessible aux lecteurs d’écran et parfaitement adapté aux Design Systems modernes.