1. 基础版:一个简单的、结构清晰的个人信息页面。
  2. 美化版:添加 CSS 样式,让页面看起来更专业、更美观。
  3. 交互版:添加一点 JavaScript,增加简单的交互效果。
  4. 响应式版:确保页面在不同设备(手机、平板、电脑)上都能良好显示。

第1步:基础版 HTML 结构

这是页面的骨架,包含了所有必要的信息模块。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">张三 - 个人信息</title>
</head>
<body>
    <header>
        <h1>张三</h1>
        <p>前端开发工程师</p>
    </header>
    <main>
        <section class="profile">
            <img src="https://via.placeholder.com/150" alt="张三的头像">
            <h2>关于我</h2>
            <p>你好!我是一名充满热情的前端开发工程师,专注于创建用户友好、性能卓越的 Web 应用,我热爱学习新技术,并享受将复杂问题转化为简洁解决方案的过程。</p>
        </section>
        <section class="skills">
            <h2>技能</h2>
            <ul>
                <li>HTML5 / CSS3</li>
                <li>JavaScript (ES6+)</li>
                <li>React / Vue.js</li>
                <li>Node.js</li>
                <li>Git / GitHub</li>
            </ul>
        </section>
        <section class="experience">
            <h2>工作经历</h2>
            <article>
                <h3>高级前端开发工程师 - 某科技有限公司</h3>
                <time>2025年3月 - 至今</time>
                <p>负责公司核心产品的前端架构设计与开发,优化用户体验,提升页面性能。</p>
            </article>
            <article>
                <h3>前端开发工程师 - ABC初创公司</h3>
                <time>2025年7月 - 2025年2月</time>
                <p>参与多个 Web 应用的开发,与后端团队紧密合作,完成产品功能迭代。</p>
            </article>
        </section>
        <section class="contact">
            <h2>联系方式</h2>
            <p>📧 邮箱: zhangsan@example.com</p>
            <p>🔗 GitHub: <a href="https://github.com/zhangsan" target="_blank">github.com/zhangsan</a></p>
            <p>📱 微信: zhangsan_wechat</p>
        </section>
    </main>
    <footer>
        <p>&copy; 2025 张三. All rights reserved.</p>
    </footer>
</body>
</html>

代码解释:

  • <!DOCTYPE html>:声明文档类型。
  • <html lang="zh-CN">>:根元素,lang 属性有助于搜索引擎和屏幕阅读器。
  • <head>:包含页面的元数据,如标题、字符编码、视口设置等。
  • <body>:页面的可见内容。
  • <header>:页面或区块的页眉,通常包含标题和简介。
  • <main>:页面的主要内容,一个页面中只能有一个 <main>
  • <section>:文档中的独立区块,如“关于我”、“技能”等。
  • <h1><h6>标签,<h1> 是最重要的页面标题。
  • <p>:段落标签。
  • <img>:图片标签,src 是图片地址,alt 是替代文本,对SEO和无障碍访问很重要。
  • <ul><li>:无序列表和列表项。
  • <article>:代表一个独立的、完整的内容块,如一篇工作经历。
  • <time>:表示时间或日期,机器可读。
  • <a>:超链接,href 是目标地址,target="_blank" 会在新标签页打开链接。
  • <footer>:页面或区块的页脚,通常包含版权信息。

第2步:美化版 - 添加 CSS 样式

我们为上面的 HTML 添加 CSS 样式,让它变得美观,你可以将 CSS 代码放在 <head> 标签内的 <style> 标签里,或者单独创建一个 style.css 文件并在 <head> 中引入。

