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

designing-nextjs-ui

在Next.js中创建专业、吸引人且视觉冲击力强的用户界面。适用于构建美观的网站、登录页面、仪表板或任何需要突出显示的UI。涵盖Tailwind CSS实用程序、排版、动画、视觉效果、响应式布局和现代设计模式。包括渐变文本、玻璃拟态、悬停效果以及全面的间距/布局系统。不适用于没有框架的基本HTML/CSS开发。

person作者: jakexiaohubgithub

Designing Professional Next.js UIs

Create visually stunning and highly functional interfaces using modern design patterns and Tailwind CSS.

Design Philosophy

Avoid generic aesthetics. Every interface should have a clear visual identity:

  • Choose distinctive fonts (avoid overused Inter, Roboto, Arial)
  • Commit to a bold aesthetic direction (minimalist, maximalist, editorial, etc.)
  • Use intentional color palettes with purpose
  • Add visual depth through shadows, gradients, and effects
  • Create memorable layouts that break from standard patterns

Balance beauty with function. Beautiful design serves the user experience:

  • Maintain clear hierarchy and readability
  • Use animations purposefully, not gratuitously
  • Ensure accessibility (contrast, semantic HTML, screen readers)
  • Optimize for performance (next/font, proper image handling)

The "Gold Standard" Stack

Don't reinvent the wheel. Use this proven combination for consistency and speed.

  1. Tailwind CSS: For utility-first styling.
  2. Shadcn UI: For copy-paste accessible components (based on Radix UI).
  3. Framer Motion: For declarative animations.
  4. Lucide React: For consistent, clean iconography.

Visual Hierarchy & Typography

Fonts (next/font)

Use next/font/google to eliminate layout shift.

  • Primary: Inter or Geist Sans (clean, modern legibility).
  • Headings (Optional): Playfair Display or Merriweather (for "classy" contrast).
import { Inter, Playfair_Display } from 'next/font/google'

const inter = Inter({ subsets: ['latin'], variable: '--font-inter' })
const playfair = Playfair_Display({ subsets: ['latin'], variable: '--font-playfair' })

export default function RootLayout({ children }) {
  return (
    <html lang="en" className={`${inter.variable} ${playfair.variable}`}>
      <body className="font-sans antialiased">{children}</body>
    </html>
  )
}

Data Presentation Patterns

1. KPI / Metric Cards

Isolate key numbers. Use the "Label (Muted) -> Value (Bold) -> Context (Color)" hierarchy.

// See references/ui-patterns.md for full component code
<Card>
  <CardHeader className="pb-2">
    <CardTitle className="text-sm font-medium text-muted-foreground">
      Total Revenue
    </CardTitle>
  </CardHeader>
  <CardContent>
    <div className="text-2xl font-bold">$45,231.89</div>
    <p className="text-xs text-emerald-500 flex items-center mt-1">
      +20.1% from last month
    </p>
  </CardContent>
</Card>

2. The "Bento Grid" Layout

Organize dashboard widgets into a grid of distinct rectangular areas.

<div className="grid grid-cols-1 md:grid-cols-4 gap-4 p-4">
  <div className="md:col-span-2 md:row-span-2 rounded-xl border bg-card text-card-foreground shadow">
    {/* Main Chart */}
  </div>
  <div className="md:col-span-1 rounded-xl border bg-card text-card-foreground shadow">
    {/* KPI 1 */}
  </div>
  <div className="md:col-span-1 rounded-xl border bg-card text-card-foreground shadow">
    {/* KPI 2 */}
  </div>
  <div className="md:col-span-2 rounded-xl border bg-card text-card-foreground shadow">
    {/* Recent Activity List */}
  </div>
</div>

3. Professional Tables

  • Alignment: Text left, Numbers right.
  • Headers: Muted uppercase or simple gray text.
  • Rows: Border separators (no zebra striping usually).
  • Font: Monospace for tabular numbers (font-mono) if strict alignment is needed.

Visual Effects & Modern UI

Gradient Text (Eye-Catching)

Create stunning gradient text effects:

