CommunityBildgithub.com

nkurunziza-saddy/layout

Bestimmt Anordnung, Abstände und Größen von UI-Elementen im Webprodukt. Definiert Abstandsskala, Gruppierung, Ausrichtung, Dichte (kompakt oder luftig), Trefferflächen, App-Shells (Sidebar, Toolbar, Content, Inspector), maximale Breiten, Container-Query-Responsivität, Dropdown- und Popover-Größen, Platz für lange und übersetzte Texte, Layout-Stabilität (kein Verschieben beim Laden) sowie klebrige Elemente, die den Fokus nicht überdecken dürfen.

Was ist layout?

Dieser Skill für KI-Agenten (Claude Code, Cursor, Codex) legt fest, wie UI-Elemente in einem Web-Produkt angeordnet, beabstandet und skaliert werden. Er definiert eine verbindliche Entscheidungsreihenfolge: von der Bestimmung der Shell-Regionen (Sidebar, Toolbar, Content, Inspector) über Spaltenbreiten, Abstände, Ausrichtung, Größe und Worst-Case-Daten bis hin zur containerbasierten Adaption und pixelgenauen Überprüfung. Der Skill stellt eine einzelne 4-Pixel-basierte Abstandsskala (Tokens von `--space-xs` bis `--space-4xl`) bereit, die willkürliche Werte verbietet, und enthält durchsetzbare Regeln wie „Gruppieren mit Abstand, nicht mit Linien

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/nkurunziza-saddy/hmm-interfaces/tree/HEAD/layout

Installed? Explore more Bild skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht layout?

Dieser Skill entscheidet, wo Dinge platziert werden, wie weit sie voneinander entfernt sind und wie groß sie sind. Er trifft dieselben Entscheidungen in derselben Reihenfolge und überprüft das Ergebnis an den gerenderten Pixeln.

Vor jeder Entscheidung wende product-ui §1 (das Geschmacksjournal und die Rangfolge) und §5 (welcher Skill was besitzt) an.

Entscheide in dieser Reihenfolge

  1. Shell. Benenne die Bildschirmbereiche: Sidebar, Toolbar, Content, Inspector. Jeder Bereich ist ein Scroll-Eigentümer oder keiner. Details und Breiten: shell-and-responsive.md. Warum: Die Shell legt jede Breite fest, in der das innere Layout leben muss.
  2. Breite und Maß. Setze die Inhaltsbreite je nach Inhalt: Formular 440px, Lesemodus 720px mit einer auf das type-Maß (66ch) begrenzten Prosa, Daten 1200px. Eine Spalte dehnt sich nie, weil der Bildschirm breit ist. Warum: Ab 75 Zeichen verliert eine Zeile den Leser, und ein gestrecktes Formular schickt die Augen über den Bildschirm.
  3. Abstand. Verwende ausschließlich die untenstehende Skala. Gruppiere zuerst mit Abstand; füge eine Füllung hinzu, dann eine Linie, nur dort, wo Abstand es nicht tragen kann. spacing-and-density.md.
  4. Ausrichten. Wähle die gemeinsamen Kanten und platziere alles daran. Ein Fehler von 1–4 Pixeln ist ein Bug. Korrigiere optisch, wo die Geometrie falsch aussieht. spacing-and-density.md.
  5. Größe. Wähle die Dichte für den Bereich, dann die Trefferflächen. spacing-and-density.md.
  6. Schlimmstfall-Daten. Ändere die Größe der Box für den längsten, kürzesten, fehlenden, übersetzten und noch ladenden Inhalt, bevor du sie als erledigt betrachtest. stability-and-text.md.
  7. Anpassen. Lass die Struktur auf ihren Container reagieren, nicht auf das Gerät. shell-and-responsive.md.
  8. Messen. Rendere in 2×, messe Lücken und Kanten, korrigiere, was die Pixel zeigen. measure.md.

Die Skala

