教程概览

我们将分步完成以下内容:

  1. 第一步:理解扁平风设计
  2. 第二步:规划你的网页内容
  3. 第三步:搭建项目与基础HTML结构
  4. 第四步:使用CSS实现扁平风样式
    • 基础样式
    • 卡片式布局
    • 按钮与交互
    • 响应式设计
  5. 第五步:添加交互与动画 (进阶)
  6. 第六步:资源与进阶学习

第一步:理解扁平风设计

在开始编码前,我们先明确“扁平风”的核心特点,这能让你的设计更有方向感。

  • 去繁就简:抛弃所有拟物化的设计,如阴影、渐变、纹理、光泽等,所有元素都是平面的。
  • 大胆的纯色:使用高饱和度、明亮的纯色作为主色调,通常选择2-4种主色,保持整体和谐。
  • 清晰的排版:依赖字体、字号、字重来建立视觉层次,无衬线字体是首选,如 Helvetica, Arial, Roboto, Open Sans
  • 简洁的图标:使用线条简洁、轮廓清晰的线性图标或面性图标。
  • 充足的留白:元素之间有足够的“呼吸空间”,让页面看起来更干净、不拥挤。

核心思想: 功能至上,形式服务于内容。


第二步:规划你的网页内容

一个典型的个人网页通常包含以下几个模块,你可以根据自己的需求进行增删。

  1. 导航栏:固定在页面顶部,方便用户快速跳转到不同部分。

    链接:首页、关于我、项目、联系方式等。

  2. 首页/英雄区:第一眼看到的部分,快速展示你的身份。
    • 内容:你的名字、头衔/职业(如“前端开发工程师”、“UI设计师”)、一句简短的个人介绍或座右铭。
    • 可选:一张你的头像或一个代表你兴趣的图标。
  3. 关于我:更详细地介绍你自己。

    内容:个人简介、技能、兴趣爱好、工作经历等。

  4. 项目展示:展示你的作品或项目,这是你能力的最佳证明。

    内容:项目名称、简介、技术栈、项目截图或GIF动图、项目链接。

  5. 联系方式:让别人可以方便地联系到你。

    内容:邮箱、社交媒体账号(GitHub, LinkedIn, Twitter, Dribbble等)的图标和链接。


第三步:搭建项目与基础HTML结构

现在我们开始动手,我们将使用最基础的 HTML + CSS 来实现。

创建项目文件

在你的电脑上新建一个文件夹,命名为 portfolio (或你喜欢的名字),在这个文件夹里,创建以下三个文件:

  • index.html (网页的结构)
  • style.css (网页的样式)
  • images/ (存放图片的文件夹)

编写基础HTML (index.html)

打开 index.html 文件,填入以下基础代码,这就像搭建一个房子的框架。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">你的名字 - 个人主页</title>
    <link rel="stylesheet" href="style.css">
    <!-- 引入一个图标库,这里我们使用 Font Awesome -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
</head>
<body>
    <!-- 导航栏 -->
    <header>
        <nav>
            <a href="#home" class="nav-link">首页</a>
            <a href="#about" class="nav-link">关于我</a>
            <a href="#projects" class="nav-link">项目</a>
            <a href="#contact" class="nav-link">联系</a>
        </nav>
    </header>
    <main>
        <!-- 首页/英雄区 -->
        <section id="home">
            <div class="hero-content">
                <img src="images/avatar.jpg" alt="我的头像" class="avatar">
                <h1>你的名字</h1>
                <p class="title">前端开发工程师 & UI设计师</p>
                <p class="tagline">用代码创造美好,用设计传递价值。</p>
            </div>
        </section>
        <!-- 关于我 -->
        <section id="about">
            <h2>关于我</h2>
            <div class="card">
                <p>你好!我是一名充满激情的前端开发者,专注于创建直观、高效且用户友好的网络体验,我热爱将复杂的问题转化为简单、优雅的设计。</p>
                <p>我的技能包括但不限于:</p>
                <ul>
                    <li>HTML5, CSS3, JavaScript (ES6+)</li>
                    <li>React, Vue.js</li>
                    <li>响应式设计与移动优先</li>
                    <li>UI/UX 设计原则</li>
                </ul>
            </div>
        </section>
        <!-- 项目展示 -->
        <section id="projects">
            <h2>我的项目</h2>
            <div class="projects-grid">
                <div class="card">
                    <img src="images/project1.jpg" alt="项目1截图">
                    <h3>项目名称一</h3>
                    <p>这是一个关于...的项目简介。</p>
                    <a href="#" class="btn">查看详情</a>
                </div>
                <div class="card">
                    <img src="images/project2.jpg" alt="项目2截图">
                    <h3>项目名称二</h3>
                    <p>这是一个关于...的项目简介。</p>
                    <a href="#" class="btn">查看详情</a>
                </div>
                <div class="card">
                    <img src="images/project3.jpg" alt="项目3截图">
                    <h3>项目名称三</h3>
                    <p>这是一个关于...的项目简介。</p>
                    <a href="#" class="btn">查看详情</a>
                </div>
            </div>
        </section>
        <!-- 联系方式 -->
        <section id="contact">
            <h2>联系我</h2>
            <div class="card contact-card">
                <p>如果你对我的工作感兴趣,或者想聊聊有趣的想法,欢迎随时联系我!</p>
                <div class="social-links">
                    <a href="mailto:your.email@example.com"><i class="fas fa-envelope"></i></a>
                    <a href="https://github.com/yourusername" target="_blank"><i class="fab fa-github"></i></a>
                    <a href="https://linkedin.com/in/yourusername" target="_blank"><i class="fab fa-linkedin"></i></a>
                </div>
            </div>
        </section>
    </main>
    <!-- 页脚 -->
    <footer>
        <p>&copy; 2025 你的名字. All rights reserved.</p>
    </footer>
