智能网站自动生成器

96 浏览
9 试用
2 购买
Oct 22, 2025更新

本提示词模板专为简化网站创建流程而设计,能够根据用户提供的设计元素自动生成功能完整的网站。通过深度分析设计需求,采用分步推理的方式确保网站结构的合理性和功能的完整性。模板具备卓越的设计元素解析能力,能够智能适配不同业务场景,从企业官网到个人作品集均可高效生成。亮点在于将复杂的网站开发过程转化为简单的设计输入,无需编程知识即可获得专业级网站,同时支持多种设计风格的灵活配置,确保输出结果既美观又实用。该模板特别适合设计师、创业者、中小企业主等非技术背景用户快速搭建在线展示平台。

网站设计方案

  • 视觉风格:以深蓝与白为主色,稳重现代。深蓝用于背景、标题与导航,白色用于内容区与留白,强调清晰的信息层级。辅以适度的天蓝作为强调色用于CTA按钮与交互状态。
  • 布局策略:全站采用响应式网格布局(CSS Grid + Flex),中等留白提升可读性。首屏大横幅展示品牌主张与价值,右侧简洁图形增强现代感;CTA按钮明显、对比强烈。
  • 导航与信息架构:顶部固定导航,清晰分区:首页、关于我们、产品与服务、服务流程、客户反馈、联系我们。全站锚点跳转与吸顶导航保证易用性。
  • 组件与交互:
    • 首屏CTA“获取报价”与“联系我们”,启用询价表单弹窗,提升线索收集效率。
    • 产品卡片网格展示3项核心产品与一句话卖点。
    • 四步流程以编号卡片呈现,便于理解。
    • 客户反馈以轮播组件简洁展示摘句。
    • 联系我们区包含联系信息与同款询价表单(支持姓名、电话、需求描述、预算区间),表单校验与成功反馈。
  • 品牌统一:统一色彩、按钮样式、图标风格(简洁SVG)、一致的排版与间距规范,确保整体专业可信。

网站结构图

  • 首页(Hero)
    • 标题与品牌主张
    • 主CTA:获取报价
    • 次CTA:联系我们
  • 关于我们(About)
    • 成立背景
    • 业务范围简述
  • 产品与服务(Products)
    • 核心产品1:一句话卖点
    • 核心产品2:一句话卖点
    • 核心产品3:一句话卖点
  • 服务流程(Process)
    • 步骤1:需求沟通
    • 步骤2:方案与报价
    • 步骤3:开发交付
    • 步骤4:上线与支持
  • 客户反馈(Testimonials)
    • 摘句轮播
  • 联系我们(Contact)
    • 邮箱、电话、所在城市
    • 询价表单(姓名、电话、需求描述、预算区间)
  • 全站组件
    • 固定导航
    • 询价表单弹窗(与联系区同字段)
    • 页脚版权信息

核心代码实现

<!doctype html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <title>企业官网 | 产品与服务展示</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="稳重现代的企业官网与产品服务展示,统一品牌风格,配置联系我们与询价表单,收集销售线索。">
  <meta property="og:title" content="企业官网 | 产品与服务展示">
  <meta property="og:description" content="稳重现代的企业官网与产品服务展示,统一品牌风格,配置联系我们与询价表单,收集销售线索。">
  <meta property="og:type" content="website">
  <link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><rect width=%22100%22 height=%22100%22 rx=%2215%22 fill=%22%230A1F44%22/><text x=%2250%22 y=%2258%22 font-size=%2250%22 text-anchor=%22middle%22 fill=%22white%22>B</text></svg>">
  <link rel="stylesheet" href="styles.css">
  <script defer src="script.js"></script>
</head>
<body>
  <a class="skip-link" href="#main">跳转至正文</a>

  <header class="site-header" role="banner">
    <div class="container header-inner">
      <a href="#home" class="brand" aria-label="企业品牌首页">企业品牌</a>
      <nav class="site-nav" aria-label="主导航">
        <button class="nav-toggle" aria-label="打开菜单" aria-expanded="false" data-nav-toggle>
          <span class="nav-toggle-bar"></span>
          <span class="nav-toggle-bar"></span>
          <span class="nav-toggle-bar"></span>
        </button>
        <ul class="nav-list" data-nav-list>
          <li><a href="#about">关于我们</a></li>
          <li><a href="#products">产品与服务</a></li>
          <li><a href="#process">服务流程</a></li>
          <li><a href="#testimonials">客户反馈</a></li>
          <li><a href="#contact">联系我们</a></li>
        </ul>
      </nav>
      <button class="btn btn-accent cta-header" data-open-modal="#quoteModal">获取报价</button>
    </div>
  </header>

  <main id="main">
    <!-- 首屏大横幅 -->
    <section id="home" class="hero">
      <div class="container hero-grid">
        <div class="hero-content">
          <h1>稳重现代的企业官网,助力品牌升级</h1>
          <p class="hero-sub">以深蓝与白为基调,统一品牌形象;网格布局清晰呈现产品与服务,通过询价表单高效收集销售线索。</p>
          <div class="hero-actions">
            <button class="btn btn-accent btn-lg" data-open-modal="#quoteModal" aria-label="打开询价表单">获取报价</button>
            <a class="btn btn-outline btn-lg" href="#contact">联系我们</a>
          </div>
        </div>
        <div class="hero-visual" aria-hidden="true">
          <svg viewBox="0 0 480 360" class="hero-svg">
            <defs>
              <linearGradient id="g1" x1="0" y1="0" x2="1" y2="1">
                <stop offset="0%" stop-color="#0A1F44"/>
                <stop offset="100%" stop-color="#123768"/>
              </linearGradient>
            </defs>
            <rect x="0" y="0" width="480" height="360" rx="24" fill="url(#g1)"/>
            <g fill="#2D9CDB" opacity="0.8">
              <circle cx="80" cy="80" r="8"/>
              <circle cx="120" cy="80" r="8"/>
              <circle cx="160" cy="80" r="8"/>
            </g>
            <rect x="48" y="120" width="384" height="160" rx="16" fill="#ffffff" opacity="0.09"/>
            <rect x="72" y="144" width="336" height="24" rx="6" fill="#2D9CDB" opacity="0.25"/>
            <rect x="72" y="184" width="216" height="24" rx="6" fill="#2D9CDB" opacity="0.25"/>
          </svg>
        </div>
      </div>
    </section>

    <!-- 关于我们 -->
    <section id="about" class="section about">
      <div class="container grid-2">
        <div>
          <h2>关于我们</h2>
          <p>我们致力于为企业提供现代化的网页解决方案,通过优雅的设计与可靠的技术,提升线上形象与获客效率。</p>
        </div>
        <div class="about-cards">
          <article class="card">
            <h3>成立背景</h3>
            <p>团队由资深设计与前端工程师组成,融合审美与技术,为不同行业打造高品质网站。</p>
          </article>
          <article class="card">
            <h3>业务范围简述</h3>
            <p>企业官网建设、产品展示页、询价表单与线索收集、基础SEO优化、主流浏览器兼容与响应式适配。</p>
          </article>
        </div>
      </div>
    </section>

    <!-- 产品与服务 -->
    <section id="products" class="section products">
      <div class="container">
        <h2>产品与服务</h2>
        <div class="grid-3">
          <article class="card card-product">
            <div class="icon">
              <svg viewBox="0 0 48 48" aria-hidden="true">
                <rect x="6" y="10" width="36" height="28" rx="4" fill="#2D9CDB"/>
                <rect x="10" y="14" width="28" height="6" rx="3" fill="#fff"/>
                <rect x="10" y="24" width="18" height="6" rx="3" fill="#fff" opacity="0.9"/>
              </svg>
            </div>
            <h3>智能官网引擎</h3>
            <p class="sell">一体化搭建与管理,让官网快速上线,维护更轻松。</p>
          </article>

          <article class="card card-product">
            <div class="icon">
              <svg viewBox="0 0 48 48" aria-hidden="true">
                <circle cx="24" cy="24" r="18" fill="#2D9CDB"/>
                <rect x="16" y="22" width="16" height="4" rx="2" fill="#fff"/>
                <rect x="22" y="16" width="4" height="16" rx="2" fill="#fff"/>
              </svg>
            </div>
            <h3>轻量产品展示</h3>
            <p class="sell">网格化卡片呈现要点,突出卖点,转化更直接。</p>
          </article>

          <article class="card card-product">
            <div class="icon">
              <svg viewBox="0 0 48 48" aria-hidden="true">
                <rect x="10" y="10" width="28" height="28" rx="6" fill="#2D9CDB"/>
                <polyline points="14,28 20,22 26,30 34,18" stroke="#fff" stroke-width="3" fill="none"/>
              </svg>
            </div>
            <h3>数据洞察仪表</h3>
            <p class="sell">基础数据追踪与可视化,支持后续接入CRM与分析。</p>
          </article>
        </div>
      </div>
    </section>

    <!-- 服务流程 -->
    <section id="process" class="section process">
      <div class="container">
        <h2>服务流程</h2>
        <div class="grid-4 steps">
          <article class="step">
            <div class="num">01</div>
            <h3>需求沟通</h3>
            <p>明确网站目标、风格偏好与内容素材。</p>
          </article>
          <article class="step">
            <div class="num">02</div>
            <h3>方案与报价</h3>
            <p>确认信息架构与设计方案,提供合理预算区间。</p>
          </article>
          <article class="step">
            <div class="num">03</div>
            <h3>开发交付</h3>
            <p>输出高质量前端代码,完成测试与优化。</p>
          </article>
          <article class="step">
            <div class="num">04</div>
            <h3>上线与支持</h3>
            <p>协助部署上线,提供后续维护与升级建议。</p>
          </article>
        </div>
      </div>
    </section>

    <!-- 客户反馈 -->
    <section id="testimonials" class="section testimonials">
      <div class="container">
        <h2>客户反馈</h2>
        <div class="slider" data-slider>
          <div class="slides">
            <figure class="slide">
              <blockquote>“官网很干净利落,CTA醒目,询价表单带来了实际线索。”</blockquote>
              <figcaption>— 制造业客户</figcaption>
            </figure>
            <figure class="slide">
              <blockquote>“设计稳重现代,品牌一致性很好,加载速度也很快。”</blockquote>
              <figcaption>— 科技企业</figcaption>
            </figure>
            <figure class="slide">
              <blockquote>“从沟通到上线体验顺畅,后续维护建议也很专业。”</blockquote>
              <figcaption>— 服务业伙伴</figcaption>
            </figure>
          </div>
          <div class="slider-controls">
            <button class="btn btn-outline btn-sm" data-prev>上一条</button>
            <button class="btn btn-outline btn-sm" data-next>下一条</button>
          </div>
        </div>
      </div>
    </section>

    <!-- 联系我们 -->
    <section id="contact" class="section contact">
      <div class="container grid-2">
        <div>
          <h2>联系我们</h2>
          <address class="contact-info">
            <p><strong>邮箱:</strong><a href="mailto:contact@yourcompany.com">contact@yourcompany.com</a></p>
            <p><strong>电话:</strong><a href="tel:+864001234567">400-123-4567</a></p>
            <p><strong>所在城市:</strong>上海</p>
          </address>
          <p class="note">也可点击页面右上角或首屏按钮,打开询价表单。</p>
        </div>

        <!-- 询价表单(内嵌版) -->
        <form class="form card" data-lead-form novalidate>
          <h3>询价表单</h3>
          <div class="form-row">
            <label for="name">姓名</label>
            <input id="name" name="name" type="text" required placeholder="请输入您的姓名" aria-required="true">
          </div>
          <div class="form-row">
            <label for="phone">电话</label>
            <input id="phone" name="phone" type="tel" required placeholder="手机号或座机" aria-required="true" pattern="^(\+?\d{1,4}[-\s]?)?(\d{7,13})$">
          </div>
          <div class="form-row">
            <label for="budget">预算区间</label>
            <select id="budget" name="budget" required aria-required="true">
              <option value="">请选择</option>
              <option>¥3-5万</option>
              <option>¥5-10万</option>
              <option>¥10-30万</option>
              <option>¥30万以上</option>
            </select>
          </div>
          <div class="form-row">
            <label for="desc">需求描述</label>
            <textarea id="desc" name="desc" rows="4" placeholder="简要描述您的网站目标与内容需求"></textarea>
          </div>
          <div class="form-actions">
            <button type="submit" class="btn btn-accent">提交询价</button>
            <p class="form-status" aria-live="polite"></p>
          </div>
        </form>
      </div>
    </section>
  </main>

  <footer class="site-footer">
    <div class="container footer-inner">
      <p>© <span id="year"></span> 企业品牌. 保留所有权利。</p>
      <nav aria-label="页脚导航">
        <a href="#about">关于</a>
        <a href="#products">产品</a>
        <a href="#process">流程</a>
        <a href="#contact">联系</a>
      </nav>
    </div>
  </footer>

  <!-- 询价表单弹窗 -->
  <div class="modal" id="quoteModal" aria-hidden="true" aria-labelledby="quoteTitle" role="dialog">
    <div class="modal-backdrop" data-close-modal></div>
    <div class="modal-dialog" role="document" aria-modal="true">
      <button class="modal-close" aria-label="关闭弹窗" data-close-modal>&times;</button>
      <h3 id="quoteTitle">获取报价</h3>
      <form class="form" data-lead-form novalidate>
        <div class="form-row">
          <label for="m-name">姓名</label>
          <input id="m-name" name="name" type="text" required placeholder="请输入您的姓名" aria-required="true">
        </div>
        <div class="form-row">
          <label for="m-phone">电话</label>
          <input id="m-phone" name="phone" type="tel" required placeholder="手机号或座机" aria-required="true" pattern="^(\+?\d{1,4}[-\s]?)?(\d{7,13})$">
        </div>
        <div class="form-row">
          <label for="m-budget">预算区间</label>
          <select id="m-budget" name="budget" required aria-required="true">
            <option value="">请选择</option>
            <option>¥3-5万</option>
            <option>¥5-10万</option>
            <option>¥10-30万</option>
            <option>¥30万以上</option>
          </select>
        </div>
        <div class="form-row">
          <label for="m-desc">需求描述</label>
          <textarea id="m-desc" name="desc" rows="4" placeholder="简要描述您的网站目标与内容需求"></textarea>
        </div>
        <div class="form-actions">
          <button type="submit" class="btn btn-accent">提交询价</button>
          <p class="form-status" aria-live="polite"></p>
        </div>
      </form>
    </div>
  </div>
