Community画像github.com

nkurunziza-saddy/layout

プロダクトUIの構造とスペースを決定します。スペーシングスケール、グループ化、配置、密度(コンパクトまたはコンフォータブル)、ヒットエリア、アプリシェル(サイドバー、ツールバー、コンテンツ、インスペクター)、最大幅、コンテナクエリによるレスポンシブ、ドロップダウンとポップオーバーのサイズ、長いテキストや翻訳テキストのための余白、レイアウトの安定性(ロード時のシフトなし)、フォーカスを覆わないスティッキー要素などを設定します。

layout とは?

このスキルは、プロダクトUIにおけるレイアウト(配置、スペーシング、サイジング)の一貫した決定方法を提供します。開発者は与えられた順序(シェル → 幅と尺度 → スペース → 配置 → サイズ → 最悪ケースのデータ → 適応 → 測定)に従うことで、視覚的リズム、アクセシビリティ、および安定性を確保できます。Claude CodeやCursorなどのAIエージェントがコード生成時に適用することを想定しており、4pxベースのスペーシングスケール、論理プロパティ、コンテナクエリ、そしてスティッキー要素のフォーカス被り防止など、具体的なルールとペア(良くない例と修正例)をSKILL.mdで詳細に定義しています。このスキルを使うことで、UIの予測可能性が向上し、開発者はレイアウトの判断に迷うことなく、一貫性のある美しいインターフェースを構築できます。

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

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

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

レイアウト

このスキルは、どこに何を配置し、どれだけ離し、どれだけの大きさにするかを決定します。同じ順序で同じ判断を行い、結果をレンダリングされたピクセルと照合します。

いかなる判断の前に、product-ui §1(テイストジャーナルと優先順位)と§5(どのスキルが何を担当するか)を適用してください。

この順序で決定する

  1. シェル 画面の領域に名前を付けます:サイドバー、ツールバー、コンテンツ、インスペクター。各領域は1つのスクロール所有者またはなしです。詳細と幅:shell-and-responsive.md。 理由:シェルは内部レイアウトが生きるすべての幅を固定します。
  2. 幅と尺度 コンテンツカラムを保持するものによって設定します:フォーム440px、読み物720px(プローズはtype尺度(66ch)で制限)、データ1200px。カラムは画面が広いからといって伸びることはありません。 理由:75文字を超えると行は読み手を失い、伸びたフォームは視線を画面全体に散らせます。
  3. スペース 以下のスケールのみを使用し、それ以外は使いません。最初にスペースでグループ化し、スペースで伝えられない場合にのみ塗りつぶし、次に線を追加します。spacing-and-density.md。
  4. 配置 共有するエッジを選び、すべてをその上に配置します。1~4pxのずれはバグです。幾何学的に間違って見える場合は光学的に修正します。spacing-and-density.md。
  5. サイズ 領域の密度を選択し、次にヒットエリアを選択します。spacing-and-density.md。
  6. 最悪ケースのデータ 完了と呼ぶ前に、最長、最短、欠落、翻訳済み、ロード中のコンテンツに合わせてボックスのサイズを変更します。stability-and-text.md。
  7. 適応 構造をデバイスではなくコンテナに応答させます。shell-and-responsive.md。
  8. 測定 2倍でレンダリングし、ギャップとエッジを測定し、ピクセルが示すものを修正します。measure.md。

スケール

1つのスケール、4pxベース。ステップではないスペーシング値を決して記述しないでください。 理由:個別の値(10px、14px、18px)はリズムを見えなくし、維持できなくします。

トークンpx典型的な使用例
--space-xs4ラベルとその説明の間;チップ内のアイコンとラベルの間
--space-sm8グループ内のアイテム間;コントロールのパディングブロック
--space-md12枠線付きコントロール間;コントロールのパディングインライン
--space-lg16フィールド間;コンパクトカードのパディング
--space-2020カード内のブロック間
--space-xl24グループ間;コンフォータブルカードのパディング
--space-2xl32セクション間
--space-3xl48ページの最初のタイトルの上
--space-4xl64ページの最後のブロックの下

光学的配置のための1~2pxの微調整のみ、スケール外の値として許可されます。名前を付けます(--play-nudge: 2px)。

