返回 Skill 列表
extension
分类: 开发与工程无需 API Key

frontend-style-layout

使用Tailwind v4应用一致的样式和布局模式。在构建页面布局、选择间距方法、实现响应式图片或将Tailwind v3类迁移到v4时使用。涵盖部分复合模式、间距选择、无CLS响应式图片以及v4类更改。

person作者: jakexiaohubgithub

Frontend Style & Layout Patterns

Tailwind v4 styling patterns for this project. Covers page structure, spacing, responsive images, and v3→v4 migration.

1. Section Compound Pattern

Express page layout structure explicitly using semantic HTML + Tailwind classes at the usage site.

// ✅ Layout structure visible at a glance
const OrderListPage = () => (
  <main className="min-h-screen flex flex-col">
    <header className="sticky top-0 z-10 bg-white border-b border-gray-200">
      <OrderListHeader />
    </header>

    <section className="flex-1 flex flex-col gap-4 px-4 py-6">
      <OrderFilterBar />
      <OrderList />
    </section>

    <footer className="sticky bottom-0 bg-white border-t border-gray-200 px-4 py-3">
      <OrderListFooterActions />
    </footer>
  </main>
)

What to Expose vs. Hide

| Expose at usage site | Hide in component | | --------------------------------------- | ---------------------------------- | | Layout structure (flex, grid, position) | Reusable styles (button variants) | | Page-specific spacing and sizing | Internal implementation details | | Semantic HTML structure | Complexity outside current concern |

  • Reusable styles (buttons, cards) → abstract into components.
  • Page layout → write directly at the usage site in screens/ pages.

2. Spacing Selection Guide

Three Methods

flex gap — Default for Flexbox containers:

<div className="flex flex-col gap-4">
  <OrderCard />
  <OrderCard />
</div>

space-y / space-x — Sibling elements with consistent spacing:

<ul className="space-y-3">
  <li>
    <ReviewItem />
  </li>
  <li>
    <ReviewItem />
  </li>
</ul>

Explicit spacer div — Single specific gap (e.g., from design spec):

<div>
  <OrderHeader />
  <div className="h-8" /> {/* 32px explicit gap */}
  <OrderContent />
</div>

Decision Flow

Need spacing?
├── Inside Flexbox container?  → flex gap
├── Repeating sibling spacing? → space-y / space-x
├── Single explicit gap (from design spec)? → spacer div
└── Complex conditional spacing? → individual margin/padding

Notes

  • Use gap inside flex containers to avoid margin collapsing.

3. Responsive Images — CLS Prevention

Use aspect-ratio + relative container to maintain original ratio responsively.

// ✅ Basic responsive image
const Illustration = () => (
  <div className="flex justify-center">
    <div className="relative w-full aspect-[327/200]">
      <img
        src="/illustrations/order-complete.png"
        alt="Order complete"
        className="object-contain w-full h-full"
        loading="eager"
      />
    </div>
  </div>
)

// ✅ With max-width constraint
const Thumbnail = ({ src, alt }: { src: string; alt: string }) => (
  <div className="relative w-full max-w-sm aspect-square">
    <img src={src} alt={alt} className="object-cover w-full h-full rounded-lg" loading="lazy" />
  </div>
)

Key Properties

| Property | Purpose | | --------------------------------- | ------------------------------- | | relative | Positioning anchor for children | | aspect-[W/H] | Maintain ratio (prevents CLS) | | w-full | Fill parent width | | object-contain / object-cover | Image fit mode |

Loading Strategy

  • loading="eager": Above-the-fold images (LCP optimization)
  • loading="lazy": Below-the-fold images (initial load optimization)

4. Tailwind v4 Class Changes

This project uses Tailwind v4. Do NOT use v3 syntax.

Import Syntax

/* ❌ v3 (forbidden) */
@tailwind base;
@tailwind components;
@tailwind utilities;

/* ✅ v4 */
@import 'tailwindcss';

Class Migration Table

| v3 (forbidden) | v4 (use this) | | -------------- | ------------- | | shadow-sm | shadow-xs | | shadow | shadow-sm | | ring | ring-3 | | blur | blur-sm | | rounded | rounded-sm |

Reference: Tailwind v4 Upgrade Guide