Publié le 2026-08-20 · Par L'équipe MarkupGen
Figma vers CSS : le guide pratique de conversion

Réponse rapide : convertir Figma en CSS pur consiste à traduire l'Auto Layout en Flexbox, à résoudre chaque valeur de remplissage, d'espacement et de typographie en sa vraie valeur numérique plutôt qu'en une approximation par classe utilitaire, et à garder un résultat sans dépendance. C'est le bon choix quand vous voulez un contrôle total sur chaque règle, sans framework à apprendre, installer ou surcharger plus tard.
Pourquoi choisir le CSS pur plutôt qu'un framework
Tous les formats de sortie pris en charge par MarkupGen — CSS pur, Tailwind, Bootstrap, Bulma — partent de la même source : la structure et les valeurs réelles du frame Figma. Le CSS pur est simplement le format où rien ne s'interpose entre votre fichier et le navigateur :
- Aucune convention de nommage de classes à apprendre. L'échelle utilitaire de Tailwind et les classes de composants de Bootstrap sont puissantes, mais restent un système à intérioriser. Le CSS pur ne demande que de connaître CSS.
- Aucun poids de framework. Même avec la purge des classes inutilisées, un framework ajoute une étape de build et une dépendance à maintenir à jour. Un export en CSS pur n'a ni l'une ni l'autre.
- Chaque règle est modifiable sur place. Changer une valeur d'espacement revient à modifier une seule déclaration, sans avoir à chercher quelle classe utilitaire correspond à la valeur en pixels souhaitée.
Le compromis est justement celui que Tailwind existe pour résoudre : sans framework imposant une échelle, les valeurs d'espacement et de couleur peuvent dériver de façon incohérente à mesure que le codebase grandit, si personne ne s'impose de réutiliser les mêmes chiffres. Pour une landing page isolée ou un petit site, c'est rarement un problème. Pour un produit de grande envergure avec de nombreux contributeurs, mieux vaut lire Vanilla CSS vs Bootstrap vs Tailwind avant de trancher.
Ce qui doit réellement être converti
Un frame Figma contient plus de structure qu'il n'y paraît au premier coup d'œil, et chaque élément correspond à une partie précise du CSS :
| Propriété Figma | Résultat CSS |
|---|---|
| Direction de l'Auto Layout | display: flex; flex-direction: row/column |
| Gap de l'Auto Layout | gap |
| Padding de l'Auto Layout | padding |
| Couleur de remplissage | background-color (ou color sur du texte) |
| Rayon des coins | border-radius |
| Effets (ombre, flou) | box-shadow / filter |
| Style de texte (taille, graisse, hauteur de ligne) | font-size, font-weight, line-height |
| Contraintes de redimensionnement | règles de largeur/hauteur responsives, pas une mise en page unique et fixe |
Rien de tout cela n'est exotique — c'est la même correspondance qu'un développeur applique à la main en reconstruisant un design pixel par pixel. La différence, c'est de le faire à partir de la structure et des valeurs réelles du frame, plutôt qu'en estimant à l'œil à partir d'une capture d'écran.
Comment MarkupGen génère le CSS
Le workflow reste le même en quatre étapes, quel que soit le format de sortie : exporter le frame depuis Figma avec le plugin MarkupGen, qui capture ensemble la structure, les styles et les images ; l'IA construit le markup à partir de cette structure réelle plutôt qu'en approximant une image ; affiner le contenu, les polices ou la mise en page dans l'éditeur intégré si un ajustement est nécessaire ; exporter le package final.
Pour le CSS pur en particulier, cela signifie que la feuille de style générée utilise les vraies valeurs de couleur et d'espacement du frame, plutôt que de les caler sur l'échelle prédéfinie d'un framework — un remplissage réglé sur #3B82F6 ressort exactement tel quel, pas comme le bleu Tailwind le plus proche. L'Auto Layout se convertit automatiquement en structure Flexbox (voir Auto Layout to CSS pour le détail propriété par propriété), et le comportement responsive est généré à partir des contraintes de redimensionnement du frame plutôt qu'ajouté comme une passe manuelle séparée. Le HTML de sortie privilégie par défaut les éléments sémantiques plutôt que des <div> imbriquées, ce qui compte autant pour la maintenabilité que pour l'accessibilité et le SEO.
Transformer les variables Figma en custom properties CSS
Les variables de Figma (couleurs, typographie, espacement, rayon, effets) sont ce qui se rapproche le plus, dans un fichier de design, d'un design system, et elles se transposent conceptuellement en custom properties CSS — un bloc :root de paires --nom: valeur que chaque règle de la feuille de style peut référencer. Comme indiqué plus haut, le résultat CSS de MarkupGen résout aujourd'hui chaque propriété en sa valeur littérale, élément par élément, plutôt que de générer automatiquement cette couche de variables :root ; construire cette correspondance reste donc une étape manuelle. C'est toutefois un travail mécanique, une fois le principe compris :
| Variable Figma | Valeur d'exemple | Propriété personnalisée CSS |
|---|---|---|
color/primary |
#3B82F6 |
--color-primary: #3B82F6; |
color/text-muted |
#6B7280 |
--color-text-muted: #6B7280; |
spacing/md |
16px |
--spacing-md: 16px; |
radius/lg |
12px |
--radius-lg: 12px; |
shadow/card |
0 4px 12px rgba(0,0,0,.08) |
--shadow-card: 0 4px 12px rgba(0,0,0,.08); |
font/heading |
24px / 600 / 1.2 | --font-heading-size: 24px; --font-heading-weight: 600; --font-heading-line: 1.2; |
Une convention de nommage à laquelle il vaut la peine de s'en tenir : refléter la structure groupe/nom propre à la variable Figma (color/primary → --color-primary) plutôt que d'en inventer une parallèle, afin que les deux restent faciles à recouper à mesure que le design évolue. Une fois les variables devenues des custom properties, remplacez les valeurs littérales générées par des références var(--color-primary) dans le CSS exporté.
Deux limites à connaître avant de s'appuyer là-dessus : toutes les variables Figma ne se transposent pas proprement en une seule propriété CSS — une variable utilisée à la fois pour une couleur de bordure et une couleur de texte à différents endroits du design n'implique pas qu'elles doivent rester liées dans le code si leurs usages diffèrent réellement. Et les variables responsives (une valeur d'espacement qui change selon les breakpoints) doivent être redéclarées dans chaque media query concernée, puisqu'une seule custom property :root ne peut porter qu'une valeur à la fois — les frames par breakpoint de Figma ne se résolvent pas automatiquement en overrides responsives basés sur la cascade CSS.
Relire le CSS généré avant de livrer
- Repérez les dérives de valeurs. Sans échelle utilitaire imposant la cohérence, recherchez les valeurs quasi identiques (
padding: 15pxici,padding: 16pxailleurs) qui devraient probablement être le même chiffre. - Vérifiez le comportement responsive à de vrais breakpoints, pas seulement à la taille par défaut du frame — redimensionnez le navigateur plutôt que de vous fier à une seule capture d'écran.
- Examinez les noms de classes/sélecteurs si le projet suit sa propre convention de nommage (BEM, CSS Modules, etc.) et ajustez-les avant de merger.
- Utilisez l'éditeur intégré pour les ajustements de contenu ou de mise en page plutôt que de modifier l'export à la main, puis réexportez pour que rien ne se désynchronise.
Chaque export reçoit aussi un score de qualité IA automatique, qui compare l'aperçu en direct au design original, pour un signal rapide sur si le résultat est prêt à livrer avant une relecture manuelle.
Questions fréquentes
Le CSS généré utilise-t-il des custom properties CSS (variables) ? Le résultat privilégie des règles standards, directement modifiables élément par élément, plutôt qu'une couche de thème pilotée par variables — si votre projet utilise un système de custom properties, prévoyez d'y intégrer les valeurs générées manuellement.
La mise en page est-elle responsive par défaut ? Oui — les breakpoints sont générés à partir des contraintes de redimensionnement de l'Auto Layout du frame, pas ajoutés après coup. Voir Design responsive Figma : mises en page mobile et desktop expliquées pour comprendre comment cela fonctionne avec des mises en page mobile/desktop séparées.
En quoi est-ce différent du résultat Tailwind ? Même donnée source, destination différente : le résultat Tailwind résout les valeurs vers la classe utilitaire la plus proche (avec repli sur une valeur arbitraire pour tout ce qui sort de l'échelle) ; le résultat en CSS pur conserve les valeurs exactes du design sous forme de déclarations standards. Le choix dépend de si votre projet standardise déjà sur un framework utilitaire.
Essayez-le sur votre propre design
Si vous hésitez entre un export en CSS pur et un export basé sur un framework, la façon la plus rapide de trancher est de voir les deux sur le même design. Essayez MarkupGen gratuitement, ou consultez le guide complet dans le guide de conversion Figma vers HTML. Vous préférez d'abord un aperçu rapide ? Consultez la page du convertisseur Figma vers CSS.