<h1 className="text-5xl font-extrabold">
  <span className="bg-gradient-to-r from-pink-500 to-violet-500 bg-clip-text text-transparent">
    Beautiful Gradient
  </span>
</h1>

Glass Morphism (Modern Depth)

Frosted glass effect for cards and overlays:

<div className="bg-white/10 backdrop-blur-lg rounded-xl p-6 ring-1 ring-white/20 shadow-xl">
  <h3>Glass Card</h3>
</div>

Animations & Motion

Use animations strategically for attention and feedback:

  • animate-bounce - Scroll indicators, CTAs
  • animate-pulse - Loading states, skeleton loaders
  • animate-spin - Loading spinners
  • Hover effects: hover:scale-105, hover:shadow-xl
  • Transitions: transition-all duration-300

See references/visual-effects.md for comprehensive guide on gradients, shadows, blur effects, animations, and hover patterns.

Advanced Typography

Making Words Stand Out

Color Emphasis:

<p className="text-gray-700">
  Normal text with <span className="font-semibold text-violet-600">highlighted words</span>
</p>

Gradient Text:

<span className="bg-gradient-to-r from-yellow-400 to-pink-500 bg-clip-text text-transparent">
  Vibrant text
</span>

Background Highlight:

<span className="bg-yellow-200 px-1 font-medium">marked text</span>

Weight & Size Contrast:

  • Mix font-light with font-bold in same paragraph
  • Use large numbers (text-6xl) with small labels (text-xs)
  • Vary letter spacing: tracking-tight, tracking-wide, tracking-widest

See references/typography-advanced.md for font loading, hierarchy systems, responsive typography, and dark mode patterns.

Responsive Layouts

Mobile-First Approach

Always design for mobile first, then enhance for larger screens:

<div className="
  grid grid-cols-1           /* Mobile: single column */
  sm:grid-cols-2             /* Tablet: 2 columns */
  lg:grid-cols-3             /* Desktop: 3 columns */
  gap-4 sm:gap-6 lg:gap-8    /* Progressive spacing */
">
  {/* Grid items */}
</div>

Spacing Scale

Use consistent spacing (0.25rem increments):

  • gap-2, gap-4, gap-6, gap-8 - Between items
  • p-4, px-6, py-8 - Padding
  • mt-8, mb-4, mx-auto - Margins

Layout Patterns

  • Flexbox: flex items-center justify-between
  • Grid: grid grid-cols-4 gap-4
  • Container: max-w-6xl mx-auto px-4
  • Aspect Ratio: aspect-video, aspect-square

See references/layout-patterns.md for complete responsive patterns, Flexbox, Grid systems, spacing utilities, and container patterns.

Micro-Interactions (Framer Motion)

Make the app feel "alive" but not noisy.

// Subtle fade-in for page content
<motion.div
  initial={{ opacity: 0, y: 10 }}
  animate={{ opacity: 1, y: 0 }}
  transition={{ duration: 0.3 }}
>
  {children}
</motion.div>

Quick Reference

Typography:

  • Fonts: Use next/font/google for zero layout shift
  • Hierarchy: text-6xltext-4xltext-2xltext-xltext-base
  • Emphasis: Gradient text, color contrast, weight variation

Visual Effects:

  • Gradients: bg-gradient-to-r from-{color} to-{color}
  • Shadows: shadow-md, shadow-lg, shadow-xl, shadow-2xl
  • Blur: backdrop-blur-md, backdrop-blur-lg
  • Animations: animate-bounce, animate-pulse, hover:scale-105

Layout:

  • Responsive: sm:, md:, lg:, xl: breakpoints
  • Flexbox: flex items-center justify-between gap-4
  • Grid: grid grid-cols-{n} gap-{size}
  • Spacing: p-{n}, m-{n}, gap-{n} (multiples of 0.25rem)

Colors:

  • Text: text-gray-900 dark:text-white
  • Background: bg-white dark:bg-gray-800
  • Borders: border border-gray-200 dark:border-gray-700

Verification

Run: python scripts/verify.py

Related Skills

  • building-nextjs-apps - Core Next.js architecture
  • styling-with-shadcn - Deep dive into Shadcn components