设计系统技能 — 专业UI/UX,间距与多页面架构
该技能强制实施专业设计标准:正确的调色板、排版、章节间距、导航限制、详细的服务/产品页面、零表情符号以及多页面网站架构。推荐技术栈:Astro用于静态/内容站点,部署到Cloudflare Pages。
⚠️ 强制要求:多页面网站规则
当用户要求建立网站时,切勿只创建一个单页面。
当用户请求一个网站(例如:“营销代理网站”、“餐厅网站”、“公司网站”)时,您必须创建一个完整的、至少包含以下页面的多页面网站:
标准网站页面(强制)
| 页面 | 用途 | 优先级 |
|---|---|---|
| 首页 | Hero区域、价值主张、关键部分、行动号召按钮 | 必须 |
| 关于我们 | 公司故事、团队、使命、价值观 | 必须 |
| 服务 | 服务列表面页,包含指向详情页的链接 | 必须 |
| 服务详情 | 每个服务的独立页面(例如:/services/web-design) | 必须 |
| 联系我们 | 联系表单、地图、电话、邮箱、工作时间 | 必须 |
| 产品/作品集 | 产品列表面页,包含指向详情页的链接 | 必须 |
服务页面 — 详尽的(非通用)
每个服务必须有自己独立的专用页面。 服务列表面页展示卡片/摘要,这些卡片/摘要链接到各自的详情页。
❌ 禁止:
- /services 页面列出了所有服务,但没有独立的详情页
- 一个通用的 /services 页面,只有简短描述
- 服务只有2-3行文字描述
- 每个服务没有定价、流程或交付物
✅ 必需结构:
/services → 列表面页(卡片包含图片+标题+摘要+行动号召按钮)
/services/web-design → 详情页(描述、流程、交付物、定价、常见问题、行动号召按钮)
/services/seo → 详情页(描述、流程、交付物、定价、常见问题、行动号召按钮)
/services/social-media → 详情页(描述、流程、交付物、定价、常见问题、行动号召按钮)
每个服务详情页必须包含:
- 描述:3-5段文字解释该服务
- 流程:分步说明(1. 发现 → 2. 设计 → 3. 开发 → 4. 上线)
- 交付物:客户将收到什么
- 定价层级 或“起价XX元”(或是自定义报价的行动号召按钮)
- 常见问题部分:3-5个常见问题
- 行动号召按钮:“获取报价”、“预约咨询”、“开始您的项目”
- 客户评价或案例研究(如有)
产品页面 — 详尽的(非通用)
每个产品必须有自己独立的专用页面。 产品列表面页展示卡片,这些卡片链接到各自的详情页。
❌ 禁止:
- /products 页面只有一个简单的列表或网格,没有详情页
- 产品在一张卡片中描述,没有规格
- 每个产品没有定价、特性或图片
✅ 必需结构:
/products → 列表面页(卡片包含图片+名称+价格摘要+行动号召按钮)
/products/product-a → 详情页(图库、完整描述、规格、定价、评论、相关产品)
/products/product-b → 详情页(图库、完整描述、规格、定价、评论、相关产品)
每个产品详情页必须包含:
- 图片库:3-5张产品图片
- 完整描述:特性、规格、材料
- 定价:清晰的价格展示
- 行动号召按钮:“加入购物车”、“请求报价”、“立即购买”
- 相关产品部分
- 评价/客户评价(如有)
其他页面(基于业务类型)
| 业务类型 | 其他页面 |
|---|---|
| 代理机构 | 作品集、案例研究、团队、流程、定价 |
| 餐厅 | 菜单、预订、图库、厨师/故事、私人活动 |
| 电子商务 | 商店、产品详情、购物车、结账、账户、心愿单 |
| SaaS | 特性、定价、文档、博客、更新日志、状态 |
| 作品集 | 项目、关于我、简历、客户评价、联系 |
| 房地产 | 列表、房产详情、经纪人、社区、抵押贷款计算器 |
| 医疗保健 | 服务、医生/团队、预约、患者门户、位置 |
| 教育 | 项目、课程、教师、招生、校园生活、日历 |
| 法律 | 业务领域、律师、客户评价、资源、免费咨询 |
| 非营利组织 | 使命、项目、影响、参与、捐赠、活动 |
何时询问页面
使用 AskUserQuestion 来确认页面结构:
AskUserQuestion({
questions: [
{
question: "网站应该包含哪些页面?",
header: "页面",
options: [
{ label: "完整站点", description: "首页 + 关于我们 + 服务 + 产品 + 联系我们(推荐)" },
{ label: "标准", description: "首页 + 关于我们 + 服务 + 联系我们" },
{ label: "扩展", description: "完整站点 + 博客 + 常见问题 + 作品集 + 定价" }
]
}
]
})
反模式:单页面着陆页
❌ 禁止(当用户要求“一个网站”时):
- 创建 index.html 作为唯一的页面
- 将所有内容放在一个可滚动的页面中
- 当它只是一个单独的HTML文件时,称之为“网站”
- 使用部分内容假装是页面(例如:#about, #services, #contact)
✅ 必需:
- 每个部分都有独立的路由/页面(例如:/about, /services, /contact)
- 每个页面都有其自己的布局、元标签和SEO优化
- 导航菜单链接所有页面
- 共享的页眉/页脚组件
- 所有页面一致的设计系统
- 每个服务和产品都有独立的详情页
唯一的例外:用户明确说“着陆页”或“单页网站”。
⚠️ 强制要求:零表情符号政策
专业的网站不使用表情符号。绝对不使用。
❌ 禁止:
- 🚀 🎯 💡 ✨ 🏆 📱 💻 🛒 📧 📞 ✅ ❌ 🔥 ⭐ 💪 🎨 📊 🔒 🌍 网站中的任何表情符号
- 将表情符号用作部分图标
- 在标题、按钮或行动号召按钮中使用表情符号
- 在导航标签中使用表情符号
- 在元标题或描述中使用表情符号
✅ 必需:
- 使用来自图标库的SVG图标(Lucide, Heroicons, Phosphor, Tabler)
- 使用CSS形状或装饰性元素来增加视觉趣味
- 使用正确的图标组件(<svg> 或图标字体)
- 所有标题、按钮和标签使用纯文本
图标库(选择一个,保持一致):
| 库 | 安装 | 风格 | 最适用于 |
|---|---|---|---|
| Lucide | npm install lucide-react | 简洁、现代 | 大多数网站 |
| Heroicons | npm install @heroicons/react | 粗体、清晰 | 仪表盘、SaaS |
| Phosphor | npm install @phosphor-icons/react | 灵活、6种权重 | 多功能项目 |
| Tabler | npm install @tabler/icons-react | 轮廓式 | 管理面板 |
⚠️ 强制要求:章节间距
各个部分绝不能相互接触。每个部分都需要呼吸空间。
最小间距规则
| 元素 | 最小内边距(上/下) | CSS 变量 |
|---|---|---|
| 页面部分 | var(--space-20) (80px) | --section-padding |
| Hero区域 | var(--space-32) (128px) | --hero-padding |
| 页脚上内边距 | var(--space-32) (128px) | --footer-padding |
| 页眉高度 | var(--space-16) (64px) | --header-height |
| 内容块之间 | var(--space-12) (48px) | --block-gap |
| 行动号召部分 | var(--space-20) (80px) | --cta-padding |
章节间距CSS
:root {
--section-padding: clamp(4rem, 8vw, 6rem); /* 64-96px */
--hero-padding: clamp(6rem, 12vw, 10rem); /* 96-160px */
--footer-padding: clamp(5rem, 10vw, 8rem); /* 80-128px */
--header-height: 4rem; /* 64px */
--block-gap: clamp(2rem, 4vw, 3rem); /* 32-48px */
}
section {
padding-top: var(--section-padding);
padding-bottom: var(--section-padding);
}
.hero {
padding-top: var(--hero-padding);
padding-bottom: var(--hero-padding);
min-height: 70vh;
}
footer {
padding-top: var(--footer-padding);
padding-bottom: var(--space-12);
margin-top: 0; /* 永远不要折叠页脚间距 */
}
/* 交替的部分获得不同的背景 */
section:nth-of-type(even) {
background-color: var(--color-surface);
}
section:nth-of-type(odd) {
background-color: var(--color-bg);
}
间距反模式
❌ 禁止:
- 页脚直接接触上方的部分(没有间距)
- 部分的内边距 < 64px(感觉拥挤)
- Hero区域的内边距 < 96px(视觉冲击力弱)
- 对主要部分使用 margin: 0
- 所有部分使用相同的背景颜色(没有视觉区分)
- 移动端间距过紧(部分内边距 < 48px)
✅ 必需:
- 页脚始终具有充足的上内边距(128px+)
- 每个部分都有清晰的视觉区分(间距 + 交替背景)
- Hero区域至少占据70vh,并具有充足的内边距
- 移动端部分使用 clamp() 进行自适应间距
- 页脚前的行动号召部分有其独特的背景
⚠️ 强制要求:导航限制
导航菜单不能过于饱和。最多7个顶级项目。
导航规则
- 主导航栏最多7个项目
- 将相关页面分组到下拉菜单中
- 使用页脚导航放置次要链接(隐私政策、条款、站点地图)
- 移动端:带有可折叠部分的汉堡菜单
- 永远不要将所有页面放在主导航中
推荐的导航结构
主导航(最多5-7个项目):
首页 | 关于我们 | 服务 ▼ | 产品 | 作品集 | 联系我们 | 行动号召按钮
下拉菜单(服务):
服务概览
─────────────────
网页设计
SEO优化
社交媒体
品牌策略
页脚导航(次要链接):
隐私政策 | 服务条款 | 站点地图 | 常见问题 | 职业
导航反模式
❌ 禁止:
- 主导航栏中超过7个项目(杂乱、令人不知所措)
- 每个页面都在顶部导航中
- 没有为分组内容提供下拉/大菜单
- 汉堡菜单只是平铺列出所有链接
- 导航项目带有表情符号(例如:“🏠 首页” “📧 联系我们”)
- 只有文本的导航,没有视觉层次结构
✅ 必需:
- 最多7个顶级项目,额外的项目归入下拉菜单
- 主要的行动号召按钮(与导航链接不同的颜色/样式)
- 页脚包含次要链接(法律、额外内容)
- 移动端:带有分组部分的汉堡菜单
- 当前页面链接的激活状态
- 所有导航项目上的悬停状态
⚠️ 强制要求:推荐框架 — Astro
对于静态网站、营销网站和内容密集型网站,推荐使用Astro。
为什么营销网站选择Astro而非Next.js
| 因素 | Astro | Next.js |
|---|---|---|
| 默认输出 | 零JavaScript(仅HTML) | 需要React运行时 |
| 性能 | 近乎完美的Lighthouse分数 | 良好,但需要优化 |
| 内容焦点 | 为内容网站而构建 | 为Web应用而构建 |
| 打包体积 | 默认0KB JavaScript | ~80KB+ React运行时 |
| 学习曲线 | 简单(HTML + 组件) | 中等(React + SSR概念) |
| 多框架 | 在孤岛中使用React/Vue/Svelte | 仅React |
| SEO | 完美(静态HTML) | 良好(需要配置) |
| 托管 | Cloudflare Pages, Vercel, Netlify | Vercel(优化),其他 |
何时推荐什么
| 项目类型 | 推荐框架 |
|---|---|
| 营销/代理网站 | Astro + Tailwind |
| 餐厅/本地企业 | Astro + Tailwind |
| 作品集/简历 | Astro + Tailwind |
| 博客/内容网站 | Astro + Tailwind |
| 着陆页 | Astro 或 HTML/Tailwind |
| SaaS Web应用 | Next.js + React |
| 电子商务 | Next.js + React |
| 仪表盘/管理后台 | React + Vite |
| 移动应用 | Flutter 或 React Native |
Astro项目设置
npm create astro@latest my-site
cd my-site
npx astro add tailwind
Astro页面结构
src/
├── pages/
│ ├── index.astro # 首页
│ ├── about.astro # 关于我们
│ ├── services/
│ │ ├── index.astro # 服务列表
│ │ ├── web-design.astro # 服务详情
│ │ ├── seo.astro # 服务详情
│ │ └── social-media.astro
│ ├── products/
│ │ ├── index.astro # 产品列表
│ │ └── [slug].astro # 动态产品详情
│ ├── contact.astro
│ ├── blog/
│ │ ├── index.astro # 博客列表
│ │ └── [slug].astro # 博客文章
│ └── 404.astro
├── layouts/
│ └── BaseLayout.astro # 共享的HTML外壳
├── components/
│ ├── Header.astro
│ ├── Footer.astro
│ ├── ServiceCard.astro
│ ├── ProductCard.astro
│ └── SEO.astro # 可复用的meta/JSON-LD
└── styles/
└── global.css # 设计令牌
⚠️ 强制要求:Cloudflare Pages部署
对于静态/Astro站点,部署到Cloudflare Pages(免费、快速、全球CDN)。
部署设置
# 安装 Wrangler CLI
npm install -g wrangler
# 登录到 Cloudflare
wrangler login
# 构建项目
npm run bui
...
[此处原文被截断]
质量与SEO要求
元标签
每个页面必须包含:
- 唯一且描述性的
<title>标签 <meta name="description">,150-160个字符- Open Graph 标签 (
og:title,og:description,og:image,og:url) - 用于结构化数据的 JSON-LD 脚本(如适用)
性能
- 图片必须使用
<img>标签并包含alt属性 - 对图片使用响应式尺寸:
srcset和sizes - 使用语义化的 HTML 元素 (
<header>,<nav>,<main>,<section>,<article>,<footer>) - 使用
preload、prefetch或dns-prefetch进行静态资产的渲染 - 避免渲染阻塞请求
可访问性
- 使用正确的标题层级(h1 -> h2 -> h3),不要跳过
- 为表单控件添加标签
- 使用 ARIA 标签,但仅在需要时
- 确保足够的颜色对比度
- 键盘可导航