<!-- 在 <head> 中添加 <style> 标签 -->
<style>
    /* 全局样式和变量 */
    :root {
        --primary-color: #007bff;
        --secondary-color: #6c757d;
        --background-color: #f4f4f9;
        --text-color: #333;
        --box-shadow: 0 4px 8px rgba(0,0,0,0.1);
    }
    body {
        font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
        line-height: 1.6;
        margin: 0;
        background-color: var(--background-color);
        color: var(--text-color);
    }
    /* 容器布局 */
    .container {
        max-width: 900px;
        margin: 20px auto;
        padding: 20px;
        background-color: #fff;
        border-radius: 8px;
        box-shadow: var(--box-shadow);
    }
    /* 头部样式 */
    header {
        text-align: center;
        padding: 40px 0;
        border-bottom: 1px solid #eee;
    }
    header h1 {
        font-size: 2.5em;
        margin: 0;
        color: var(--primary-color);
    }
    header p {
        font-size: 1.2em;
        color: var(--secondary-color);
        margin-top: 10px;
    }
    /* 主要内容区域 */
    main {
        padding: 20px 0;
    }
    /* 通用区块样式 */
    section {
        margin-bottom: 40px;
    }
    section h2 {
        color: var(--primary-color);
        border-bottom: 2px solid var(--primary-color);
        padding-bottom: 10px;
        margin-bottom: 20px;
    }
    /* 个人简介和头像 */
    .profile {
        text-align: center;
    }
    .profile img {
        width: 150px;
        height: 150px;
        border-radius: 50%; /* 圆形头像 */
        object-fit: cover; /* 保证图片不变形 */
        margin-bottom: 20px;
        border: 5px solid #fff;
        box-shadow: var(--box-shadow);
    }
    /* 技能列表 */
    .skills ul {
        list-style-type: none; /* 去掉默认列表点 */
        padding: 0;
        display: flex; /* 使用 Flexbox 布局 */
        flex-wrap: wrap;
        gap: 10px; /* 项目之间的间距 */
    }
    .skills li {
        background-color: var(--primary-color);
        color: white;
        padding: 8px 15px;
        border-radius: 20px; /* 胶囊形状 */
        font-size: 0.9em;
    }
    /* 工作经历 */
    .experience article {
        margin-bottom: 25px;
        padding-bottom: 25px;
        border-bottom: 1px dashed #ddd;
    }
    .experience article:last-child {
        border-bottom: none;
    }
    .experience h3 {
        margin: 0 0 5px 0;
    }
    .experience time {
        color: var(--secondary-color);
        font-size: 0.9em;
    }
    /* 联系方式 */
    .contact p {
        margin: 10px 0;
    }
    .contact a {
        color: var(--primary-color);
        text-decoration: none;
    }
    .contact a:hover {
        text-decoration: underline;
    }
    /* 页脚 */
    footer {
        text-align: center;
        margin-top: 40px;
        padding: 20px;
        border-top: 1px solid #eee;
        color: var(--secondary-color);
        font-size: 0.9em;
    }
</style>

CSS 设计思路:

  • CSS 变量 (root):定义了颜色、阴影等,方便全局统一修改。
  • 容器 (.container)居中并限制最大宽度,使其在大屏幕上更美观。
  • 布局:使用 Flexbox 实现技能列表的水平排列和居中对齐,非常灵活。
  • 色彩与字体:选择了现代、易读的字体和配色方案。
  • 细节:如圆形头像 (border-radius: 50%)、胶囊形状的技能标签、悬停效果 (hover),都提升了用户体验。

第3步:交互版 - 添加 JavaScript

我们给页面增加一个简单的“暗色/亮色”主题切换功能。

<!-- 在 <body> 标签的最后添加 <script> 标签 -->
<script>
    // 获取 body 元素
    const body = document.body;
    // 获取切换按钮
    const themeToggleBtn = document.createElement('button');
    themeToggleBtn.textContent = '切换主题';
    themeToggleBtn.style.cssText = `
        position: fixed;
        top: 20px;
        right: 20px;
        padding: 10px 15px;
        background-color: var(--primary-color);
        color: white;
        border: none;
        border-radius: 5px;
        cursor: pointer;
        z-index: 1000;
    `;
    document.body.appendChild(themeToggleBtn);
    // 暗色主题的 CSS 变量
    const darkTheme = {
        '--primary-color': #ff6b6b,
        '--secondary-color': #feca57,
        '--background-color': #2c2c54,
        '--text-color': #ffffff,
        '--box-shadow': '0 4px 8px rgba(255,255,255,0.1)'
    };
    // 点击按钮时切换主题
    themeToggleBtn.addEventListener('click', () => {
        if (body.style.backgroundColor === 'rgb(44, 44, 84)') {
            // 如果当前是暗色,则切换回亮色
            Object.keys(darkTheme).forEach(key => {
                body.style.setProperty(key, getComputedStyle(document.documentElement).getPropertyValue(key));
            });
            themeToggleBtn.textContent = '切换主题';
        } else {
            // 如果当前是亮色,则切换为暗色
            Object.keys(darkTheme).forEach(key => {
                body.style.setProperty(key, darkTheme[key]);
            });
            themeToggleBtn.textContent = '切换亮色';
        }
    });
</script>

JavaScript 功能解释:

  1. 创建按钮:我们用 document.createElement 动态创建了一个按钮,并设置了它的样式和文字。
  2. 添加事件监听:使用 addEventListener('click', ...) 为按钮添加点击事件。
  3. 切换逻辑:点击时,检查当前背景色,如果是亮色,就把暗色主题的 CSS 变量应用到 body 上;反之亦然,通过直接修改 body.style 来实现即时切换。