</body>
</html>
/* styles.css */
/* 基础主题变量 */
:root {
  --blue-900: #0A1F44;
  --blue-800: #0F2B5C;
  --blue-700: #123768;
  --accent:   #2D9CDB;
  --text:     #0D1B2A;
  --muted:    #6B7B8C;
  --bg:       #FFFFFF;
  --bg-alt:   #F3F7FB;

  --radius-sm: 8px;
  --radius-md: 14px;
  --radius-lg: 20px;

  --shadow-sm: 0 2px 8px rgba(10,31,68,0.08);
  --shadow-md: 0 8px 24px rgba(10,31,68,0.12);

  --max-w: 1120px;
}

/* CSS Reset 简化 */
* { box-sizing: border-box; }
html, body { height: 100%; }
body {
  margin: 0;
  font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Noto Sans", "Helvetica Neue", Arial, "PingFang SC", "Microsoft Yahei", sans-serif;
  color: var(--text);
  background: var(--bg);
  line-height: 1.6;
}
img, svg { display: block; max-width: 100%; height: auto; }
a { color: inherit; text-decoration: none; }
button { font: inherit; }
input, select, textarea { font: inherit; color: inherit; }

/* 可访问性 */
.skip-link {
  position: absolute; left: -999px; top: -999px;
}
.skip-link:focus {
  left: 12px; top: 12px; background: var(--bg); color: var(--blue-900);
  padding: 8px 12px; border-radius: var(--radius-sm); box-shadow: var(--shadow-sm);
}