Eine Skala, 4px Basis. Schreibe niemals einen Abstandswert, der kein Schritt ist. Warum: Einzelwerte (10px, 14px, 18px) machen Rhythmus unsichtbar und unmöglich zu erhalten.

TokenpxTypische Verwendung
--space-xs4Label zu seiner Beschreibung; Icon zu Label in einem Chip
--space-sm8Elemente innerhalb einer Gruppe; Steuerelement-Padding block
--space-md12Zwischen umrandeten Steuerelementen; Steuerelement-Padding inline
--space-lg16Zwischen Feldern; kompaktes Karten-Padding
--space-2020Zwischen Blöcken innerhalb einer Karte
--space-xl24Zwischen Gruppen; luftiges Karten-Padding
--space-2xl32Zwischen Abschnitten
--space-3xl48Über dem ersten Titel einer Seite
--space-4xl64Unter dem letzten Block einer Seite

1–2px Korrekturen für optische Ausrichtung sind die einzigen Werte außerhalb der Skala. Benenne sie (--play-nudge: 2px).

Regeln, die keine Referenz benötigen

  • Gruppiere mit Abstand. Der Abstand zwischen Gruppen ist mindestens das 2-fache des Abstands innerhalb einer Gruppe: 8px innen bedeuten 16px oder mehr außen. Gleiche Abstände überall machen die Gruppierung mehrdeutig, und Mehrdeutigkeit ist hier ein funktionaler Bug.
  • Entferne Linien, bevor du sie hinzufügst. Zuerst Abstand, dann eine Füllung, zuletzt eine Trennlinie, und nur für dichte Daten. Warum: Jede Linie kostet Aufmerksamkeit für dieselbe Information, die Abstand kostenlos gibt.
  • Abstand oben entspricht Abstand unten für alles, was zwischen zwei Dingen steht. Warum: Ein Ding, das näher an einem Nachbarn ist, wirkt als ob es ihm gehört.
  • Steuerelemente müssen wie Steuerelemente aussehen. Ein Button, Link oder Toggle hat eine Form, eine Unterstreichung oder eine Toolbar-Position. Statischer Text teilt diese niemals. Warum: Ein wie Text gestyltes Steuerelement versteckt sich, und ein wie ein Steuerelement gestylter Text sammelt tote Klicks.
  • Aktionen stehen über den Daten, auf die sie wirken, niemals darunter. Ein Steuerelement, das etwas setzt, steht daneben.
  • Primärer Inhalt kommt zuerst und führend. Visuelle Reihenfolge entspricht der DOM-Reihenfolge: niemals order, row-reverse oder Grid-Platzierung, um Inhalt umzuordnen. Warum: Die Tastatur- und Screenreader-Reihenfolge folgt dem DOM.
  • Logische Eigenschaften (margin-inline-start, padding-block, inset-inline-end, text-align: start) für alles, was gespiegelt wird. Warum: RTL funktioniert dann ohne zweites Stylesheet.
  • Setze niemals kritische Steuerelemente an den unteren Rand eines Fensters oder einer Sidebar. Warum: Menschen schieben Fenster teilweise aus dem Bildschirm.
  • Scrollen zeigt, was verborgen ist. Inhalt hinter einer Kante erhält einen sichtbaren Hinweis: einen Einblick von 16–32px oder eine Einblendung.
  • Nichts verschiebt sich. Hover, Auswahl und Fokus ändern niemals die Größe eines Elements. Geladene Daten nehmen die Box ein, die das Skelett hatte.

Paare