リファレンス不要のルール

  • スペースでグループ化する グループ間の区切りは、グループ内のギャップの少なくとも2倍以上にします:内部が8pxなら、間は16px以上にします。どこも同じスペーシングだとグループ化があいまいになり、このあいまいさは機能的なバグです。
  • 線を追加する前に線を削除する 最初にスペース、次に塗りつぶし、最後に区切り線、そしてそれは高密度データの場合のみです。 理由:すべての線は、スペースが無料で与える同じ情報に対して、注意を消費します。
  • 上下のスペースは等しくする 2つのものの間にあるものは、上と下のスペースが等しくなければなりません。 理由:一方の隣接要素に近いものは、その要素に所有されているように見えます。
  • コントロールはコントロールのように見えなければならない ボタン、リンク、トグルには形状、下線、またはツールバーの位置があります。静的テキストはこれらを共有してはいけません。 理由:テキストのようにスタイルされたコントロールは隠れ、コントロールのようにスタイルされたテキストは無駄なクリックを集めます。
  • アクションは、操作するデータの上に配置する 決して下ではありません。何かを設定するコントロールは、その隣に配置します。
  • プライマリコンテンツは先頭かつ先頭揃えにする 視覚的な順序はDOMの順序と同じにします:コンテンツを並び替えるためにorder、row-reverse、またはグリッド配置を決して使用しないでください。 理由:キーボードとスクリーンリーダーの順序はDOMに従います。
  • 論理プロパティ(margin-inline-start、padding-block、inset-inline-end、text-align: start)をミラーリングするものすべてに使用します。 理由:RTLが2つ目のスタイルシートなしで機能するようになります。
  • 重要なコントロールをウィンドウやサイドバーの下端に決して配置しない 理由:ユーザーはウィンドウを部分的に画面外に押し出します。
  • スクロールは隠れたものを示す 端を超えたコンテンツには、16~32pxのチラ見せまたはフェードアウトという、目に見える手がかりを提供します。
  • 何もシフトしない ホバー、選択、フォーカスが要素のサイズを変えることはありません。ロードされたデータは、スケルトンが保持していたボックスを引き継ぎます。

ペア(悪い例と修正例)

悪い例修正例理由
フォーム内でgap: 12px、fieldset間でもgap: 12px内部はgap: 8px、間はgap: 24pxグループには少なくとも2倍の区切りが必要
padding: 10px 14pxpadding: var(--space-sm) var(--space-md)ステップのみ使用
タイトルがx=24、説明がx=26両方ともx=241~4pxのずれはミスに見える
アイコンボタン16×16、padding: 016pxグリフ、::before { inset: -12px }で40pxターゲットマウスターゲットは40px
.row + .row { margin-top: 8px }、行にホバーとクリックあり.row { padding-block: 4px }、マージンなし行間のギャップはデッドゾーンであり、ホバーがちらつく
.menu { width: 200px }width: max-content; min-width: 160px; max-width: 320pxメニューは最長のラベルに合わせる
カードに@media (max-width: 768px)カードの親に@container (width < 400px)狭いサイドバー内のカードは画面幅ではなく、自身の幅が必要
サイズ指定なしの<img src>、その後カードがジャンプするwidth、height、またはaspect-ratioを設定ボックスはバイトより先に存在する必要がある
スティッキーヘッダー、アンカーがその下に来るスクローラーにscroll-padding-block-start: 56pxフォーカスとアンカーがクロームの下に来ない

終了前に

diffで以下を検索し、確認してください。

パターン修正
margin、padding、またはgapにスケール外の値最も近いステップに変更
グループ内とグループ間で同じgap値グループ内 ≤ グループ間の半分
アイコンのみのボタンが24px未満、または::beforeなしで40px未満疑似要素で拡張
クリック可能な行やメニュー項目の間のgapまたはmargin項目内のパディング
メニュー、ボタン、テキストボックスに固定のwidthmax-content、min-width、max-widthを使用;テキストにはmin-height
再利用可能なコンポーネント内の@media (max-widthその親に@container
シェルにheight: 100vh100dvh
長いテキストを保持する1frトラックまたはフレックス子minmax(0, 1fr) または min-width: 0
ミラーリングされたUIでのmargin-left、padding-right、left: 0、text-align: left論理形式に変更
scroll-padding-blockなしのスティッキーヘッダーまたはフッタークロームの高さに設定
スケルトンの行の高さや列の幅がロード後と異なる一致させる
寸法またはaspect-ratioのない<img>追加する

measure.mdで検証:390pxとシェルの最大幅で2倍レンダリングし、スクリプトを実行し、各候補をクロップしてピクセル数をカウントします。次に、スティッキークロームを配置した状態で画面をTab移動し、最長の文字列をロードします。確認できなかったものは「未確認」として報告してください。

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…

関連スキル