第4步:响应式版 - 适配移动设备

响应式设计是现代网页的必备技能,我们使用 媒体查询 (Media Queries) 来为小屏幕(如手机)调整布局。

/* 在 <style> 标签的最后添加以下代码 */
/* 当屏幕宽度小于 768px 时(平板和手机) */
@media (max-width: 768px) {
    .container {
        margin: 10px;
        padding: 15px;
    }
    header h1 {
        font-size: 2em;
    }
    .skills ul {
        flex-direction: column; /* 技能列表改为垂直排列 */
        gap: 8px;
    }
    .skills li {
        text-align: center;
    }
    /* 调整主题按钮位置 */
    themeToggleBtn {
        top: 10px;
        right: 10px;
        padding: 8px 12px;
        font-size: 0.9em;
    }
}
/* 当屏幕宽度小于 480px 时(小型手机) */
@media (max-width: 480px) {
    header h1 {
        font-size: 1.5em;
    }
    header p {
        font-size: 1em;
    }
    section h2 {
        font-size: 1.3em;
    }
}

响应式设计思路:

  • @media (max-width: 768px):这是一个断点,表示当浏览器窗口宽度小于 768 像素时,应用里面的 CSS 规则。
  • 调整布局:在手机上,将水平排列的技能列表改为垂直排列,以节省空间。
  • 调整字体和间距、文字和容器的尺寸,使其在小屏幕上更协调。

最终完整代码