KaputtKorrigiertWarum
gap: 12px im Formular und gap: 12px zwischen seinen Fieldsetsgap: 8px innen, gap: 24px zwischenGruppen brauchen einen Abstand von mindestens 2×
padding: 10px 14pxpadding: var(--space-sm) var(--space-md)Nur Schritte
Titel bei x=24, Beschreibung bei x=26Beide bei x=24Ein Fehler von 1–4px wirkt wie ein Fehler
Icon-Button 16×16 mit padding: 016px Glyphe, ::before { inset: -12px } für ein 40px ZielMausziel ist 40px
.row + .row { margin-top: 8px } mit Hover und Klick auf Zeilen.row { padding-block: 4px }, kein marginEin Abstand zwischen Zeilen ist eine tote Zone und lässt Hover flackern
.menu { width: 200px }width: max-content; min-width: 160px; max-width: 320pxDas Menü umschließt sein längstes Label
@media (max-width: 768px) auf einer Karte@container (width < 400px) auf dem Eltern-Element der KarteEine Karte in einer schmalen Sidebar braucht ihre eigene Breite, nicht die des Bildschirms
<img src> ohne Größe, dann eine Karte, die springtwidth, height oder aspect-ratio gesetztDie Box existiert vor den Bytes
Sticky-Header, Anker landet darunterscroll-padding-block-start: 56px auf dem ScrollerFokus und Anker liegen nie unter Chrome

Bevor du fertig bist

Durchsuche das Diff nach diesen Mustern und überprüfe sie dann.

MusterKorrektur
margin, padding oder gap mit einem Wert, der nicht in der Skala istNächster Schritt
Ein gap-Wert innerhalb und zwischen Gruppen verwendetInnen ≤ Hälfte von außen
Icon-Button unter 24px oder unter 40px ohne ::beforeMit einem Pseudo-Element erweitern
gap oder margin zwischen klickbaren Zeilen oder MenüeinträgenPadding innerhalb des Elements
Feste width bei einem Menü, Button oder Textfeldmax-content, min-width, max-width; min-height für Text
@media (max-width innerhalb einer wiederverwendbaren Komponente@container auf ihrem Eltern-Element
height: 100vh für eine Shell100dvh
1fr-Track oder Flex-Kind, das langen Text hältminmax(0, 1fr) oder min-width: 0
margin-left, padding-right, left: 0, text-align: left in gespiegelter UILogische Form
Sticky-Header oder -Footer ohne scroll-padding-blockAuf die Höhe des Chrome setzen
Skelett-Zeilen- oder Spaltenbreiten unterscheiden sich von geladenenAngleichen
<img> ohne Maße oder aspect-ratioEine hinzufügen

Überprüfe mit measure.md: rendere in 2× bei 390px und der breitesten Breite der Shell, führe das Skript aus, beschneide jeden Kandidaten und zähle Pixel. Tabben dich dann mit klebrigem Chrome durch den Bildschirm und lade die längsten Zeichenketten. Melde, was du nicht überprüfen konntest, als „nicht verifiziert“.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

nkurunziza-saddy/break

Stress-tests a piece of UI with worst-case data and every reachable state, then reports what broke with a numbered fix for each. Use it when the user types /break, or asks to "break this", "stress-test", "try the worst case", "what happens with long names", "check the empty and error states" or "find the edge cases" on a component or screen.

nkurunziza-saddy/motion

Builds motion for product UI on the web. It decides whether something should move at all, then why, which tool (CSS transition, WAAPI, Motion, spring), which properties, curve, duration, interruption, exit and reduced-motion path, and it writes the code. Also covers stagger and choreography, gestures (drag, flick, sheets), motion tokens and animation performance.

nkurunziza-saddy/pick-library

Picks the right library for a frontend task from a curated, status-checked list, instead of hand-rolling it or installing an abandoned package. Use it when the user asks "what should I use for…", "is there a library for…", or names a package, and when you are about to build a toast, command menu, drawer, date picker, table, virtual list, drag and drop, chart, OTP input, animated number, theme switch, form validation…

nkurunziza-saddy/surfaces

What product UI is made of on the web. It sets elevation levels with exact shadow recipes for light and dark mode, when to use a shadow and when a border, the transparent border for forced-colours mode, a small radius scale with concentric nesting, image outlines, every interactive state as a surface change (hover, pressed, selected, disabled, focus-visible), icons (one set, currentColor, outline and fill, stroke tha…

Verwandte Skills