/* 容器与栅格 */
.container {
  width: 100%;
  max-width: var(--max-w);
  margin-inline: auto;
  padding-inline: 20px;
}
.section { padding: 72px 0; }
.grid-2 {
  display: grid; gap: 28px;
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.grid-3 {
  display: grid; gap: 28px;
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.grid-4 {
  display: grid; gap: 28px;
  grid-template-columns: repeat(4, minmax(0, 1fr));
}

/* 头部导航 */
.site-header {
  position: sticky; top: 0; z-index: 1000;
  background: rgba(10,31,68,0.95);
  backdrop-filter: saturate(150%) blur(8px);
  color: #fff;
  box-shadow: 0 1px 0 rgba(255,255,255,0.06);
}
.header-inner {
  display: flex; align-items: center; justify-content: space-between;
  height: 64px;
}
.brand {
  color: #fff; font-weight: 700; letter-spacing: 0.3px; font-size: 18px;
}
.site-nav { display: flex; align-items: center; gap: 18px; }
.nav-toggle {
  display: none; background: transparent; border: none; cursor: pointer;
}
.nav-toggle-bar {
  display: block; width: 24px; height: 2px; background: #fff; margin: 5px 0;
}
.nav-list {
  display: flex; list-style: none; gap: 18px; margin: 0; padding: 0;
}
.nav-list a {
  color: #fff; opacity: 0.9; padding: 8px 10px; border-radius: 8px;
}
.nav-list a:hover, .nav-list a:focus { background: rgba(255,255,255,0.08); opacity: 1; }
.cta-header { display: inline-flex; }

/* 按钮 */
.btn {
  display: inline-flex; align-items: center; justify-content: center;
  padding: 10px 16px; border-radius: var(--radius-sm);
  border: 1px solid transparent; cursor: pointer; transition: all .25s ease;
}
.btn-lg { padding: 12px 20px; font-weight: 600; }
.btn-sm { padding: 6px 12px; font-size: 14px; }
.btn-accent {
  background: var(--accent); color: #fff; box-shadow: var(--shadow-sm);
}
.btn-accent:hover { filter: brightness(1.05); transform: translateY(-1px); }
.btn-outline {
  background: transparent; color: var(--accent); border-color: var(--accent);
}
.btn-outline:hover { background: rgba(45,156,219,0.08); }

/* 首屏 */
.hero {
  background: linear-gradient(180deg, var(--blue-900), var(--blue-800));
  color: #fff;
  padding: 96px 0 88px;
}
.hero-grid {
  display: grid; gap: 36px;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  align-items: center;
}
.hero-content h1 { font-size: 36px; line-height: 1.2; margin: 0 0 12px; }
.hero-sub { opacity: 0.9; }
.hero-actions { display: flex; gap: 12px; margin-top: 20px; }
.hero-visual { justify-self: end; max-width: 520px; }
.hero-svg { border-radius: var(--radius-lg); box-shadow: var(--shadow-md); }

/* 关于我们 */
.about .about-cards {
  display: grid; gap: 20px;
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.card {
  background: #fff; border: 1px solid #E6ECF3; border-radius: var(--radius-md);
  padding: 20px; box-shadow: var(--shadow-sm);
}
.about h2, .products h2, .process h2, .testimonials h2, .contact h2 {
  color: var(--blue-900);
}

/* 产品与服务 */
.card-product .icon { width: 56px; height: 56px; border-radius: 14px; background: var(--bg-alt); display: grid; place-items: center; margin-bottom: 12px; }
.card-product h3 { margin: 8px 0; }
.sell { color: var(--muted); }

/* 服务流程 */
.steps .step {
  background: #fff; border: 1px solid #E6ECF3; border-radius: var(--radius-md);
  padding: 18px; box-shadow: var(--shadow-sm);
}
.step .num {
  width: 40px; height: 40px; border-radius: 12px; background: var(--accent); color: #fff;
  display: grid; place-items: center; font-weight: 700; margin-bottom: 8px;
}

/* 客户反馈 */
.testimonials { background: var(--bg-alt); }
.slider { position: relative; overflow: hidden; border-radius: var(--radius-md); background: #fff; padding: 12px; }
.slides {
  display: flex; transition: transform .4s ease;
}
.slide {
  min-width: 100%;
  padding: 18px;
}
blockquote { font-size: 18px; color: var(--blue-900); margin: 0 0 8px; }
figcaption { color: var(--muted); }
.slider-controls {
  display: flex; gap: 8px; justify-content: flex-end; padding: 8px 4px;
}

/* 联系我们与表单 */
.contact .contact-info a { color: var(--accent); }
.form {
  display: grid; gap: 12px;
}
.form-row {
  display: grid; gap: 6px;
}
label { font-weight: 600; color: var(--blue-900); }
input[type="text"], input[type="tel"], select, textarea {
  border: 1px solid #D8E1EA; border-radius: 10px; padding: 10px 12px; background: #fff;
}
input:focus, select:focus, textarea:focus {
  outline: 2px solid rgba(45,156,219,0.35); border-color: var(--accent);
}
.form-actions { display: flex; align-items: center; gap: 12px; }
.form-status { font-size: 14px; color: var(--muted); }

/* 页脚 */
.site-footer {
  border-top: 1px solid #E6ECF3; background: #fff; color: var(--muted);
}
.footer-inner {
  display: flex; align-items: center; justify-content: space-between; padding: 20px;
}
.site-footer a { color: var(--accent); }

/* 锚点滚动修正 */
:target { scroll-margin-top: 84px; }

/* 弹窗 */
.modal { position: fixed; inset: 0; display: none; }
.modal.open { display: block; }
.modal-backdrop {
  position: absolute; inset: 0; background: rgba(13,27,42,0.55); backdrop-filter: blur(2px);
}
.modal-dialog {
  position: relative;
  width: min(560px, calc(100% - 32px));
  margin: 8vh auto;
  background: #fff; border-radius: var(--radius-lg);
  box-shadow: var(--shadow-md);
  padding: 20px;
}
.modal-close {
  position: absolute; right: 10px; top: 8px;
  background: transparent; border: none; font-size: 28px; color: var(--muted); cursor: pointer;
}

/* 响应式 */
@media (max-width: 1024px) {
  .grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 768px) {
  .hero-grid, .grid-2 { grid-template-columns: 1fr; }
  .nav-toggle { display: inline-block; }
  .nav-list {
    position: absolute; right: 20px; top: 64px;
    background: var(--blue-800); border: 1px solid rgba(255,255,255,0.12);
    border-radius: 12px; padding: 12px;
    display: none; flex-direction: column; gap: 10px; min-width: 180px;
  }
  .nav-list.open { display: flex; }
  .cta-header { display: none; }
  .hero { padding: 72px 0; }
}

/* 降低动画对部分用户影响 */
@media (prefers-reduced-motion: reduce) {
  .slides { transition: none; }
  .btn, .nav-list a { transition: none; }
}
// script.js

// 年份更新
document.getElementById('year').textContent = new Date().getFullYear();

// 移动端导航开合
const navToggle = document.querySelector('[data-nav-toggle]');
const navList = document.querySelector('[data-nav-list]');
if (navToggle && navList) {
  navToggle.addEventListener('click', () => {
    const open = navList.classList.toggle('open');
    navToggle.setAttribute('aria-expanded', String(open));
  });
  // 点击导航项后收起菜单
  navList.addEventListener('click', (e) => {
    if (e.target.tagName === 'A') {
      navList.classList.remove('open');
      navToggle.setAttribute('aria-expanded', 'false');
    }
  });
}

// 简易轮播
(function initSlider() {
  const slider = document.querySelector('[data-slider]');
  if (!slider) return;
  const slidesEl = slider.querySelector('.slides');
  const slides = slider.querySelectorAll('.slide');
  const prev = slider.querySelector('[data-prev]');
  const next = slider.querySelector('[data-next]');
  let index = 0;

  function update() {
    slidesEl.style.transform = `translateX(-${index * 100}%)`;
  }
  prev.addEventListener('click', () => {
    index = (index - 1 + slides.length) % slides.length;
    update();
  });
  next.addEventListener('click', () => {
    index = (index + 1) % slides.length;
    update();
  });
  // 自动播放
  let autoplay = setInterval(() => {
    index = (index + 1) % slides.length;
    update();
  }, 5000);
  slider.addEventListener('mouseenter', () => clearInterval(autoplay));
  slider.addEventListener('mouseleave', () => {
    autoplay = setInterval(() => {
      index = (index + 1) % slides.length;
      update();
    }, 5000);
  });
})();

// 弹窗逻辑
const modal = document.getElementById('quoteModal');
function openModal() {
  modal.classList.add('open');
  modal.setAttribute('aria-hidden', 'false');
  const input = modal.querySelector('input, select, textarea, button');
  input && input.focus();
}
function closeModal() {
  modal.classList.remove('open');
  modal.setAttribute('aria-hidden', 'true');
}
document.querySelectorAll('[data-open-modal]').forEach(btn => {
  btn.addEventListener('click', (e) => {
    const target = btn.getAttribute('data-open-modal');
    if (target === '#quoteModal') openModal();
  });
});
document.querySelectorAll('[data-close-modal]').forEach(el => {
  el.addEventListener('click', closeModal);
});
document.addEventListener('keydown', (e) => {
  if (e.key === 'Escape' && modal.classList.contains('open')) closeModal();
});

// 表单处理(线索收集)
const leadForms = document.querySelectorAll('form[data-lead-form]');
leadForms.forEach(form => {
  const statusEl = form.querySelector('.form-status');
  form.addEventListener('submit', async (e) => {
    e.preventDefault();
    const data = {
      name: form.name?.value?.trim(),
      phone: form.phone?.value?.trim(),
      budget: form.budget?.value,
      desc: form.desc?.value?.trim() || ''
    };

    // 基础校验
    let errors = [];
    if (!data.name) errors.push('请输入姓名');
    if (!data.phone) errors.push('请输入电话');
    if (!data.budget) errors.push('请选择预算区间');
    const phonePattern = /^(\+?\d{1,4}[-\s]?)?(\d{7,13})$/;
    if (data.phone && !phonePattern.test(data.phone)) errors.push('电话格式不正确');

    if (errors.length) {
      statusEl.textContent = errors.join(';');
      statusEl.style.color = '#C62828';
      return;
    }

    // 本地存储(示例)
    try {
      const leads = JSON.parse(localStorage.getItem('leads') || '[]');
      leads.push({ ...data, ts: Date.now() });
      localStorage.setItem('leads', JSON.stringify(leads));
    } catch (err) {
      // 忽略本地存储错误
    }

    // 可选:发送到后端(若部署时设置 window.LEAD_ENDPOINT)
    // 在部署中将 window.LEAD_ENDPOINT 指向后端/表单服务地址,如:
    // window.LEAD_ENDPOINT = 'https://api.example.com/leads';
    if (window.LEAD_ENDPOINT) {
      try {
        const resp = await fetch(window.LEAD_ENDPOINT, {
          method: 'POST',
          headers: { 'Content-Type': 'application/json' },
          body: JSON.stringify(data)
        });
        if (!resp.ok) throw new Error('提交失败');
      } catch (err) {
        statusEl.textContent = '网络提交失败,已本地记录。';
        statusEl.style.color = '#C62828';
        return;
      }
    }

    statusEl.textContent = '提交成功!我们将尽快与您联系。';
    statusEl.style.color = '#2D9CDB';
    form.reset();

    // 若在弹窗中提交,自动关闭
    if (form.closest('.modal')) {
      setTimeout(closeModal, 600);
    }
  });
});

部署指南

  • 文件结构
    • 根目录包含 index.html、styles.css、script.js。
    • 可选:创建 assets 目录存放图片与图标。
  • 静态托管
    • 方案一:Vercel
      • 注册并安装Vercel CLI或通过Web导入仓库。
      • 项目类型选择“Other”,直接部署静态文件。
    • 方案二:Netlify
      • 连接Git仓库;构建命令留空,发布目录为根目录。
      • 如需内置表单处理,可在Netlify配置表单收集服务,或在script.js中设置window.LEAD_ENDPOINT为Netlify Functions地址。
    • 方案三:GitHub Pages
      • 创建仓库并推送代码;在仓库设置中启用Pages,选择主分支根目录。
  • 域名与HTTPS
    • 在托管平台绑定自有域名,启用自动HTTPS。
  • 线索收集对接
    • 若无后端服务,先使用本地存储记录;正式上线建议接入:
      • Serverless函数(Vercel/Netlify Functions)提供POST /leads接口。
      • 第三方表单服务(如Web3Forms、Getform),将其端点赋值给window.LEAD_ENDPOINT。
  • 性能与SEO基础
    • 设置页面title与meta description(已配置)。
    • 提交站点地图与Robots(可后续补充)。
    • 压缩与优化图片资源(SVG已轻量)。
  • 测试
    • 在Chrome、Safari、Firefox、Edge进行兼容性检查。
    • 移动端(iOS/Android)触屏交互与弹窗验证。

优化建议

  • 内容管理:接入轻量CMS(如Netlify CMS、Contentful),便于非技术人员更新产品与反馈内容。
  • 线索管理:与CRM(如HubSpot、Zoho)打通表单数据,实现自动化跟进与统计。
  • 数据分析:接入分析工具(如Google Analytics、umami),跟踪CTA点击率与表单转化。
  • 可访问性增强:增加键盘焦点圈与弹窗焦点陷阱、提供更详细的aria标签与表单错误提示关联。
  • 组件扩展:增加常见问题(FAQ)、团队介绍与案例模块,丰富信任度与转化路径。
  • 性能优化:启用HTTP缓存策略、CSS与JS压缩、图片懒加载;引入Critical CSS以提升首屏渲染。
  • SEO细化:结构化数据(Organization、Product)、开放图像(og:image),完善站点地图与页面级关键词策略。

网站设计方案

  • 设计语言与风格
    • 亮色渐变为主背景(从浅蓝到紫的细腻过渡),前景采用轻卡片风格:柔和阴影、圆角、1px 分隔线与足够留白,体现“预发布/新鲜感”的轻盈质感
    • 移动优先:单栏信息流 + 底部固定 CTA,在平板与桌面分辨率下扩展为双/三栏网格
    • 模块化段落:Hero/价值主张、功能亮点、路线图时间轴、FAQ、报名与预约表单、社媒关注独立模块,可自由增删和复用
    • 深浅双主题:CSS 变量驱动 + prefers-color-scheme 适配;提供一键快速切换与键盘快捷键 t
  • 体验与交互
    • 小流量实验:内置轻量 A/B 文案实验(URL 参数 variant 或 v 控制;默认均匀分流),曝光与转化在本地持久化并可导出 CSV
    • 报名与预约入口:主按钮“立即报名,抢先体验”,同一表单包含邮箱、公司规模、使用场景;提交后显示感谢状态并记录转化
    • 可达性:语义化 HTML、可聚焦态、对比度适配深浅主题、aria 属性与可键盘操作的导航/折叠
  • 技术与实现
    • 纯前端,无依赖框架;语义化 HTML + 原生 CSS/JS
    • 响应式布局(flex/grid)、CSS 变量主题、轻量动画;无阻塞渲染
    • 可配置数据上报端点(通过 meta[name="form-endpoint"]),默认使用 localStorage 存储与导出

网站结构图

  • 首页 /
    • 头部导航
      • 品牌标识
      • 导航:功能亮点、路线图、FAQ、报名预约
      • 主题切换按钮
      • 移动端菜单
    • Hero/价值主张
      • 一句话价值主张(A/B 实验)
      • 辅助说明
      • CTA:立即报名、预约滚动
      • 隐私提示
    • 功能亮点(5 条)
    • 路线图时间轴(简版)
    • FAQ(6 条,可折叠)
    • 报名与预约表单
      • 邮箱
      • 公司规模
      • 使用场景
      • 同意隐私勾选
      • 提交后感谢状态
    • 社媒关注入口
    • 页脚
      • 导出实验数据
      • 版权
    • 隐私政策弹窗(Modal)

核心代码实现

<!doctype html>
<html lang="zh-CN" data-theme="auto">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>新产品预发布 | 报名与预约</title>
  <meta name="description" content="用数据驱动的预发布页,快速验证核心卖点并沉淀早期用户。" />
  <!-- 可选:配置表单上报端点:例如 https://example.com/api/lead -->
  <meta name="form-endpoint" content="" />
  <style>
    :root {
      --bg: #f7f9fc;
      --surface: #ffffff;
      --text: #111827;
      --muted: #6b7280;
      --primary: #5b7cfa;
      --primary-600: #4c6af5;
      --primary-700: #3f5ae6;
      --ring: rgba(91,124,250,0.35);
      --border: #e5e7eb;
      --success: #10b981;
      --warning: #f59e0b;
      --danger: #ef4444;
      --gradient: linear-gradient(135deg, #b3d2ff 0%, #e0c6ff 50%, #ffe3f3 100%);
      --shadow-sm: 0 1px 2px rgba(0,0,0,0.06);
      --shadow-md: 0 6px 24px rgba(0,0,0,0.08);
      --radius: 14px;
      --radius-sm: 10px;
      color-scheme: light dark;
    }
    @media (prefers-color-scheme: dark) {
      :root {
        --bg: #0b1020;
        --surface: #121937;
        --text: #e5e7eb;
        --muted: #a3a8b3;
        --primary: #7ea1ff;
        --primary-600: #7091ff;
        --primary-700: #5f7af5;
        --ring: rgba(126,161,255,0.35);
        --border: #20274b;
        --gradient: linear-gradient(135deg, #1a2448 0%, #2d1f49 50%, #3a1e34 100%);
        --shadow-sm: 0 1px 2px rgba(0,0,0,0.35);
        --shadow-md: 0 10px 30px rgba(0,0,0,0.35);
      }
    }
    html[data-theme="light"] {
      --bg: #f7f9fc;
      --surface: #ffffff;
      --text: #111827;
      --muted: #6b7280;
      --primary: #5b7cfa;
      --primary-600: #4c6af5;
      --primary-700: #3f5ae6;
      --ring: rgba(91,124,250,0.35);
      --border: #e5e7eb;
      --gradient: linear-gradient(135deg, #b3d2ff 0%, #e0c6ff 50%, #ffe3f3 100%);
      --shadow-sm: 0 1px 2px rgba(0,0,0,0.06);
      --shadow-md: 0 6px 24px rgba(0,0,0,0.08);
    }
    html[data-theme="dark"] {
      --bg: #0b1020;
      --surface: #121937;
      --text: #e5e7eb;
      --muted: #a3a8b3;
      --primary: #7ea1ff;
      --primary-600: #7091ff;
      --primary-700: #5f7af5;
      --ring: rgba(126,161,255,0.35);
      --border: #20274b;
      --gradient: linear-gradient(135deg, #1a2448 0%, #2d1f49 50%, #3a1e34 100%);
      --shadow-sm: 0 1px 2px rgba(0,0,0,0.35);
      --shadow-md: 0 10px 30px rgba(0,0,0,0.35);
    }

    * { box-sizing: border-box; }
    html, body { height: 100%; }
    body {
      margin: 0;
      font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
      color: var(--text);
      background: var(--bg);
      line-height: 1.6;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
    }

    .gradient-bg {
      position: absolute; inset: 0; z-index: -1;
      background: var(--gradient);
      opacity: 0.5;
      filter: blur(60px) saturate(1.2);
    }

    .container {
      width: 100%;
      max-width: 1160px;
      padding: 0 16px;
      margin: 0 auto;
    }

    header.site-header {
      position: sticky; top: 0; z-index: 50;
      backdrop-filter: saturate(1.2) blur(10px);
      background: color-mix(in oklab, var(--surface) 75%, transparent);
      border-bottom: 1px solid var(--border);
    }
    .nav {
      display: flex; align-items: center; justify-content: space-between;
      height: 64px;
    }
    .brand { display: flex; align-items: center; gap: 10px; font-weight: 700; }
    .brand .logo {
      width: 28px; height: 28px; border-radius: 8px;
      background: linear-gradient(135deg, var(--primary), #9a7bff);
      box-shadow: var(--shadow-sm);
    }
    .nav-links {
      display: none; gap: 20px; align-items: center;
    }
    .nav-links a {
      color: var(--text); text-decoration: none; font-weight: 500;
    }
    .nav-actions { display: flex; align-items: center; gap: 10px; }
    .btn, button.btn {
      appearance: none; cursor: pointer; user-select: none;
      border: 1px solid color-mix(in oklab, var(--primary) 30%, var(--border));
      background: linear-gradient(180deg, var(--primary), var(--primary-600));
      color: #fff; padding: 10px 14px; border-radius: 999px;
      box-shadow: 0 8px 18px rgba(91,124,250,0.25);
      font-weight: 600; transition: transform .05s ease, box-shadow .2s ease;
    }
    .btn:hover { box-shadow: 0 10px 22px rgba(91,124,250,0.32); }
    .btn:active { transform: translateY(1px); }
    .btn-outline {
      background: transparent; color: var(--text);
      border: 1px solid var(--border); box-shadow: var(--shadow-sm);
    }
    .btn-ghost {
      background: transparent; border: 1px solid transparent; color: var(--text);
    }

    .icon-btn {
      border: 1px solid var(--border);
      background: color-mix(in oklab, var(--surface) 85%, transparent);
      color: var(--text); width: 40px; height: 40px; border-radius: 999px;
      display: inline-flex; align-items: center; justify-content: center;
      box-shadow: var(--shadow-sm);
    }

    .hamburger { display: inline-flex; }
    @media (min-width: 900px) {
      .nav-links { display: flex; }
      .hamburger { display: none; }
    }

    .mobile-menu {
      display: none; border-top: 1px solid var(--border);
      background: var(--surface);
    }
    .mobile-menu.open { display: block; }
    .mobile-menu a { display: block; padding: 14px 0; color: var(--text); text-decoration: none; }

    .hero {
      position: relative; padding: 36px 0 24px;
    }
    .hero-card {
      position: relative; overflow: hidden;
      background: color-mix(in oklab, var(--surface) 85%, transparent);
      border: 1px solid var(--border);
      border-radius: var(--radius);
      box-shadow: var(--shadow-md);
      padding: 22px;
    }
    @media (min-width: 900px) {
      .hero { padding: 64px 0 40px; }
      .hero-card { padding: 42px; }
    }
    .kicker { color: var(--primary); font-weight: 700; letter-spacing: .08em; font-size: 12px; text-transform: uppercase; }
    .hero-title { font-size: 26px; line-height: 1.2; margin: 8px 0 10px; font-weight: 800; }
    .hero-sub { color: var(--muted); font-size: 16px; margin-bottom: 16px; }
    @media (min-width: 900px) {
      .hero-title { font-size: 42px; }
      .hero-sub { font-size: 18px; }
    }
    .hero-ctas { display: flex; gap: 10px; flex-wrap: wrap; }
    .legal { font-size: 12px; color: var(--muted); margin-top: 8px; }

    .section { padding: 28px 0; }
    @media (min-width: 900px) { .section { padding: 48px 0; } }
    .section-title { font-size: 22px; font-weight: 800; margin-bottom: 14px; }
    .section-sub { color: var(--muted); margin-bottom: 18px; }

    .grid {
      display: grid; gap: 12px;
      grid-template-columns: 1fr;
    }
    @media (min-width: 700px) { .grid-2 { grid-template-columns: repeat(2, 1fr); } }
    @media (min-width: 1000px) { .grid-3 { grid-template-columns: repeat(3, 1fr); } }
    .card {
      background: var(--surface);
      border: 1px solid var(--border);
      border-radius: var(--radius-sm);
      box-shadow: var(--shadow-sm);
      padding: 16px;
    }
    .feature { display: flex; gap: 12px; }
    .feature .ico {
      width: 40px; height: 40px; border-radius: 10px;
      display: inline-flex; align-items: center; justify-content: center;
      background: color-mix(in oklab, var(--primary) 12%, transparent);
      color: var(--primary);
    }
    .feature h3 { margin: 0 0 6px; font-size: 16px; }
    .feature p { margin: 0; color: var(--muted); font-size: 14px; }

    .timeline { position: relative; }
    .timeline::before {
      content: ""; position: absolute; left: 14px; top: 0; bottom: 0; width: 2px;
      background: var(--border);
    }
    .t-item { position: relative; padding-left: 40px; margin-bottom: 16px; }
    .t-item::before {
      content: ""; position: absolute; left: 6px; top: 4px; width: 16px; height: 16px; border-radius: 999px;
      background: var(--surface); border: 2px solid var(--primary);
      box-shadow: 0 0 0 4px color-mix(in oklab, var(--primary) 15%, transparent);
    }
    .t-item h4 { margin: 0 0 4px; }
    .t-item p { margin: 0; color: var(--muted); }

    details.faq { border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); padding: 10px 12px; }
    details.faq + details.faq { margin-top: 10px; }
    details.faq[open] { box-shadow: var(--shadow-sm); }
    summary { cursor: pointer; list-style: none; font-weight: 600; }
    summary::-webkit-details-marker { display: none; }
    .faq p { color: var(--muted); margin: 8px 0 0; }

    .form {
      display: grid; gap: 12px;
    }
    .input, select, textarea {
      width: 100%; padding: 12px 12px;
      border: 1px solid var(--border); border-radius: 10px;
      background: color-mix(in oklab, var(--surface) 90%, transparent);
      color: var(--text);
      outline: none;
      transition: border-color .2s ease, box-shadow .2s ease;
    }
    .input:focus, select:focus, textarea:focus {
      border-color: var(--primary);
      box-shadow: 0 0 0 4px var(--ring);
    }
    .assist { font-size: 12px; color: var(--muted); }
    .error { color: var(--danger); font-size: 12px; }

    .success {
      border: 1px solid color-mix(in oklab, var(--success) 40%, var(--border));
      background: color-mix(in oklab, var(--success) 8%, var(--surface));
      color: var(--text);
      padding: 12px; border-radius: var(--radius-sm);
    }

    .socials { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
    .socials a {
      display: inline-flex; align-items: center; gap: 8px; text-decoration: none;
      color: var(--text); padding: 8px 10px; border: 1px solid var(--border); border-radius: 999px;
      background: color-mix(in oklab, var(--surface) 85%, transparent);
    }

    footer {
      padding: 24px 0; border-top: 1px solid var(--border); margin-top: 24px;
      background: color-mix(in oklab, var(--surface) 80%, transparent);
    }

    .sticky-cta {
      position: sticky; bottom: 10px; z-index: 40; pointer-events: none;
    }
    .sticky-cta .wrap {
      pointer-events: auto; display: flex; justify-content: center;
    }
    .sticky-cta .wrap .btn { box-shadow: 0 10px 24px rgba(91,124,250,0.35); }

    .modal {
      position: fixed; inset: 0; display: none; align-items: center; justify-content: center; z-index: 60;
      background: rgba(0,0,0,0.35);
    }
    .modal.open { display: flex; }
    .modal .dialog {
      max-width: 680px; width: calc(100% - 32px);
      background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius);
      box-shadow: var(--shadow-md); padding: 18px;
    }
    .modal .dialog h3 { margin-top: 0; }
  </style>
</head>
<body>
  <div class="gradient-bg" aria-hidden="true"></div>

  <header class="site-header" role="banner">
    <div class="container nav">
      <div class="brand">
        <div class="logo" aria-hidden="true"></div>
        <a href="#" aria-label="返回首页" style="text-decoration:none; color:inherit;">预发布实验室</a>
      </div>
      <nav class="nav-links" aria-label="主导航">
        <a href="#features">功能亮点</a>
        <a href="#roadmap">路线图</a>
        <a href="#faq">FAQ</a>
        <a href="#signup">报名预约</a>
      </nav>
      <div class="nav-actions">
        <button class="icon-btn" id="themeToggle" aria-label="切换主题" title="切换主题 (T)">
          <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M21.64,13a9,9,0,1,1-10.63-10A1,1,0,0,1,12,4a7,7,0,1,0,8,8A1,1,0,0,1,21.64,13Z"/></svg>
        </button>
        <a href="#signup" class="btn" aria-label="立即报名">立即报名</a>
        <button class="icon-btn hamburger" id="menuToggle" aria-label="展开菜单">
          <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M3 6h18v2H3zM3 11h18v2H3zM3 16h18v2H3z"/></svg>
        </button>
      </div>
    </div>
    <div class="mobile-menu" id="mobileMenu" aria-label="移动菜单">
      <div class="container">
        <a href="#features" onclick="closeMenu()">功能亮点</a>
        <a href="#roadmap" onclick="closeMenu()">路线图</a>
        <a href="#faq" onclick="closeMenu()">FAQ</a>
        <a href="#signup" onclick="closeMenu()">报名预约</a>
      </div>
    </div>
  </header>

  <main id="main">
    <section class="hero" id="hero">
      <div class="container">
        <div class="hero-card">
          <div class="kicker">预发布 · 文案实验 · 早期用户</div>
          <h1 class="hero-title" id="vpTitle">让团队在一周内验证产品卖点</h1>
          <p class="hero-sub" id="vpSub">用数据驱动的预发布页,快速沉淀愿意尝鲜的真实用户线索。</p>
          <div class="hero-ctas">
            <a href="#signup" class="btn" id="ctaPrimary">立即报名,抢先体验</a>
            <a href="#signup" class="btn btn-outline">预约演示</a>
          </div>
          <div class="legal">
            提交即表示同意《<a href="#" id="openPolicy">隐私政策</a>》,我们仅用于与产品相关的联络,可随时退订。
          </div>
        </div>
      </div>
    </section>

    <section class="section" id="features">
      <div class="container">
        <h2 class="section-title">功能亮点</h2>
        <p class="section-sub">围绕“验证—学习—迭代”的最小闭环设计,助你以更小的代价找到真正的产品共鸣点。</p>
        <div class="grid grid-3">
          <div class="card feature">
            <div class="ico" aria-hidden="true">
              <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M4 5h16v2H4zM4 11h16v2H4zM4 17h10v2H4z"/></svg>
            </div>
            <div>
              <h3>模块化预发布页</h3>
              <p>亮色渐变 + 轻卡片模块,移动优先,几分钟搭建发布。</p>
            </div>
          </div>
          <div class="card feature">
            <div class="ico" aria-hidden="true">
              <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M12 3v18M3 12h18"/></svg>
            </div>
            <div>
              <h3>多版本文案实验</h3>
              <p>URL 参数或自动分流,记录曝光与转化,一键导出 CSV。</p>
            </div>
          </div>
          <div class="card feature">
            <div class="ico" aria-hidden="true">
              <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M4 4h16v10H4zM2 18h20v2H2z"/></svg>
            </div>
            <div>
              <h3>报名与预约一体</h3>
              <p>邮箱、公司规模、使用场景统一采集,提交后即时反馈。</p>
            </div>
          </div>
          <div class="card feature">
            <div class="ico" aria-hidden="true">
              <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2a10 10 0 100 20 10 10 0 000-20z"/></svg>
            </div>
            <div>
              <h3>深浅双主题</h3>
              <p>支持系统偏好与快速切换,视觉一致,减少视觉疲劳。</p>
            </div>
          </div>
          <div class="card feature">
            <div class="ico" aria-hidden="true">
              <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M3 12l7 7 11-11"/></svg>
            </div>
            <div>
              <h3>无侵入轻量分析</h3>
              <p>本地持久化,不依赖外部脚本;可对接 Webhook 与自建端点。</p>
            </div>
          </div>
        </div>
      </div>
    </section>

    <section class="section" id="roadmap">
      <div class="container">
        <h2 class="section-title">简版路线图</h2>
        <p class="section-sub">从内测到公开发布,持续围绕“验证效率”和“增长闭环”迭代。</p>
        <div class="timeline">
          <div class="t-item">
            <h4>10 月 · 内测邀请</h4>
            <p>首批种子用户加入,验证报名与预约流程、文案实验稳定性。</p>
          </div>
          <div class="t-item">
            <h4>11 月 · 自定义域名 & Webhook</h4>
            <p>支持表单 Webhook,对接飞书/Slack;自定义域名与 HTTPS。</p>
          </div>
          <div class="t-item">
            <h4>12 月 · 组件市场 Beta</h4>
            <p>可视化模块扩展:社会证明、倒计时、用例库、媒体引用。</p>
          </div>
          <div class="t-item">
            <h4>1 月 · 多臂老虎机实验</h4>
            <p>在小流量下提升收敛速度;自动暂停表现不佳的版本。</p>
          </div>
          <div class="t-item">
            <h4>2 月 · 消息集成</h4>
            <p>线索自动同步到 CRM,触发欢迎邮件与预约提醒。</p>
          </div>
        </div>
      </div>
    </section>

    <section class="section" id="faq">
      <div class="container">
        <h2 class="section-title">FAQ</h2>
        <div>
          <details class="faq">
            <summary>如何进行文案 A/B 实验?</summary>
            <p>默认均匀分流;也可用 URL 参数 ?variant=a/b/c 或 ?v=b 指定版本。系统记录曝光与提交作为转化。</p>
          </details>
          <details class="faq">
            <summary>我的数据存在哪里?</summary>
            <p>默认保存在本地浏览器(localStorage),你可一键导出 CSV 或配置表单端点进行服务端接收。</p>
          </details>
          <details class="faq">
            <summary>支持哪些表单字段?能否自定义?</summary>
            <p>内置邮箱、公司规模、使用场景。后续版本支持自定义字段与验证规则。</p>
          </details>
          <details class="faq">
            <summary>是否收费?</summary>
            <p>内测期间免费。公测后提供免费版与专业版(包含多臂实验、Webhook、团队协作)。</p>
          </details>
          <details class="faq">
            <summary>可以随时退订吗?</summary>
            <p>可以。邮件页脚提供退订入口,我们严格遵守隐私与反骚扰规范。</p>
          </details>
          <details class="faq">
            <summary>遇到问题如何联系支持?</summary>
            <p>通过页脚社媒与我们联系,或在提交表单后回复确认邮件。</p>
          </details>
        </div>
      </div>
    </section>

    <section class="section" id="signup">
      <div class="container">
        <div class="grid grid-2">
          <div class="card">
            <h2 class="section-title" style="margin-bottom:8px">报名与预约</h2>
            <p class="section-sub">留下你的信息,我们将在开放名额时第一时间通知并提供预约演示。</p>
            <form id="leadForm" class="form" novalidate>
              <div>
                <label for="email">邮箱</label>
                <input id="email" name="email" type="email" class="input" placeholder="you@company.com" required />
                <div class="assist">用于发送内测邀请与预约确认。</div>
                <div class="error" data-error-for="email"></div>
              </div>
              <div>
                <label for="size">公司规模</label>
                <select id="size" name="company_size" required>
                  <option value="">请选择</option>
                  <option>1-10</option>
                  <option>11-50</option>
                  <option>51-200</option>
                  <option>200+</option>
                </select>
                <div class="error" data-error-for="size"></div>
              </div>
              <div>
                <label for="usecase">使用场景</label>
                <textarea id="usecase" name="use_case" rows="4" placeholder="例如:验证新功能卖点;收集等待名单;活动报名等" required></textarea>
                <div class="error" data-error-for="usecase"></div>
              </div>
              <div>
                <label style="display:flex; align-items:center; gap:8px;">
                  <input id="consent" type="checkbox" required />
                  我已阅读并同意隐私政策,仅用于与本产品相关的联络
                </label>
                <div class="assist">我们不会出售或出租你的信息,可随时退订。</div>
                <div class="error" data-error-for="consent"></div>
              </div>
              <input type="hidden" name="variant" id="variantField" />
              <input type="hidden" name="timestamp" id="tsField" />
              <div style="display:flex; gap:10px; flex-wrap:wrap; align-items:center;">
                <button type="submit" class="btn" id="submitBtn">提交报名</button>
                <span class="assist">提交即同意《<a href="#" id="openPolicy2">隐私政策</a>》</span>
              </div>
              <div id="formMsg" style="display:none; margin-top:10px;" class="success" role="status" aria-live="polite">
                感谢提交!我们已记录你的预约,稍后将通过邮箱与您联系。
              </div>
            </form>
          </div>
          <div class="card">
            <h3 style="margin-top:0;">关注我们</h3>
            <p class="section-sub">获取最新路线图进展与内测名额开放时间。</p>
            <div class="socials">
              <a href="https://x.com" target="_blank" rel="noopener">
                <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M20 3l-7.5 9.5L20 21h-2.5L12 14.5 7 21H4l7.5-9.5L4 3h2.5L12 9.5 16.5 3H20z"/></svg>
                X
              </a>
              <a href="https://www.linkedin.com" target="_blank" rel="noopener">
                <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M6 6h3v12H6zM7.5 3A1.5 1.5 0 1 1 6 4.5 1.5 1.5 0 0 1 7.5 3zM11 9h3v1.7h.1A3.3 3.3 0 0 1 17 8.9c2 0 3 1.3 3 3.9V18h-3v-4c0-1.2-.4-2-1.5-2s-1.5.9-1.5 2v4h-3z"/></svg>
                LinkedIn
              </a>
              <a href="https://github.com" target="_blank" rel="noopener">
                <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 .5a12 12 0 0 0-3.8 23.4c.6.1.8-.2.8-.5v-1.8c-3.3.7-4-1.6-4-1.6-.6-1.6-1.5-2-1.5-2-1.2-.8.1-.8.1-.8 1.3.1 2 1.3 2 1.3 1.1 2 3 1.4 3.7 1 .1-.8.4-1.4.8-1.8-2.6-.3-5.3-1.3-5.3-6a4.7 4.7 0 0 1 1.2-3.3 4.4 4.4 0 0 1 .1-3.3s1-.3 3.4 1.2a11.7 11.7 0 0 1 6.2 0C17 5.7 18 6 18 6a4.4 4.4 0 0 1 .1 3.3 4.7 4.7 0 0 1 1.2 3.3c0 4.7-2.7 5.7-5.3 6 .5.4.9 1.2.9 2.4v3.5c0 .3.2.7.8.5A12 12 0 0 0 12 .5z"/></svg>
                GitHub
              </a>
              <a href="#" aria-label="微信二维码">
                <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M8 3a7 7 0 100 14l.5-.1L7 20l3-2a8 8 0 109-7c0-4.4-4-8-9-8H8z"/></svg>
                微信
              </a>
            </div>
            <div style="margin-top:16px;">
              <button id="exportCsv" class="btn btn-outline">导出实验数据 CSV</button>
              <div class="assist" style="margin-top:8px;">包含版本曝光与表单转化,便于小流量验证与复盘。</div>
            </div>
          </div>
        </div>
      </div>
    </section>

    <div class="sticky-cta" aria-hidden="true">
      <div class="container wrap">
        <a href="#signup" class="btn">立即报名</a>
      </div>
    </div>
  </main>

  <footer role="contentinfo">
    <div class="container" style="display:flex; justify-content:space-between; gap:12px; flex-wrap:wrap;">
      <div class="assist">© <span id="year"></span> 预发布实验室 · All rights reserved.</div>
      <div class="assist">深浅主题 · 移动优先 · 模块化段落</div>
    </div>
  </footer>

  <!-- 隐私政策弹窗 -->
  <div class="modal" id="policyModal" role="dialog" aria-modal="true" aria-labelledby="policyTitle" aria-hidden="true">
    <div class="dialog">
      <div style="display:flex; justify-content:space-between; align-items:center;">
        <h3 id="policyTitle" style="margin:0;">隐私政策(简版)</h3>
        <button class="icon-btn" id="closePolicy" aria-label="关闭">
          <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M6 6l12 12M18 6L6 18"/></svg>
        </button>
      </div>
      <p class="assist">我们仅收集用于联系与产品邀测的必要信息(邮箱、公司规模与使用场景)。我们不会出售或出租你的数据;如需删除,请通过提交的邮箱联系我们。提交表单即表示同意接收与本产品相关的邮件,可随时退订。</p>
    </div>
  </div>

  <script>
    // 实验与主题配置
    const EXPERIMENT_ID = 'vp_v1';
    const VARIANTS = {
      a: {
        title: '让团队在一周内验证产品卖点',
        sub: '用数据驱动的预发布页,快速沉淀愿意尝鲜的真实用户线索。',
        cta: '立即报名,抢先体验'
      },
      b: {
        title: '用预发布页捕捉首批愿意付费的用户',
        sub: '从曝光到转化的每一步都可度量,小流量也能科学决策。',
        cta: '获取内测名额'
      },
      c: {
        title: '把想法变成可验证的报名线索',
        sub: '零开发上线,迭代文案与卖点,快速找到产品共鸣点。',
        cta: '开始验证'
      }
    };

    // 工具函数
    const $ = (sel, ctx=document) => ctx.querySelector(sel);
    const $$ = (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel));
    const storage = {
      get(k, def=null){ try { return JSON.parse(localStorage.getItem(k)) ?? def; } catch { return def; } },
      set(k,v){ localStorage.setItem(k, JSON.stringify(v)); },
      push(k,item){ const arr = storage.get(k, []); arr.push(item); storage.set(k, arr); }
    };

    // 主题切换:auto/light/dark
    const themeToggleBtn = $('#themeToggle');
    function applyTheme(mode) {
      if (mode === 'auto') {
        document.documentElement.setAttribute('data-theme', window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
      } else {
        document.documentElement.setAttribute('data-theme', mode);
      }
    }
    function initTheme() {
      const saved = storage.get('theme_mode', 'auto');
      applyTheme(saved);
    }
    themeToggleBtn.addEventListener('click', () => {
      const current = document.documentElement.getAttribute('data-theme');
      const next = current === 'light' ? 'dark' : 'light';
      storage.set('theme_mode', next);
      applyTheme(next);
    });
    document.addEventListener('keydown', (e) => {
      if (e.key.toLowerCase() === 't') themeToggleBtn.click();
    });

    // 菜单
    const mobileMenu = $('#mobileMenu');
    const menuToggle = $('#menuToggle');
    window.closeMenu = () => mobileMenu.classList.remove('open');
    menuToggle.addEventListener('click', () => mobileMenu.classList.toggle('open'));

    // 隐私弹窗
    const policyModal = $('#policyModal');
    const openPolicy = $('#openPolicy');
    const openPolicy2 = $('#openPolicy2');
    const closePolicy = $('#closePolicy');
    function openPolicyDialog(){ policyModal.classList.add('open'); policyModal.setAttribute('aria-hidden', 'false'); }
    function closePolicyDialog(){ policyModal.classList.remove('open'); policyModal.setAttribute('aria-hidden', 'true'); }
    [openPolicy, openPolicy2].forEach(el => el && el.addEventListener('click', (e)=>{ e.preventDefault(); openPolicyDialog(); }));
    closePolicy.addEventListener('click', closePolicyDialog);
    policyModal.addEventListener('click', (e)=>{ if (e.target === policyModal) closePolicyDialog(); });

    // A/B 实验初始化
    function pickVariant() {
      const url = new URL(location.href);
      const fromParam = url.searchParams.get('variant') || url.searchParams.get('v');
      const saved = storage.get('exp_'+EXPERIMENT_ID);
      if (fromParam && VARIANTS[fromParam]) return { key: fromParam, source: 'param' };
      if (saved && VARIANTS[saved.key]) return saved;
      const keys = Object.keys(VARIANTS);
      const key = keys[Math.floor(Math.random() * keys.length)];
      return { key, source: 'random' };
    }
    function applyVariant(key) {
      const v = VARIANTS[key];
      if (!v) return;
      $('#vpTitle').textContent = v.title;
      $('#vpSub').textContent = v.sub;
      $('#ctaPrimary').textContent = v.cta;
      $('#variantField').value = key;
      // 曝光计数
      const stats = storage.get('stats_'+EXPERIMENT_ID, { exposures:{}, conversions:{} });
      stats.exposures[key] = (stats.exposures[key] || 0) + 1;
      storage.set('stats_'+EXPERIMENT_ID, stats);
      storage.set('exp_'+EXPERIMENT_ID, { key, at: Date.now() });
    }

    // 表单提交
    const form = $('#leadForm');
    const formMsg = $('#formMsg');
    const submitBtn = $('#submitBtn');
    const endpoint = $('meta[name="form-endpoint"]')?.content?.trim();

    function validate() {
      let ok = true;
      const email = $('#email');
      const size = $('#size');
      const usecase = $('#usecase');
      const consent = $('#consent');
      const showErr = (id,msg)=>{ const el = document.querySelector('[data-error-for="'+id+'"]'); if (el) el.textContent = msg || ''; };

      showErr('email'); showErr('size'); showErr('usecase'); showErr('consent');

      if (!email.value || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.value)) {
        ok = false; showErr('email','请输入有效的邮箱地址');
      }
      if (!size.value) { ok = false; showErr('size','请选择公司规模'); }
      if (!usecase.value || usecase.value.trim().length < 5) { ok = false; showErr('usecase','请简单描述使用场景(不少于 5 个字)'); }
      if (!consent.checked) { ok = false; showErr('consent','提交前请勾选隐私同意'); }
      return ok;
    }

    async function submitLead(e) {
      e.preventDefault();
      if (!validate()) return;

      submitBtn.disabled = true; submitBtn.textContent = '提交中...';
      $('#tsField').value = new Date().toISOString();

      const payload = {
        email: $('#email').value.trim(),
        company_size: $('#size').value,
        use_case: $('#usecase').value.trim(),
        variant: $('#variantField').value,
        ts: $('#tsField').value,
        url: location.href,
        ua: navigator.userAgent
      };

      // 首先本地持久化
      storage.push('leads', payload);

      let ok = true;
      if (endpoint) {
        try {
          const res = await fetch(endpoint, {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify(payload)
          });
          ok = res.ok;
        } catch (err) { ok = false; }
      }

      // 统计转化
      const key = payload.variant || 'unknown';
      const stats = storage.get('stats_'+EXPERIMENT_ID, { exposures:{}, conversions:{} });
      stats.conversions[key] = (stats.conversions[key] || 0) + 1;
      storage.set('stats_'+EXPERIMENT_ID, stats);

      formMsg.style.display = 'block';
      if (!ok && endpoint) {
        formMsg.textContent = '已记录本地,服务器暂时不可达,我们稍后重试或请刷新后再试。';
      }

      // 重置表单并防止重复提交
      form.reset();
      submitBtn.textContent = '已提交';
    }

    // 导出 CSV
    function exportCSV() {
      const stats = storage.get('stats_'+EXPERIMENT_ID, { exposures:{}, conversions:{} });
      const leads = storage.get('leads', []);
      const lines = [];
      lines.push('type,key,value');
      Object.entries(stats.exposures).forEach(([k,v]) => lines.push(`exposure,${k},${v}`));
      Object.entries(stats.conversions).forEach(([k,v]) => lines.push(`conversion,${k},${v}`));
      lines.push('');
      lines.push('email,company_size,use_case,variant,ts,url,ua');
      leads.forEach(l => lines.push([l.email,l.company_size,`"${(l.use_case||'').replace(/"/g,'""')}"`,l.variant,l.ts,l.url,`"${(l.ua||'').replace(/"/g,'""')}"`].join(',')));
      const blob = new Blob([lines.join('\n')], { type: 'text/csv;charset=utf-8;' });
      const a = document.createElement('a');
      a.href = URL.createObjectURL(blob);
      a.download = `experiment_${EXPERIMENT_ID}_${new Date().toISOString().slice(0,10)}.csv`;
      a.click();
      URL.revokeObjectURL(a.href);
    }

    // 平滑滚动(原生行为已支持,兜底)
    $$('a[href^="#"]').forEach(a=>{
      a.addEventListener('click', (e)=>{
        const id = a.getAttribute('href').slice(1);
        if (!id) return;
        const el = document.getElementById(id);
        if (el) { e.preventDefault(); el.scrollIntoView({ behavior: 'smooth', block: 'start' }); }
      });
    });

    // 初始化
    (function init(){
      initTheme();
      const chosen = pickVariant();
      applyVariant(chosen.key);
      $('#year').textContent = new Date().getFullYear();
      form.addEventListener('submit', submitLead);
      $('#exportCsv').addEventListener('click', exportCSV);
      document.addEventListener('visibilitychange', () => {
        if (document.visibilityState === 'visible' && storage.get('theme_mode','auto')==='auto') applyTheme('auto');
      });
    })();
  </script>
</body>
</html>
/* 完整的CSS样式(与 HTML 内联样式一致,可拆分为 styles.css 使用)
   如果外链,请删除 HTML 中的 <style> 并在 <head> 引入本文件 */
:root { /* 变量见内联 CSS,同步内容略 */ }
// 必要的JavaScript代码(与 HTML 内联脚本一致,可拆分为 app.js 使用)
// 见 HTML 中 <script>,包含:主题切换、移动菜单、隐私弹窗、A/B 实验、表单提交与 CSV 导出。

部署指南

  • 本地预览
    • 将上述 HTML 保存为 index.html(已内联 CSS/JS,可直接双击或用任意静态服务器打开)
  • 静态托管
    • 任选其一:GitHub Pages、Vercel、Netlify、Cloudflare Pages、阿里云 OSS/腾讯云 COS
    • 新建仓库并推送项目;在平台创建站点,绑定自定义域名并开启 HTTPS
  • 可选:接入表单服务端
    • 在 中的 meta[name="form-endpoint"] 填入你的接收端点(HTTPS)
    • 端点需接受 POST application/json,建议返回 200/201
    • 生产环境建议在服务端增加验证码、人机验证或速率限制
  • 基础 SEO
    • 补充标题与描述中的产品关键字;为社媒分享添加 Open Graph 与 Twitter Card
  • 版本实验
    • 使用 ?variant=a 或 ?variant=b/c 固定版本;默认随机均分
    • 点击“导出实验数据 CSV”获取曝光与转化数据并分析转化率

优化建议

  • 数据对接
    • 开启 Webhook:报名成功后推送到 CRM/表格(Airtable/飞书表格/自建)
    • 邮件自动化:提交后发送欢迎邮件与预约日程(可用 Sendgrid/SES)
  • 组件扩展
    • 增加社会证明模块:Logo 墙、用户评价、媒体报道
    • 加入紧迫感组件:名额计数器、倒计时、最新更新
  • 实验能力
    • 支持多臂老虎机与停更机制;按会话/访客维度粘性分流
    • 为功能亮点与 CTA 文案引入细粒度实验位点
  • 用户体验
    • 表单实时校验与错误提示国际化;引入表单进度与懒加载输入提示
    • Lighthouse 优化:字体预加载、图片延迟加载、关键渲染路径压缩
  • 合规与隐私
    • 增加完整《隐私政策》《使用条款》独立页面
    • 提供数据导出与删除请求入口,支持 Do Not Track 标志

网站设计方案

  • 风格与配色:黑白极简为主,通用灰阶层次;主体文字采用深黑,分隔线与边框使用极细浅灰,卡片阴影柔和低调。
  • 排版与字号:大字号层级(标题使用超大字重、内容使用舒适阅读字号),宽松的行距与留白;中英文字体栈统一为系统无衬线。
  • 布局:响应式单页结构,顶部极简导航;主体区块包含自我介绍、服务项目、瀑布流作品集、案例、下载入口、报价与FAQ、联系信息。
  • 作品展示:瀑布流(Masonry)卡片,采用细线分隔与柔和阴影;悬浮微动效与卡片轻微上移。
  • 动效:低调动效,包括滚动进入淡入(IntersectionObserver)、导航切换、案例详情弹窗、FAQ折叠。
  • 适配:移动优先设计,断点调整列数与间距,保证中小屏阅读友好。

网站结构图

  • 首页
    • 导航
      • 关于我
      • 服务
      • 作品集
      • 案例
      • 下载作品集
      • 报价与FAQ
      • 联系方式
    • Hero(姓名与一句话定位)
    • 关于我(个人简介约50字)
    • 服务(品牌视觉 / 网页设计 / 插画)
    • 作品集(瀑布流作品卡片)
    • 案例(3则标题 + 一句话背景与结果,支持详情弹窗)
    • 下载作品集(打印或下载入口)
    • 报价说明(计费逻辑与区间)与常见问题(折叠项)
    • 联系方式(邮箱与社媒)
    • 页脚(版权与社媒)

核心代码实现

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width,initial-scale=1" />
  <title>极简作品集网站</title>
  <meta name="description" content="黑白极简,大字号版式的个人作品集与案例展示网站。" />
  <link rel="stylesheet" href="styles.css" />
</head>
<body>
  <header class="site-header reveal">
    <div class="container header-inner">
      <a href="#" class="logo" aria-label="主页">Design Studio</a>
      <button class="nav-toggle" aria-label="打开菜单" aria-expanded="false">☰</button>
      <nav class="site-nav" aria-label="主导航">
        <ul>
          <li><a href="#about">关于我</a></li>
          <li><a href="#services">服务</a></li>
          <li><a href="#portfolio">作品集</a></li>
          <li><a href="#cases">案例</a></li>
          <li><a href="#download">下载作品集</a></li>
          <li><a href="#pricing">报价与FAQ</a></li>
          <li><a href="#contact">联系</a></li>
        </ul>
      </nav>
    </div>
    <div class="divider"></div>
  </header>

  <main>
    <!-- Hero -->
    <section id="hero" class="section hero reveal">
      <div class="container">
        <h1 class="hero-title">黑白极简 · 品牌与网页设计</h1>
        <p class="hero-sub">以理性视觉与高效交付,快速把设计稿与素材转为可上线网站。</p>
      </div>
    </section>

    <!-- 关于我 -->
    <section id="about" class="section reveal">
      <div class="container">
        <h2 class="section-title">关于我</h2>
        <p class="intro">
          独立设计师,专注品牌与网页视觉,以简洁理性为核心,追求高效交付与一致体验,善于将复杂信息化繁为简。
        </p>
      </div>
      <div class="divider"></div>
    </section>

    <!-- 服务 -->
    <section id="services" class="section reveal">
      <div class="container">
        <h2 class="section-title">服务项目</h2>
        <div class="services">
          <div class="service-card">
            <h3>品牌视觉</h3>
            <p>标志与识别系统、规范手册、应用物料,统一品牌形象。</p>
          </div>
          <div class="service-card">
            <h3>网页设计</h3>
            <p>响应式官网、落地页与组件库,提升转化与信息清晰度。</p>
          </div>
          <div class="service-card">
            <h3>插画</h3>
            <p>用于产品叙事与社媒传播的风格化插画与图形元素。</p>
          </div>
        </div>
      </div>
      <div class="divider"></div>
    </section>

    <!-- 作品集 -->
    <section id="portfolio" class="section reveal">
      <div class="container">
        <h2 class="section-title">作品集</h2>
        <div class="portfolio-grid">
          <!-- 9个作品卡片,使用SVG占位图。替换为真实图片即可。 -->
          <article class="portfolio-item">
            <img alt="作品 01 占位图"
                 src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='600'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 01</text></svg>">
            <div class="item-info">
              <h3>作品 01</h3>
              <p>极简网页视觉探索</p>
            </div>
          </article>

          <article class="portfolio-item">
            <img alt="作品 02 占位图"
                 src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='1000'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 02</text></svg>">
            <div class="item-info">
              <h3>作品 02</h3>
              <p>品牌系统与版式</p>
            </div>
          </article>

          <article class="portfolio-item">
            <img alt="作品 03 占位图"
                 src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='700'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 03</text></svg>">
            <div class="item-info">
              <h3>作品 03</h3>
              <p>信息架构与组件</p>
            </div>
          </article>

          <article class="portfolio-item">
            <img alt="作品 04 占位图"
                 src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='650'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 04</text></svg>">
            <div class="item-info">
              <h3>作品 04</h3>
              <p>登陆页视觉</p>
            </div>
          </article>

          <article class="portfolio-item">
            <img alt="作品 05 占位图"
                 src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='900'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 05</text></svg>">
            <div class="item-info">
              <h3>作品 05</h3>
              <p>电商模块化UI</p>
            </div>
          </article>

          <article class="portfolio-item">
            <img alt="作品 06 占位图"
                 src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='600'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 06</text></svg>">
            <div class="item-info">
              <h3>作品 06</h3>
              <p>移动端交互草图</p>
            </div>
          </article>

          <article class="portfolio-item">
            <img alt="作品 07 占位图"
                 src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='720'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 07</text></svg>">
            <div class="item-info">
              <h3>作品 07</h3>
              <p>插画风格探索</p>
            </div>
          </article>

          <article class="portfolio-item">
            <img alt="作品 08 占位图"
                 src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='820'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 08</text></svg>">
            <div class="item-info">
              <h3>作品 08</h3>
              <p>图形语言与图标</p>
            </div>
          </article>

          <article class="portfolio-item">
            <img alt="作品 09 占位图"
                 src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='680'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 09</text></svg>">
            <div class="item-info">
              <h3>作品 09</h3>
              <p>动效与微交互</p>
            </div>
          </article>
        </div>
      </div>
      <div class="divider"></div>
    </section>

    <!-- 案例 -->
    <section id="cases" class="section reveal">
      <div class="container">
        <h2 class="section-title">案例</h2>
        <div class="cases">
          <article class="case-item" tabindex="0"
            data-title="初创咖啡品牌识别升级"
            data-detail="背景:门店扩张期品牌缺乏统一;结果:建立黑白主色与细线系统,线下转化提升20%。">
            <div class="case-head">
              <h3>初创咖啡品牌识别升级</h3>
            </div>
            <p class="case-summary">背景:门店扩张期品牌缺乏统一;结果:建立黑白主色与细线系统,线下转化提升20%。</p>
            <button class="case-more" aria-label="查看详情">查看详情</button>
          </article>

          <article class="case-item" tabindex="0"
            data-title="SaaS官网重设计"
            data-detail="背景:旧站信息冗杂;结果:重构导航与层级,跳出率下降35%。">
            <div class="case-head">
              <h3>SaaS官网重设计</h3>
            </div>
            <p class="case-summary">背景:旧站信息冗杂;结果:重构导航与层级,跳出率下降35%。</p>
            <button class="case-more" aria-label="查看详情">查看详情</button>
          </article>

          <article class="case-item" tabindex="0"
            data-title="插画内容营销"
            data-detail="背景:社媒曝光低;结果:系列插画引导分享,关注增长3倍。">
            <div class="case-head">
              <h3>插画内容营销</h3>
            </div>
            <p class="case-summary">背景:社媒曝光低;结果:系列插画引导分享,关注增长3倍。</p>
            <button class="case-more" aria-label="查看详情">查看详情</button>
          </article>
        </div>
      </div>
      <div class="divider"></div>
    </section>

    <!-- 下载作品集 -->
    <section id="download" class="section reveal">
      <div class="container">
        <h2 class="section-title">下载作品集</h2>
        <p class="download-desc">点击即可生成打印版视图,导出为PDF便于快速沟通与提交。</p>
        <div class="download-actions">
          <button id="downloadBtn" class="btn-primary">下载 PDF</button>
          <a class="btn-secondary" href="#portfolio">查看在线作品</a>
        </div>
      </div>
      <div class="divider"></div>
    </section>

    <!-- 报价与FAQ -->
    <section id="pricing" class="section reveal">
      <div class="container">
        <h2 class="section-title">报价说明与常见问题</h2>
        <div class="pricing">
          <h3>报价说明</h3>
          <p>以项目范围与交付内容计费:明确页面数量、模块复杂度、素材准备情况与时间要求。典型区间:品牌视觉基础包 8k–20k,官网设计(含基础前端实现)15k–40k,插画按幅计费 1k–5k/幅。</p>
          <p>支持里程碑分阶段交付与结算,价格包含一次完整风格确定与两轮常规修改(不含方向性大改)。</p>
        </div>
        <div class="faq">
          <div class="faq-item">
            <button class="faq-q" aria-expanded="false">交付流程</button>
            <div class="faq-a">需求梳理 → 风格板与信息架构 → 高保真页面 → 前端实现与测试 → 上线与验收。</div>
          </div>
          <div class="faq-item">
            <button class="faq-q" aria-expanded="false">设计周期</button>
            <div class="faq-a">小型项目约1–2周,中型项目2–4周,视素材与反馈效率而定。</div>
          </div>
          <div class="faq-item">
            <button class="faq-q" aria-expanded="false">版权与素材</button>
            <div class="faq-a">交付的自有作品版权归客户使用,第三方素材需合法授权并由双方确认。</div>
          </div>
          <div class="faq-item">
            <button class="faq-q" aria-expanded="false">付款与发票</button>
            <div class="faq-a">签约后预付30%,中期支付40%,验收后付尾款30%;可开具正规发票。</div>
          </div>
        </div>
      </div>
      <div class="divider"></div>
    </section>

    <!-- 联系 -->
    <section id="contact" class="section reveal">
      <div class="container">
        <h2 class="section-title">联系我</h2>
        <ul class="contact-list">
          <li>邮箱:<a href="mailto:hello@studio.example">hello@studio.example</a></li>
          <li>社媒:<a href="https://www.instagram.com/" target="_blank" rel="noopener">Instagram</a> · <a href="https://www.behance.net/" target="_blank" rel="noopener">Behance</a> · <a href="https://x.com/" target="_blank" rel="noopener">X</a></li>
        </ul>
      </div>
      <div class="divider"></div>
    </section>
  </main>

  <footer class="site-footer reveal">
    <div class="container footer-inner">
      <small>© 2025 Design Studio · 保留所有权利</small>
      <div class="footer-links">
        <a href="#about">关于</a>
        <span class="dot">·</span>
        <a href="#portfolio">作品</a>
        <span class="dot">·</span>
        <a href="#contact">联系</a>
      </div>
    </div>
  </footer>

  <!-- 案例弹窗 -->
  <div class="modal" id="caseModal" aria-hidden="true" role="dialog" aria-label="案例详情">
    <div class="modal-backdrop" data-close="true"></div>
    <div class="modal-content" role="document">
      <button class="modal-close" aria-label="关闭" data-close="true">×</button>
      <h3 id="modalTitle">案例标题</h3>
      <p id="modalDetail">案例详情</p>
    </div>
  </div>

  <script src="main.js" defer></script>
</body>
</html>
:root{
  --bg:#fff;
  --fg:#111;
  --muted:#666;
  --line:#e6e6e6;
  --shadow:0 6px 20px rgba(0,0,0,0.06);
  --radius:12px;
  --container:1100px;
  --sp-1:10px;
  --sp-2:16px;
  --sp-3:24px;
  --sp-4:36px;
  --sp-5:56px;
}

*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;background:var(--bg);color:var(--fg);
  font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  line-height:1.6;
}
img{display:block;max-width:100%;height:auto;border-radius:8px}
a{color:var(--fg);text-decoration:none}
a:hover{text-decoration:underline}
.container{width:100%;max-width:var(--container);padding:0 var(--sp-3);margin:0 auto}

.site-header{
  position:sticky;top:0;background:var(--bg);z-index:10;
}
.header-inner{
  display:flex;align-items:center;justify-content:space-between;
  padding:var(--sp-2) 0;
}
.logo{font-weight:700;font-size:20px;letter-spacing:.02em}
.nav-toggle{
  display:none;border:1px solid var(--line);background:#fff;border-radius:8px;padding:8px 10px;cursor:pointer;
}
.site-nav ul{display:flex;gap:18px;list-style:none;margin:0;padding:0}
.site-nav a{padding:8px 0}
.divider{height:1px;background:var(--line)}

.section{padding:var(--sp-5) 0}
.section-title{
  font-size:clamp(26px,4vw,40px);line-height:1.2;margin:0 0 var(--sp-3) 0;
  letter-spacing:.01em;
}
.hero{padding:calc(var(--sp-5) + 10px) 0}
.hero-title{font-size:clamp(36px,6vw,72px);line-height:1.1;margin:0 0 var(--sp-2) 0}
.hero-sub{font-size:clamp(16px,2.4vw,22px);color:var(--muted);max-width:800px}

.intro{font-size:clamp(16px,2.2vw,18px);max-width:800px}

.services{
  display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-3)
}
.service-card{
  border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-3);
  box-shadow:var(--shadow);transition:.25s ease transform, .25s ease box-shadow;
}
.service-card:hover{transform:translateY(-2px);box-shadow:0 10px 28px rgba(0,0,0,0.08)}
.service-card h3{margin:0 0 var(--sp-1) 0;font-size:20px}
.service-card p{margin:0;color:var(--muted)}

.portfolio-grid{
  column-count:3;column-gap:var(--sp-3)
}
.portfolio-item{
  break-inside:avoid;border:1px solid var(--line);border-radius:var(--radius);
  margin:0 0 var(--sp-3) 0;box-shadow:var(--shadow);overflow:hidden;
  transition:.25s ease transform, .25s ease box-shadow;
  background:#fff;
}
.portfolio-item:hover{transform:translateY(-2px);box-shadow:0 12px 32px rgba(0,0,0,0.08)}
.item-info{padding:var(--sp-2) var(--sp-3)}
.item-info h3{margin:0 0 6px 0;font-size:18px}
.item-info p{margin:0;color:var(--muted);font-size:15px}

.cases{
  display:grid;grid-template-columns:1fr;gap:var(--sp-3)
}
.case-item{
  border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-3);
  box-shadow:var(--shadow);background:#fff;
}
.case-head h3{margin:0 0 var(--sp-1) 0;font-size:20px}
.case-summary{margin:0 0 var(--sp-2) 0;color:var(--muted)}
.case-more{
  border:1px solid var(--line);border-radius:10px;padding:8px 12px;background:#fff;cursor:pointer;
  transition:.2s ease transform, .2s ease box-shadow;
}
.case-more:hover{transform:translateY(-1px);box-shadow:0 6px 16px rgba(0,0,0,0.07)}

.download-desc{color:var(--muted);max-width:720px}
.download-actions{display:flex;gap:var(--sp-2);flex-wrap:wrap;margin-top:var(--sp-2)}
.btn-primary{
  background:#111;color:#fff;border:1px solid #111;padding:12px 16px;border-radius:12px;cursor:pointer;
}
.btn-primary:hover{background:#000}
.btn-secondary{
  border:1px solid var(--line);padding:12px 16px;border-radius:12px;display:inline-block;
}

.pricing h3{margin:0 0 var(--sp-2) 0}
.pricing p{margin:0 0 var(--sp-2) 0;color:var(--muted)}
.faq{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.faq-item + .faq-item{border-top:1px solid var(--line)}
.faq-q{
  width:100%;text-align:left;padding:14px 16px;background:#fff;border:0;font-size:16px;cursor:pointer
}
.faq-a{padding:0 16px 16px 16px;color:var(--muted);display:none}
.faq-item.open .faq-a{display:block}
.faq-item.open .faq-q{font-weight:600}

.contact-list{list-style:none;padding:0;margin:0}
.contact-list li{margin-bottom:8px}

.site-footer{padding:var(--sp-4) 0}
.footer-inner{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.footer-links{display:flex;align-items:center;gap:10px}
.dot{color:#bbb}

.modal{position:fixed;inset:0;display:none}
.modal.show{display:block}
.modal-backdrop{position:absolute;inset:0;background:rgba(0,0,0,0.25)}
.modal-content{
  position:relative;max-width:720px;margin:8vh auto;background:#fff;border:1px solid var(--line);
  border-radius:16px;box-shadow:0 18px 40px rgba(0,0,0,0.14);padding:24px
}
.modal-close{
  position:absolute;top:10px;right:10px;border:1px solid var(--line);background:#fff;border-radius:8px;padding:6px 10px;cursor:pointer
}

.reveal{opacity:0;transform:translateY(12px);transition:opacity .5s ease, transform .5s ease}
.reveal.visible{opacity:1;transform:translateY(0)}

@media (max-width:1000px){
  .services{grid-template-columns:repeat(2,1fr)}
  .portfolio-grid{column-count:2}
}
@media (max-width:640px){
  .site-nav{display:none;position:absolute;right:16px;top:58px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px;box-shadow:var(--shadow)}
  .site-nav.open{display:block}
  .site-nav ul{flex-direction:column;gap:8px}
  .nav-toggle{display:block}
  .services{grid-template-columns:1fr}
  .portfolio-grid{column-count:1}
}

/* 打印样式:隐藏不必要元素,优化为PDF */
@media print{
  .site-header,.site-footer,.divider,.nav-toggle,.btn-primary,.btn-secondary,.modal{display:none !important}
  .section{padding:24px 0}
  .portfolio-item{page-break-inside:avoid}
}
// 低调动效与交互
document.addEventListener('DOMContentLoaded', () => {
  // 移动端导航
  const toggle = document.querySelector('.nav-toggle');
  const nav = document.querySelector('.site-nav');
  if (toggle && nav) {
    toggle.addEventListener('click', () => {
      const open = nav.classList.toggle('open');
      toggle.setAttribute('aria-expanded', String(open));
    });
  }

  // 滚动淡入
  const observer = new IntersectionObserver((entries)=>{
    entries.forEach(e=>{
      if(e.isIntersecting){ e.target.classList.add('visible'); }
    });
  },{threshold:0.12});
  document.querySelectorAll('.reveal').forEach(el=>observer.observe(el));

  // 案例弹窗
  const modal = document.getElementById('caseModal');
  const modalTitle = document.getElementById('modalTitle');
  const modalDetail = document.getElementById('modalDetail');
  const openCase = (title, detail) => {
    modalTitle.textContent = title;
    modalDetail.textContent = detail;
    modal.classList.add('show');
    modal.setAttribute('aria-hidden','false');
    document.body.style.overflow = 'hidden';
  };
  const closeCase = () => {
    modal.classList.remove('show');
    modal.setAttribute('aria-hidden','true');
    document.body.style.overflow = '';
  };
  document.querySelectorAll('.case-item').forEach(item=>{
    const title = item.dataset.title;
    const detail = item.dataset.detail;
    const btn = item.querySelector('.case-more');
    const open = ()=>openCase(title, detail);
    btn.addEventListener('click', open);
    item.addEventListener('keydown', (e)=>{ if(e.key==='Enter' || e.key===' ') { e.preventDefault(); open(); } });
  });
  modal.addEventListener('click', (e)=>{
    if(e.target.dataset.close==='true'){ closeCase(); }
  });
  document.addEventListener('keydown',(e)=>{ if(e.key==='Escape' && modal.classList.contains('show')) closeCase(); });

  // FAQ 折叠
  document.querySelectorAll('.faq-item').forEach(item=>{
    const q = item.querySelector('.faq-q');
    q.addEventListener('click', ()=>{
      const isOpen = item.classList.toggle('open');
      q.setAttribute('aria-expanded', String(isOpen));
    });
  });

  // 下载作品集(打印为PDF)
  const dl = document.getElementById('downloadBtn');
  if (dl) {
    dl.addEventListener('click', ()=>{
      window.print();
    });
  }
});

部署指南

  • 文件结构
    • 建立项目文件夹,包含 index.html、styles.css、main.js 三个文件(与上述代码对应)。
    • 如需替换占位图,将真实图片放入 assets/ 目录,改写作品集 路径。
  • 本地预览
    • 双击 index.html 即可本地查看;为避免某些浏览器的本地资源限制,建议使用任意静态服务器(如 VS Code Live Server 或命令行 npx serve)。
  • 上线托管
    • Netlify/Vercel:注册后新建项目,拖放整个文件夹或连接仓库,一键部署。
    • GitHub Pages:将代码推送到仓库,启用 Pages,来源选择根目录或 docs。
    • 传统主机:将三个文件上传到服务器的站点根目录,确保默认入口为 index.html。
  • 域名与证书
    • 绑定自有域名并开启 HTTPS;在托管平台中添加 DNS 记录并启用自动证书。
  • 下载入口说明
    • 点击“下载 PDF”会打开打印视图;在打印对话框中选择“另存为PDF”即可生成作品集文件。

优化建议

  • 内容替换与结构扩展
    • 将“关于我”文案替换为真实简介;在作品卡片中添加标题、年份与角色说明。
    • 案例弹窗可扩展为独立子页面,包含过程、交付物与数据指标。
  • 性能与体验
    • 使用现代图片格式(WebP/AVIF),按需设置 sizes 与 srcset,自适应加载。
    • 开启懒加载:为图片添加 loading="lazy"(可直接在 标签加上)。
  • SEO与分享
    • 补充页面标题与描述、Open Graph 与 Twitter Card 元数据;在案例页使用语义化标签(article、section、figure)。
  • 设计系统
    • 提炼通用组件(按钮、卡片、导航),用CSS变量管理色彩与间距,便于主题切换与规模化维护。
  • 可访问性
    • 为所有交互提供键盘操作与ARIA属性;确保对比度符合标准。
  • 构建与版本
    • 如需多页与组件化,可引入构建工具(Vite)与模板引擎,统一输出静态资源并做缓存指纹。

示例详情

解决的问题

为企业主、设计师、创业团队等非技术用户,提供一条从“设计想法”到“可上线网站”的快速通道。通过一次性输入品牌色、风格偏好与核心文案,自动生成结构清晰、风格统一、可直接发布的完整网站方案与上线指南,覆盖企业官网、个人作品集、产品介绍页、活动落地页等高频场景,显著缩短上线周期、提升转化表现、统一品牌形象,并降低外包与沟通成本。

适用用户

中小企业主

快速搭建企业官网与产品服务页,统一品牌风格,配置联系我们与表单,收集销售线索,助力线上获客与企业形象升级。

创业者与产品负责人

迅速上线产品介绍页与发布页,制作报名与预约入口,灵活切换主题做小流量试验,验证卖点并沉淀早期用户。

视觉设计师与自由职业者

将设计稿与素材直接转为可上线网站,包含作品集、案例页与自我介绍,缩短交付周期,减少外包与沟通成本。

特征总结

输入品牌色、风格与素材,即可轻松生成整站方案与页面模块,所见即可上线。
自动规划导航与层级结构,保障信息清晰可达,减少跳出率,提升转化路径顺滑。
内置响应式策略,自动适配电脑、平板与手机,一次生成,多端一致呈现。
支持多种设计风格与版式组合,一键切换主题,快速试错找到更高转化的视觉方案。
自动生成可用的页面表单、轮播、图文区块,无需编码即可完成交互与展示。
内建内容结构优化与文案润色,引导更清晰的卖点表达,提升访客停留与咨询。
从需求到上线的分步流程指引,提供打包导出与部署建议,助你当天完成发布。
支持场景化模块库,企业官网、产品发布、个人作品集等,一键调用即可复用。
智能校验常见问题与兼容性风险,提前给出修正建议,减少返工与沟通成本。
可保存多版本方案与设计参数,便于团队协作评审,记录决策并快速回滚。

如何使用购买的提示词模板

1. 直接在外部 Chat 应用中使用

将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

2. 发布为 API 接口调用

把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

3. 在 MCP Client 中配置使用

在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

AI 提示词价格
¥20.00元
先用后买,用好了再付款,超安全!

您购买后可以获得什么

获得完整提示词模板
- 共 734 tokens
- 3 个可调节参数
{ 设计元素 } { 网站用途 } { 内容材料 }
获得社区贡献内容的使用权
- 精选社区优质案例,助您快速上手提示词
限时免费

不要错过!

免费获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59