</body>
</html>

注意:

  • 你的名字 替换成你自己的信息。
  • images 文件夹里放入你的头像 avatar.jpg 和项目截图。
  • 我们引入了 Font Awesome 图标库,方便我们使用社交媒体图标。

第四步:使用CSS实现扁平风样式

打开 style.css 文件,我们将用CSS来给这个“骨架”穿上漂亮的“衣服”。

基础样式和变量

扁平风设计非常依赖颜色,所以我们先定义一些颜色变量,方便后续修改。

/* style.css */
/* --- 1. 基础设置与变量 --- */
:root {
    --primary-color: #3498db; /* 一个明亮的蓝色作为主色 */
    --secondary-color: #2ecc71; /* 一个绿色作为辅助色 */
    --text-color: #333;      /* 深灰色文字,比纯黑更柔和 */
    --light-color: #ecf0f1;  /* 浅灰色背景 */
    --card-bg-color: #ffffff; /* 卡片背景色为纯白 */
    --font-family: 'Helvetica', 'Arial', 'PingFang SC', 'Microsoft YaHei', sans-serif; /* 中英文字体 */
}
/* 全局重置 */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
body {
    font-family: var(--font-family);
    line-height: 1.6;
    color: var(--text-color);
    background-color: var(--light-color);
}
h1, h2, h3 {
    line-height: 1.2;
    margin-bottom: 1rem;
}
a {
    text-decoration: none;
    color: var(--primary-color);
}
img {
    max-width: 100%;
    height: auto;
    display: block;
}
section {
    padding: 4rem 1rem;
    text-align: center;
}
h2 {
    font-size: 2.5rem;
    margin-bottom: 2rem;
    color: var(--text-color);
}

导航栏

导航栏要简洁、固定,方便点击。

/* --- 2. 导航栏 --- */
header {
    position: fixed; /* 固定在顶部 */
    top: 0;
    left: 0;
    width: 100%;
    background-color: var(--card-bg-color); /* 白色背景 */
    box-shadow: 0 2px 5px rgba(0,0,0,0.1); /* 微妙的阴影,增加层次感,但不破坏扁平感 */
    z-index: 1000; /* 确保在最上层 */
}
nav {
    display: flex;
    justify-content: center;
    align-items: center;
    padding: 1rem;
}
.nav-link {
    color: var(--text-color);
    margin: 0 1.5rem;
    font-weight: bold;
    transition: color 0.3s ease; /* 颜色变化的过渡效果 */
}
.nav-link:hover {
    color: var(--primary-color);
}

卡片式布局

这是扁平风的灵魂,内容区域都用卡片包裹,有清晰的边框和内边距。

/* --- 3. 卡片式布局 --- */
.card {
    background-color: var(--card-bg-color);
    border: 1px solid #e0e0e0; /* 非常细的边框 */
    border-radius: 8px; /* 微小的圆角,比纯直角更柔和 */
    padding: 2rem;
    margin: 1rem auto;
    max-width: 800px;
    box-shadow: 0 4px 15px rgba(0,0,0,0.05); /* 柔和的阴影,让卡片浮起来 */
}
/* 项目网格布局 */
.projects-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); /* 响应式网格 */
    gap: 2rem; /* 卡片之间的间距 */
    padding: 0 1rem;
}
.projects-grid .card {
    margin: 0; /* 网格布局中不需要额外外边距 */
    text-align: left;
    transition: transform 0.3s ease, box-shadow 0.3s ease; /* 添加悬停效果 */
}
.projects-grid .card:hover {
    transform: translateY(-5px); /* 鼠标悬停时卡片轻微上移 */
    box-shadow: 0 8px 25px rgba(0,0,0,0.1); /* 悬停时阴影加深 */
}

各个区块样式

