CSS to Figma Auto Layout: Flexbox und Grid richtig abbilden
So funktioniert CSS to Figma Auto Layout: flex-direction, gap, Padding, Ausrichtung, flex-grow, Wrap, Grid, absolute und max-width – plus Tipps für saubere Importe.
EUREKA! · · 10 Min. Lesezeit
Wenn du Frontend-Code schreibst, fühlt sich Figmas Auto Layout vertraut an: eine Richtung, ein Abstand, Padding, Ausrichtung, Kindelemente, die sich anpassen (Hug) oder auffüllen (Fill). Man ist versucht anzunehmen, CSS to Figma Auto Layout sei eine Eins-zu-eins-Übersetzung. Ist es nicht. Flexbox und Grid sind mächtiger, der Browser löst Margins, Prozentwerte und intrinsische Größen auf, die Auto Layout nicht abbildet, und dasselbe visuelle Ergebnis kann aus sehr unterschiedlichem CSS entstehen.
Dieser Leitfaden erklärt, wie HTML to Frames CSS-Layouts auf Auto Layout abbildet, warum jedes Ergebnis gegen den Browser verifiziert wird, wo die Grenzen liegen und wie du CSS schreibst, das sich sauber importieren lässt.
Der Ansatz: erst Geometrie, dann Ableitung
Ein naiver Konverter liest display: flex und überträgt Eigenschaften. Das bricht schnell: ein Flex-Container mit gap: 0 und Margins an den Kindelementen, ein Block-Element, das nur wie ein vertikaler Stapel aussieht, oder ein Grid, das als zwei saubere Zeilen gerendert wird.
HTML to Frames arbeitet mit dem, was der Browser tatsächlich gerendert hat:
- Pixelgenau aufbauen. Die Seite wird zuerst in Figma mit absoluten Positionen aus der vom Browser gemessenen Geometrie aufgebaut.
- Von innen nach außen durchlaufen. Beginnend bei den tiefsten Frames leitet das Plugin aus Positionen und Größen vertikale Stapel, horizontale Stapel, umbrechende Zeilen, Abstände, Padding und Ausrichtung ab.
- Responsive Bedeutung ergänzen. Zentrierter Inhalt wird zu Center, Boxen mit max-width bleiben zentriert, gleiche Karten und
flex-growwerden zu Fill, und in einer Leiste „Logo … Menü … Icons“ wird das Abstandselement zu Fill. - Verifizieren. Auto Layout wird angewendet, dann wird die Position jedes Kindelements mit einer Toleranz von 2 px gegen das Original geprüft.
- Sicher zurückfallen. Hält es nicht, wird ein einfacherer Plan probiert. Scheitert auch der, behält der Frame absolute Positionen mit sinnvollen Constraints (Stretch, Scale, Center, Min, Max).
Da die Ableitung bei der gerenderten Geometrie ansetzt, wird ein Stapel von Block-Elementen genauso zu einem vertikalen Auto Layout wie eine Flex-Spalte. Der CSS-Mechanismus zählt weniger als das Ergebnis. Einen breiteren Überblick bietet Auto Layout erklärt.
Die Zuordnungstabelle
So werden gängige CSS-Muster typischerweise abgebildet. Betrachte das als erwartetes Ergebnis, nicht als Versprechen; das letzte Wort hat die Verifizierung.
| CSS | Ergebnis in Figma Auto Layout | Hinweise |
|---|---|---|
flex-direction: column | Vertikales Auto Layout | Normaler Block-Fluss wird ebenfalls so abgebildet |
flex-direction: row | Horizontales Auto Layout | |
row-reverse, column-reverse | Stapel in gerenderter Reihenfolge | Ebenen folgen der visuellen Reihenfolge |
gap: 24px | Abstand zwischen Elementen 24 | Aus tatsächlichen Abständen gemessen |
| Gleiche Margins zwischen Geschwistern | Abstand zwischen Elementen | Abgeleitet, wenn die Abstände konsistent sind |
padding: 32px 24px | Padding oben/unten 32, links/rechts 24 | Aus den Versätzen der Kindelemente gemessen |
justify-content: flex-start | Hauptachse: Anfang | |
justify-content: center | Hauptachse: Mitte | |
justify-content: flex-end | Hauptachse: Ende | |
justify-content: space-between | Space between, oder das Abstandselement wird zu Fill | Header-Leisten werden oft zu Logo, Fill, Icons |
align-items: center | Querachse: Mitte | |
align-items: stretch | Kindelemente füllen die Querachse (Fill) | Wenn die Kindelemente tatsächlich gedehnt werden |
flex: 1 / flex-grow: 1 | Fill container auf der Hauptachse | Gleiche Karten werden zu gleichen Fill-Elementen |
Feste width an einem Kindelement | Feste Breite | |
| Inhaltsbasiertes Kindelement | Hug contents | |
flex-wrap: wrap | Umbrechende Zeilen | Nutzt den Wrap-Modus von Auto Layout |
display: grid mit gleichen Spalten | Umbrechende Zeilen oder verschachtelte Stapel | Je nachdem, was sich verifizieren lässt |
grid-template-columns mit Spans | Verschachtelte horizontale/vertikale Stapel | Oder absolut, wenn sich Spans überlappen |
max-width + margin: 0 auto | Zentrierte Box in einem Frame voller Breite | Inhaltsbox bleibt beim Skalieren zentriert |
position: absolute | Absolut im Frame, mit Constraints | Überlappungen passen in keinen Stapel |
position: fixed / sticky | Fixed- bzw. Sticky-Verhalten im Present-Modus | Header funktionieren im Prototyp weiter |
z-index | Ebenenreihenfolge | Entspricht der Stapelung im Browser |
transform: rotate() / scale() | Rotation und Skalierung angewendet | Skew und 3D noch nicht unterstützt |
Flexbox im Detail
Richtung und Reihenfolge
flex-direction bestimmt, ob ein Container zu einem horizontalen oder vertikalen Stapel wird. Da die Ableitung gerenderte Positionen nutzt, ergeben umgekehrte Richtungen und order einfach Ebenen in visueller Reihenfolge. Was du im Browser siehst, bekommst du im Ebenen-Panel.
Gap und Padding
gap ist der sauberste Input: ein einziger, konsistenter Abstand zwischen Kindelementen, der direkt auf den Elementabstand von Auto Layout abgebildet wird. Margins zwischen Geschwistern funktionieren, wenn sie konsistent sind. Sind sie es nicht – etwa 16, 24, 16 –, kann das Plugin das nicht als einen Abstand darstellen, und die Verifizierung wählt entweder einen anderen Plan oder lässt die Positionen absolut.
Padding wird daran gemessen, wo die Kindelemente tatsächlich im Container sitzen – padding, border-Breiten und innere Margins fließen also alle ins Ergebnis ein.
Justify und Align
justify-content wird auf die Ausrichtung der Hauptachse abgebildet, align-items auf die der Querachse. Der interessante Fall ist space-between. In einem Header wie „Logo … Menü … Icons“ macht das Plugin das Abstandselement zu Fill: Beim Skalieren bleibt das Logo links, die Icons bleiben rechts, und die Mitte dehnt sich. Das ist die responsive Bedeutung, die du erwarten würdest – statt eines festen Abstandswerts, der nur bei einer Breite funktioniert.
flex-grow und Fill
Kindelemente mit flex-grow oder flex: 1 werden zu Fill container. Reihen gleicher Karten werden zu gleichen Fill-Elementen – skalierst du den Eltern-Frame, ändern die Karten gemeinsam ihre Größe, genau wie im Browser.
Umbruch
flex-wrap: wrap wird auf den Wrap-Modus von Auto Layout abgebildet und erzeugt umbrechende Zeilen. Das passt natürlich zu Tag-Listen, Logo-Wänden und mit Flexbox gebauten Karten-Grids.
CSS Grid im Detail
Figmas Auto Layout ist ein Stapelmodell, kein zweidimensionales Grid. Grid-Layouts werden daher auf die nächstliegende Struktur abgebildet, die sich verifizieren lässt:
- Gleichmäßige Grids (gleiche Spalten, gleiche Abstände) werden meist zu umbrechenden Zeilen.
- Asymmetrische Grids (Sidebar und Hauptspalte, eine 2:1-Aufteilung) werden meist zu verschachtelten Stapeln: ein horizontaler Stapel aus vertikalen Stapeln oder umgekehrt.
- Zellen mit Spans und Überlappungen, die sich nicht in Stapel zerlegen lassen, behalten absolute Positionen mit Constraints.
In jedem Fall entspricht das visuelle Ergebnis innerhalb der Toleranz dem Browser. Was sich ändert, ist, wie viel des Frames du in Figma fließend skalieren kannst.
Absolute Positionierung, Zentrierung und Auto-Margins
position: absolute
Ein absolut positioniertes Badge, ein dekorativer Blob oder ein Overlay gehören nicht in einen Stapel, weil sie ihre Geschwister überlappen. Diese Elemente behalten absolute Positionen, und das Plugin vergibt Constraints, damit sie sich beim Skalieren des Eltern-Frames trotzdem sinnvoll verhalten: Ein oben rechts fixiertes Badge bleibt oben rechts, ein vollflächiges Overlay dehnt sich.
max-width und margin: auto
Der klassische Inhaltscontainer, max-width: 1200px; margin: 0 auto, wird zu einer zentrierten Box in einem Frame voller Breite. Hier kommt auch die Site width ins Spiel: Das Plugin misst beim Import die echte Designbreite der Seite. Full-Bleed-Designs kommen in 1920 mit zentrierter Inhaltsbox an, echt geboxte Websites in ihrer Containerbreite und fluide Websites in 1440. Der gemessene Wert hält deine Container-Logik intakt.
Auto-Margins in Flex
margin-left: auto an einem Flex-Kindelement schiebt es ans Ende – ein häufiges Muster bei Navigationsleisten. Wie space-between wird das aus der Geometrie abgeleitet, typischerweise als Fill-Abstandselement, das das verschobene Element am äußeren Rand hält.
Warum Verifizierung wichtig ist
Ohne Verifizierung haben Konverter zwei schlechte Optionen: Auto Layout überall anwenden und hinnehmen, dass sich manche Frames verschieben, überlappen oder zusammenfallen – oder auf Auto Layout verzichten und dir eingefrorene absolute Ebenen liefern.
HTML to Frames wendet Auto Layout an und prüft dann die Position jedes Kindelements auf 2 px genau. Scheitert ein Frame, wird ein einfacherer Plan probiert; scheitert auch der, bleibt der Frame absolut. Das Design bricht nie. Du kannst darauf vertrauen, dass das, was du in Figma siehst, dem Browser entspricht, und das Auto Layout, das du bekommst, ist Auto Layout, das tatsächlich hält.
Der Ergebnisbildschirm zeigt den Gesamtanteil an Auto Layout und listet für absolut gebliebene Frames auf, warum (Diagnose). So wird aus „Warum ist das kein Auto Layout?“ etwas, das du in deinem CSS angehen kannst.
In unseren Tests an echten Websites wurde Auto Layout auf etwa 86 bis 97 Prozent der Frames abgeleitet, zum Beispiel 93 Prozent bei einer Produkt-Website und 88 Prozent bei Linear und Stripe. Deine Werte hängen davon ab, wie das CSS geschrieben ist.
Grenzen, die du kennen solltest
- Zweidimensionale Grid-Semantik gibt es in Auto Layout nicht; Grids werden zu umbrechenden Zeilen oder verschachtelten Stapeln, und komplexe Spans bleiben unter Umständen absolut.
- Inkonsistente Abstände zwischen Geschwistern lassen sich nicht als ein einziger Abstand ausdrücken.
- Überlappung (negative Margins, absolute Kindelemente) hält diese Elemente absolut.
- Skew- und 3D-Transformationen,
path()-Clip-Paths, mehrschichtige Masken und Display-P3-Farben werden noch nicht umgewandelt. - Eingebettete Inhalte wie iframes, WebGL-Canvases und Videos ohne Poster kommen als Screenshot-Bild ihres Bereichs an.
- Eine Breite nach der anderen. Jeder Screen wird in seiner eigenen Breite gelayoutet. Nutze das Responsive set (Desktop, Tablet, Mobile), um jeden Breakpoint als separaten Frame zu erfassen.
Tipps: CSS schreiben, das sich sauber importieren lässt
Diese Gewohnheiten sorgen dafür, dass sich deine Layouts häufiger auf Auto Layout abbilden lassen – und sie sind ohnehin gute CSS-Praxis.
- Nutze
gapstatt Margins zwischen Geschwistern. Ein konsistenter Wert wird direkt zum Elementabstand. - Halte Abstände innerhalb eines Containers konsistent. Gemischte Abstände erzwingen Fallbacks.
- Bevorzuge Flexbox für eindimensionale Layouts. Navigationen, Toolbars, Button-Gruppen und Kartenreihen werden direkt abgebildet.
- Nutze Grid mit gleichen Spuren für Karten-Grids. Gleichmäßige Spalten werden zu sauberen umbrechenden Zeilen.
- Pack asymmetrische Layouts in explizite Container. Sidebar und Inhaltsbereich in einer eigenen Flex-Zeile ergeben klare verschachtelte Stapel.
- Nutze
flex: 1für Elemente, die sich dehnen sollen. Das signalisiert Fill. - Zentriere Inhalte mit
max-widthundmargin: 0 auto. Daraus wird eine zentrierte Box, die zentriert bleibt. - Reserviere
position: absolutefür echte Overlays. Nutze es nicht für gewöhnliches Layout. - Vermeide negative Margins fürs Layout. Sie erzeugen Überlappungen, die sich nicht stapeln lassen.
- Benenne Farben mit Custom Properties. Mit Styles & variables (Pro) wird aus
--brand-primaryeine Variablebrand/primary. - Nutze echten Text. Text in Bildern kann nicht zu bearbeitbaren Textebenen werden.
Deine eigene Zuordnung sehen
Am schnellsten lernst du, wie dein CSS abgebildet wird, indem du es importierst. Füge Code ein oder lade einen Ordner über den HTML-to-Figma-Ablauf hoch, erfasse einen lokalen Build mit der Chrome-Erweiterung oder lass ein KI-Tool ihn per MCP senden. Öffne dann den Ergebnisbildschirm, prüfe den Auto-Layout-Anteil und lies die Diagnose für absolut gebliebene Frames.
Aktiviere Reference screenshot (Pro), um eine versteckte, gesperrte Ebene der Originalseite hinzuzufügen, damit du zwischen Import und Browser-Rendering umschalten kannst. Aktiviere Detailed layers (Pro), wenn du eine detailliertere Ebenenstruktur willst.
Mehr dazu, wie aus Seiten Frames werden, liest du unter HTML to Frame; auf der Funktionsseite siehst du alles, was der Import unterstützt. Die Doku erklärt jede Importoption im Detail.
Häufige Fragen
- Liest HTML to Frames mein CSS, um Auto Layout zu erzeugen?
- Es arbeitet mit der vom Browser gerenderten Geometrie, statt CSS-Eigenschaften zu kopieren. Die Seite wird zuerst pixelgenau aufgebaut, dann werden Stapel, Abstände, Padding und Ausrichtung von innen nach außen abgeleitet. Die Position jedes Kindelements wird auf 2 px genau verifiziert – das Ergebnis entspricht also dem, was der Browser gezeichnet hat, ob das Layout aus Flexbox, Grid oder einfachem Block-Fluss stammt.
- Wie wird CSS Grid umgewandelt, wenn Figma kein Grid-Auto-Layout hat?
- Grids werden auf die nächstliegende Struktur abgebildet, die sich verifizieren lässt. Gleichmäßige Grids mit gleichen Spalten werden meist zu umbrechenden Zeilen, asymmetrische Layouts zu verschachtelten horizontalen und vertikalen Stapeln, und Zellen mit komplexen Spans oder Überlappungen behalten absolute Positionen mit Constraints. Das visuelle Ergebnis entspricht in jedem Fall dem Browser.
- Was passiert, wenn ein Frame kein Auto Layout werden kann?
- Zuerst wird ein einfacherer Layoutplan probiert. Besteht auch der die Verifizierung nicht, behält der Frame absolute Positionen und erhält sinnvolle Constraints wie Stretch, Scale, Center, Min oder Max, damit er sich beim Skalieren trotzdem verhält. Der Ergebnisbildschirm listet auf, warum jeder dieser Frames absolut geblieben ist – das hilft dir, dein CSS anzupassen.
- Wird flex-grow in Figma zu Fill container?
- Ja, in typischen Fällen. Kindelemente, die mit flex-grow oder flex: 1 wachsen, werden zu Fill container, und Reihen gleicher Karten werden zu gleichen Fill-Elementen. In Header-Leisten mit auseinanderliegendem Logo, Menü und Icons wird das Abstandselement zu Fill, sodass die äußeren Elemente beim Skalieren des Frames an den Rändern bleiben.
- Wie viel einer Seite landet normalerweise in Auto Layout?
- In unseren Tests an echten Websites wurde Auto Layout auf etwa 86 bis 97 Prozent der Frames abgeleitet, zum Beispiel 93 Prozent bei einer Produkt-Website und 88 Prozent bei Linear und Stripe. Die Ergebnisse hängen davon ab, wie das CSS geschrieben ist; konsistente Abstände, Flexbox und explizite Container erhöhen den Anteil.
Schluss mit dem Nachbauen von Webseiten.
Link einfügen und in Sekunden echte, bearbeitbare, responsive Figma-Ebenen erhalten. Kostenlos starten – 10 Importe pro Monat.