Bilan d'Expérience : Le CSS comme Moteur Géométrique

Résumé des résultats, concepts utilisés et limites de notre typographie réactive sans SVG ni JS.

Ce bilan clôt le cycle d'expérimentations autour de la typographie géométrique en CSS pur. Le défit était de créer des animations typographiques sans SVG, sans JavaScript, sans fichier de police externe en s'appuyant sur l' expérimentation d'Nguyen Grobber et Armin Hofmann : seulement des variables CSS, des clip-path et des maths.
Voici ce qui a fonctionné, ce qui a cassé, et où ça peut encore aller, Au delà de mes limites de connaissances actuelles.

Table des matières

Ce qui a fonctionné

Le Rendu Data-Driven (HTML = Donnée)

L'idée de base : Utiliser un attribut HTML (data-matrice-char="X") comme seule source de vérité, et laisser le CSS décider de la forme géométrique à afficher via des sélecteurs conditionnels.

Résultat : Un HTML parfaitement propre et sémantique. Le navigateur lit la donnée brute et le CSS applique le clip-path correspondant. Cela sépare strictement le fond (l'identité de la lettre) de la forme (les coordonnées).

La Matrice 4x4 et le Calcul Géométrique

L'idée : Remplacer le dessin vectoriel par une équation. Nous avons construit une grille de carrés imbriqués générant 256 points d'ancrage relatifs (les variables --A-x1 à --D-x4 et --R1-y1 à --R4-y4).

Résultat : Une cohérence visuelle interprétable. Chaque trait, chaque biseau est dicté par une seule variable maîtresse : --offset. Modifier cette variable recalcule instantanément l'intégralité de la lettre.

La Fente et la Non-Zero Winding Rule

L'idée : Percer des trous dans des polygones (pour le "O", le "A", le "B") sans utiliser de calques superposés (::before/::after), afin de conserver l'interaction avec filter: drop-shadow().

Résultat : En traçant le contour extérieur dans le sens horaire, en créant une "fente" invisible vers le centre, puis en traçant le trou dans le sens anti-horaire, le navigateur évide la zone (1 - 1 = 0). L'ombre portée reste dure et respecte la transparence intérieure de la lettre.

Le Polymorphisme Intrinsèque (CQI & Clamp)

L'idée : Abandonner les Media Queries. La lettre doit connaître sa propre taille pour éviter que son épaisseur ne détruise sa géométrie sur les petits écrans.

Résultat : En déclarant container-type: inline-size sur la lettre, nous avons pu utiliser l'unité cqi (Container Query Inline) couplée à la fonction mathématique clamp(). La lettre gère sa propre graisse proportionnellement à l'espace dont elle dispose.

L'Animation de Type avec @property (Houdini)

L'idée : Animer la graisse de la police (le fameux --offset) de manière fluide au survol ou au clic, sans Javascript.

Résultat : Une petite réussite personnelle. En utilisant @property --offset { syntax: '<length>'; inherits: true; initial-value: 12px; }, le navigateur a compris que cette chaîne de texte était une mesure physique. Le CSS peut désormais interpoler nativement le passage de 12px à 20px, recalculant toute la grille en temps réel.

Note : La valeur inherits: true est critique. Sans elle, les pseudo-éléments ::after ne reçoivent pas la mise à jour et la transition casse silencieusement.

Deux Philosophies d'Implémentation

La découverte : Au fil des expérimentations, deux approches architecturales ont émergé pour déclarer la forme d'un glyphe.

Approche A : la variable intermédiaire --glyph. Le clip-path complet est stocké dans une custom property, puis assigné à ::after. Le navigateur met en cache la valeur de la variable. La surcharge par sélecteur plus spécifique ou par classe devient plus évidente.

Approche B : le polygone direct sur ::after. Les coordonnées sont écrites directement sur le pseudo-élément. Plus immédiat, mais chaque surcharge oblige à réécrire l'intégralité du polygone.

Conséquence : Ce n'est pas qu'une préférence de style. L'approche A exploite le mécanisme de cascade et d'héritage du navigateur comme une couche de mémoire : on déclare une intention, le moteur de rendu résout la valeur finale. Ce principe est exportable à d'autres contextes bien au-delà de la typographie.

Limites Rencontrées

Perspectives

Ces pistes n'ont pas encore été testées, mais le système de matrice pose les bases nécessaires pour les attaquer.

L'Extrusion Isométrique 3D

Puisque la lettre est découpée dans un polygone calculé, il est possible d'empiler plusieurs couches (via des ombres portées multiples modifiées ou des pseudo-éléments empilés avec un décalage calculé via calc()) pour créer de la fausse 3D réactive qui réagit à la position du curseur. (on peut respirer... la phrase est longue :))

La Typographie Procédurale (Glitches)

Plutôt que d'animer --offset proprement, on pourrait appliquer des animations @keyframes distinctes et saccadées sur des variables spécifiques (ex: animer uniquement --A-x2). La lettre se déformerait, s'étirerait mécaniquement.

La Gamification Logique (Jeux CSS)

En utilisant les checkbox comme bits de mémoire (0 ou 1) et le clip-path comme Hitbox physique (si je survole le noir = Game Over), nous aurions de quoi construire de vrais puzzles logiques sans une seule ligne de JS.

La Matrice à Résolution Variable

La grille 4x4 donne 256 points d'ancrage. Une grille 8x8 en donnerait 1024, une 16x16 plus de 4000. Plus la résolution augmente, plus les formes peuvent être complexes : courbes approximées par segments courts, diagonales plus fines, détails sub-pixel. Le coût : une explosion du nombre de variables CSS et un recalcul plus lourd à chaque changement d'--offset. Un temps de positionnement des points plus long.
À partir de quelle résolution le navigateur sature-t-il ? Il est probable que les navigateurs optimisent les changements mineurs en ne recalculant que les points affectés, mais cela reste à mesurer.

Au-delà de la Typographie

Le principe n'est pas limité aux lettres. N'importe quelle forme géométrique paramétrique peut être construite avec cette approche : icônes réactives, interfaces de données (sparklines CSS, jauges polygonales), masques de mise en page qui s'adaptent au contenu. Le clip-path comme outil de layout,pas seulement de décoration.

Le Générateur de Glyphes

Coder la lettre B à la main en 26 points est inmaintenable. La prochaine étape logique est un outil qui prend une forme dessinée et génère automatiquement les coordonnées de la matrice en CSS : variables, fentes, respect de la Non-Zero Winding Rule. Le CSS comme format de sortie d'un générateur, pas comme code écrit à la main.

Le CSS n'est pas qu'un langage de mise en forme. C'est un langage déclaratif : logique, calcul, propagation d'état. Ce cycle d'expérimentations en est la preuve. La suite au prochain épisode. (je suis fatigué là :D)