/* --- 4. 各区块样式 --- */
/* 首页/英雄区 */
#home {
    height: 100vh; /* 占满整个视口高度 */
    display: flex;
    justify-content: center;
    align-items: center;
    text-align: center;
    background-color: var(--primary-color); /* 使用主色作为背景 */
    color: white;
    margin-top: -60px; /* 抵消header的高度,避免被遮挡 */
    padding-top: 60px;
}
.hero-content {
    max-width: 800px;
}
.avatar {
    width: 150px;
    height: 150px;
    border-radius: 50%; /* 圆形头像 */
    border: 5px solid white;
    margin-bottom: 1.5rem;
}
{
    font-size: 1.5rem;
    margin-bottom: 1rem;
    font-weight: normal;
}
.tagline {
    font-size: 1.1rem;
    font-style: italic;
    opacity: 0.9;
}
/* 关于我 */
#about .card p, #about .card ul {
    text-align: left;
    margin-bottom: 1rem;
}
#about .card ul {
    list-style-type: none; /* 去掉列表点 */
    padding-left: 0;
}
#about .card li {
    padding-left: 1.5rem;
    position: relative;
}
#about .card li::before {
    content: "▸"; /* 用一个符号代替列表点 */
    color: var(--secondary-color);
    position: absolute;
    left: 0;
}
/* 联系方式 */
.contact-card {
    max-width: 500px;
}
.social-links {
    margin-top: 2rem;
}
.social-links a {
    font-size: 2rem;
    margin: 0 1rem;
    color: var(--text-color);
    transition: color 0.3s ease;
}
.social-links a:hover {
    color: var(--primary-color);
}
/* 按钮样式 */
.btn {
    display: inline-block;
    background-color: var(--primary-color);
    color: white;
    padding: 0.8rem 1.5rem;
    border-radius: 5px;
    font-weight: bold;
    margin-top: 1rem;
    transition: background-color 0.3s ease, transform 0.2s ease;
}
.btn:hover {
    background-color: #2980b9; /* 悬停时颜色变深 */
    transform: scale(1.05); /* 轻微放大 */
}
/* 页脚 */
footer {
    text-align: center;
    padding: 2rem;
    background-color: var(--text-color);
    color: var(--light-color);
}

响应式设计

让你的网页在手机和平板上也能完美显示。

/* --- 5. 响应式设计 --- */
@media (max-width: 768px) {
    nav {
        flex-direction: column; /* 在小屏幕上导航栏垂直排列 */
    }
    .nav-link {
        margin: 0.5rem 0;
    }
    h2 {
        font-size: 2rem;
    }
    #home {
        padding-top: 100px; /* 给更高的导航栏留出空间 */
    }
}

打开你的 index.html 文件在浏览器中查看,一个漂亮的扁平风个人主页就已经基本完成了!


第五步:添加交互与动画 (进阶)

为了让网页更生动,我们可以添加一些简单的CSS动画。

平滑滚动

点击导航链接时,页面不是“跳”过去,而是“滑”过去,体验更好,这需要一点点JavaScript。

index.html</body> 标签前,添加以下代码:

<script>
    document.querySelectorAll('a[href^="#"]').forEach(anchor => {
        anchor.addEventListener('click', function (e) {
            e.preventDefault();
            document.querySelector(this.getAttribute('href')).scrollIntoView({
                behavior: 'smooth'
            });
        });
    });
</script>

简单的加载动画

可以为头像或卡片添加一个淡入效果。

style.css 中添加:

/* 为卡片添加淡入动画 */
.card {
    animation: fadeIn 0.8s ease-in-out;
}
@keyframes fadeIn {
    from {
        opacity: 0;
        transform: translateY(20px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}
/* 让英雄区的内容从不同方向淡入 */
.hero-content > * {
    opacity: 0;
    animation: fadeInUp 0.8s ease-out forwards;
}
.hero-content > *:nth-child(1) { animation-delay: 0.2s; } /* 头像 */
.hero-content > *:nth-child(2) { animation-delay: 0.4s; } /* 名字 */
.hero-content > *:nth-child(3) { animation-delay: 0.6s; } /* 头衔 */
.hero-content > *:nth-child(4) { animation-delay: 0.8s; } /* 座右铭 */
@keyframes fadeInUp {
    from {
        opacity: 0;
        transform: translateY(30px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

第六步:资源与进阶学习

恭喜你!你已经成功制作了一个扁平风个人网页。

  • 寻找灵感

    • Awwwards: 全球顶尖的网页设计奖项,可以找到大量优秀作品。
    • Dribbble / Behance: 寻找UI设计和灵感的宝库。
    • Pinterest: 搜索 "flat design portfolio" 可以找到海量模板和创意。
  • 进阶学习

    • CSS框架: 学习使用 BootstrapTailwind CSS 可以让你更快地构建响应式布局。
    • CSS预处理器: 学习 SassLess,它们能让你用变量、嵌套、混合等特性更高效地编写CSS。
    • JavaScript框架: 如果想让你的网页功能更强大(如添加博客、后台管理),可以学习 React, Vue, 或 Angular
    • 部署: 将你的作品部署到线上,让别人可以访问,推荐使用 GitHub PagesNetlifyVercel,它们都提供免费的静态网站托管服务。

这个教程只是一个起点,希望它能激发你的创造力,去打造一个真正属于你自己的、独一无二的个人主页!