你可以将以上所有部分组合在一起,得到一个功能完整、美观且响应式的个人信息网页。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">张三 - 个人信息</title>
    <style>
        /* 全局样式和变量 */
        :root {
            --primary-color: #007bff;
            --secondary-color: #6c757d;
            --background-color: #f4f4f9;
            --text-color: #333;
            --box-shadow: 0 4px 8px rgba(0,0,0,0.1);
        }
        body {
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
            line-height: 1.6;
            margin: 0;
            background-color: var(--background-color);
            color: var(--text-color);
            transition: background-color 0.3s, color 0.3s;
        }
        /* 容器布局 */
        .container {
            max-width: 900px;
            margin: 20px auto;
            padding: 20px;
            background-color: #fff;
            border-radius: 8px;
            box-shadow: var(--box-shadow);
            transition: background-color 0.3s;
        }
        /* 头部样式 */
        header {
            text-align: center;
            padding: 40px 0;
            border-bottom: 1px solid #eee;
        }
        header h1 {
            font-size: 2.5em;
            margin: 0;
            color: var(--primary-color);
        }
        header p {
            font-size: 1.2em;
            color: var(--secondary-color);
            margin-top: 10px;
        }
        /* 主要内容区域 */
        main {
            padding: 20px 0;
        }
        /* 通用区块样式 */
        section {
            margin-bottom: 40px;
        }
        section h2 {
            color: var(--primary-color);
            border-bottom: 2px solid var(--primary-color);
            padding-bottom: 10px;
            margin-bottom: 20px;
        }
        /* 个人简介和头像 */
        .profile {
            text-align: center;
        }
        .profile img {
            width: 150px;
            height: 150px;
            border-radius: 50%;
            object-fit: cover;
            margin-bottom: 20px;
            border: 5px solid #fff;
            box-shadow: var(--box-shadow);
        }
        /* 技能列表 */
        .skills ul {
            list-style-type: none;
            padding: 0;
            display: flex;
            flex-wrap: wrap;
            gap: 10px;
        }
        .skills li {
            background-color: var(--primary-color);
            color: white;
            padding: 8px 15px;
            border-radius: 20px;
            font-size: 0.9em;
        }
        /* 工作经历 */
        .experience article {
            margin-bottom: 25px;
            padding-bottom: 25px;
            border-bottom: 1px dashed #ddd;
        }
        .experience article:last-child {
            border-bottom: none;
        }
        .experience h3 {
            margin: 0 0 5px 0;
        }
        .experience time {
            color: var(--secondary-color);
            font-size: 0.9em;
        }
        /* 联系方式 */
        .contact p {
            margin: 10px 0;
        }
        .contact a {
            color: var(--primary-color);
            text-decoration: none;
        }
        .contact a:hover {
            text-decoration: underline;
        }
        /* 页脚 */
        footer {
            text-align: center;
            margin-top: 40px;
            padding: 20px;
            border-top: 1px solid #eee;
            color: var(--secondary-color);
            font-size: 0.9em;
        }
        /* 响应式设计 */
        @media (max-width: 768px) {
            .container {
                margin: 10px;
                padding: 15px;
            }
            header h1 {
                font-size: 2em;
            }
            .skills ul {
                flex-direction: column;
                gap: 8px;
            }
            .skills li {
                text-align: center;
            }
        }
        @media (max-width: 480px) {
            header h1 {
                font-size: 1.5em;
            }
            header p {
                font-size: 1em;
            }
            section h2 {
                font-size: 1.3em;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <header>
            <h1>张三</h1>
            <p>前端开发工程师</p>
        </header>
        <main>
            <section class="profile">
                <img src="https://via.placeholder.com/150" alt="张三的头像">
                <h2>关于我</h2>
                <p>你好!我是一名充满热情的前端开发工程师,专注于创建用户友好、性能卓越的 Web 应用,我热爱学习新技术,并享受将复杂问题转化为简洁解决方案的过程。</p>
            </section>
            <section class="skills">
                <h2>技能</h2>
                <ul>
                    <li>HTML5 / CSS3</li>
                    <li>JavaScript (ES6+)</li>
                    <li>React / Vue.js</li>
                    <li>Node.js</li>
                    <li>Git / GitHub</li>
                </ul>
            </section>
            <section class="experience">
                <h2>工作经历</h2>
                <article>
                    <h3>高级前端开发工程师 - 某科技有限公司</h3>
                    <time>2025年3月 - 至今</time>
                    <p>负责公司核心产品的前端架构设计与开发,优化用户体验,提升页面性能。</p>
                </article>
                <article>
                    <h3>前端开发工程师 - ABC初创公司</h3>
                    <time>2025年7月 - 2025年2月</time>
                    <p>参与多个 Web 应用的开发,与后端团队紧密合作,完成产品功能迭代。</p>
                </article>
            </section>
            <section class="contact">
                <h2>联系方式</h2>
                <p>📧 邮箱: zhangsan@example.com</p>
                <p>🔗 GitHub: <a href="https://github.com/zhangsan" target="_blank">github.com/zhangsan</a></p>
                <p>📱 微信: zhangsan_wechat</p>
            </section>
        </main>
        <footer>
            <p>&copy; 2025 张三. All rights reserved.</p>
        </footer>
    </div>
    <script>
        const body = document.body;
        const themeToggleBtn = document.createElement('button');
        themeToggleBtn.textContent = '切换主题';
        themeToggleBtn.style.cssText = `
            position: fixed;
            top: 20px;
            right: 20px;
            padding: 10px 15px;
            background-color: var(--primary-color);
            color: white;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            z-index: 1000;
            transition: background-color 0.3s;
        `;
        document.body.appendChild(themeToggleBtn);
        const darkTheme = {
            '--primary-color': '#ff6b6b',
            '--secondary-color': '#feca57',
            '--background-color': '#2c2c54',
            '--text-color': '#ffffff',
            '--box-shadow': '0 4px 8px rgba(255,255,255,0.1)'
        };
        themeToggleBtn.addEventListener('click', () => {
            const currentBg = getComputedStyle(body).backgroundColor;
            if (currentBg === 'rgb(44, 44, 84)' || currentBg === 'rgb(44, 44, 84, 1)') {
                Object.keys(darkTheme).forEach(key => {
                    body.style.setProperty(key, getComputedStyle(document.documentElement).getPropertyValue(key));
                });
                themeToggleBtn.textContent = '切换主题';
            } else {
                Object.keys(darkTheme).forEach(key => {
                    body.style.setProperty(key, darkTheme[key]);
                });
                themeToggleBtn.textContent = '切换亮色';
            }
        });
    </script>
</body>
</html>

如何使用和下一步

  1. 复制代码:将上面的完整代码复制到一个文本编辑器中(如 VS Code, Sublime Text, 或记事本)。
  2. 保存文件:将文件保存为 index.html
  3. 打开网页:用浏览器(如 Chrome, Firefox)打开这个 index.html 文件,你就能看到效果了。
  4. 个性化修改:将 张三、你的技能、工作经历、联系方式等信息替换成你自己的。
  5. 下一步学习
    • 部署上线:你可以将这个 index.html 文件上传到 GitHub Pages、Netlify 或 Vercel 等免费平台,让它成为一个真正的在线网页。
    • 更复杂的设计:学习使用 CSS 框架(如 Tailwind CSS, Bootstrap)可以更快地构建复杂布局。
    • :学习使用 React, Vue 或 Svelte 等前端框架,让你的页面内容可以动态加载和更新。
    • 动画效果:学习 CSS 动画或 GSAP 库,为页面添加更丰富的交互和视觉效果。