下面我为你提供一个完整的大一作业项目方案,包含项目构思、功能规划、技术选型、详细的代码实现、以及如何提交和展示,你可以根据自己的兴趣和课程要求进行调整。

大一web网页设计作业代码
(图片来源网络,侵删)

项目构思与选题

对于大一学生来说,选择一个主题明确、功能不复杂但能展示所学技术的项目是最好的。

推荐选题:个人作品集/个人博客网站

  • 为什么推荐?
    1. 主题自由:可以完全围绕你自己展开,写你喜欢的电影、音乐、游戏,或者分享你的学习笔记、摄影作品等。
    2. 功能全面:可以完美地涵盖HTML(结构)、CSS(样式)、JavaScript(交互)三大块。
    3. 成果直观:做出来的网站就是你能力的最好证明,可以直接作为你未来的求职作品。
    4. 扩展性强:以后可以不断添加新功能,比如留言板、后台管理等。

功能规划

一个合格的“个人作品集”网站至少应包含以下页面和功能:

首页

大一web网页设计作业代码
(图片来源网络,侵删)
  • 顶部导航栏:固定在顶部,包含指向“首页”、“关于我”、“我的作品”、“联系方式”的链接。
  • 区域:一个醒目的欢迎语或你的个人介绍。
  • 个人简介卡片:一张你的照片、你的名字、一句话介绍。
  • 技能展示:用进度条或图标展示你掌握的技能(如HTML, CSS, JavaScript等)。
  • 最新作品预览:展示1-2个你最得意的作品,并链接到作品详情页。

关于我 页面

  • 详细介绍:你的学习经历、兴趣爱好、个人性格等。
  • 时间轴:用时间线的形式展示你的重要事件(如获奖经历、项目经历)。
  • 技能雷达图:用CSS或JS画一个简单的技能雷达图,更直观地展示你的能力分布。

我的作品 页面

  • 作品网格布局:用CSS Grid或Flexbox布局,展示多个作品的缩略图和标题。
  • 作品详情弹窗:点击某个作品后,不是跳转到新页面,而是在当前页面弹出一个模态框,展示大图、详细介绍和技术栈。

联系我 页面

  • 联系表单:包含姓名、邮箱、留言内容三个输入框和提交按钮。
  • 社交媒体图标:展示你的GitHub、微博、知乎等账号的图标。

技术选型

  • HTML5: 语义化标签(<header>, <nav>, <main>, <footer>, <section>, <article>)。
  • CSS3:
    • 布局:Flexbox (用于一维布局), Grid (用于二维布局)。
    • 样式:过渡 (transition)、动画 (animation)、变换 (transform)。
    • 响应式:媒体查询 (@media),让网站在手机和电脑上都能良好显示。
  • JavaScript (原生):
    • DOM操作:实现导航栏滚动高亮、作品详情模态框的显示/隐藏。
    • 事件监听:处理表单提交、按钮点击等。
    • 简单的动画:如滚动时的渐入效果。
  • 图标库:使用 Font AwesomeIonicons,方便快速添加图标。
  • 图片占位符:使用 Picsum Photos 生成随机图片作为作品或头像的占位符。

代码实现(示例)

下面我将为你提供首页作品详情模态框的核心代码片段,你可以基于此进行扩展。

大一web网页设计作业代码
(图片来源网络,侵删)

项目文件结构

一个清晰的项目结构非常重要。

my-portfolio/
├── index.html          # 首页
├── about.html          # 关于我
├── works.html          # 我的作品
├── contact.html        # 联系我
├── css/
│   └── style.css      # 全局样式
├── js/
│   └── script.js      # 全局脚本
└── images/
    ├── profile.jpg    # 你的头像
    └── work1.jpg      # 作品图片

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>
    <!-- 引入Font Awesome图标库 -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
    <!-- 引入CSS文件 -->
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <!-- 固定导航栏 -->
    <header class="navbar">
        <a href="index.html" class="logo">MyPortfolio</a>
        <nav>
            <a href="index.html" class="active">首页</a>
            <a href="about.html">关于我</a>
            <a href="works.html">我的作品</a>
            <a href="contact.html">联系我</a>
        </nav>
    </header>
    <main>
        <!-- 大标题区域 -->
        <section class="hero">
            <h1>你好,我是 <span class="highlight">张三</span></h1>
            <p>一名热爱前端开发的大一学生</p>
            <a href="works.html" class="btn">查看我的作品</a>
        </section>
        <!-- 个人简介卡片 -->
        <section class="intro-card">
            <img src="images/profile.jpg" alt="我的照片">
            <div>
                <h2>关于我</h2>
                <p>我正在学习Web开发,对创造美观且实用的网页充满热情,我相信好的设计能够改变世界。</p>
            </div>
        </section>
        <!-- 技能展示 -->
        <section class="skills">
            <h2>我的技能</h2>
            <div class="skill-item">
                <span>HTML/CSS</span>
                <div class="progress-bar">
                    <div class="progress" style="width: 85%;"></div>
                </div>
            </div>
            <div class="skill-item">
                <span>JavaScript</span>
                <div class="progress-bar">
                    <div class="progress" style="width: 70%;"></div>
                </div>
            </div>
            <!-- 可以添加更多技能 -->
        </section>
    </main>
    <!-- 引入JS文件 -->
    <script src="js/script.js"></script>
</body>
</html>

css/style.css (样式表示例)

/* 全局重置和基础样式 */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: 'Arial', sans-serif;
}
body {
    background-color: #f4f4f4;
    color: #333;
}
/* 导航栏样式 */
.navbar {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    background-color: #333;
    color: white;
    padding: 1rem 2rem;
    display: flex;
    justify-content: space-between;
    align-items: center;
    z-index: 1000;
}
.navbar a {
    color: white;
    text-decoration: none;
    margin-left: 20px;
    transition: color 0.3s;
}
.navbar a:hover, .navbar a.active {
    color: #00bfff;
}
/* Hero区域样式 */
.hero {
    height: 100vh; /* 让这个区域占满整个视口高度 */
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    text-align: center;
    background: linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url('https://picsum.photos/seed/hero/1600/900.jpg');
    background-size: cover;
    background-position: center;
    color: white;
    padding-top: 60px; /* 为固定导航栏留出空间 */
}
.hero h1 {
    font-size: 3rem;
    margin-bottom: 1rem;
}
.hero .highlight {
    color: #00bfff;
}
.btn {
    display: inline-block;
    padding: 12px 30px;
    background-color: #00bfff;
    color: white;
    text-decoration: none;
    border-radius: 5px;
    margin-top: 20px;
    transition: background-color 0.3s, transform 0.3s;
}
.btn:hover {
    background-color: #0080cc;
    transform: translateY(-3px);
}
/* 个人简介卡片 */
.intro-card {
    max-width: 800px;
    margin: 50px auto;
    display: flex;
    background: white;
    padding: 20px;
    border-radius: 10px;
    box-shadow: 0 5px 15px rgba(0,0,0,0.1);
}
.intro-card img {
    width: 150px;
    height: 150px;
    border-radius: 50%;
    object-fit: cover;
    margin-right: 20px;
}
/* 技能展示 */
.skills {
    max-width: 600px;
    margin: 50px auto;
    padding: 20px;
}
.skills h2 {
    text-align: center;
    margin-bottom: 30px;
}
.skill-item {
    margin-bottom: 20px;
}
.skill-item span {
    display: block;
    margin-bottom: 5px;
}
.progress-bar {
    height: 10px;
    background-color: #ddd;
    border-radius: 5px;
}
.progress {
    height: 100%;
    background-color: #00bfff;
    border-radius: 5px;
    width: 0; /* 初始为0,可以用JS动画让它变长 */
    transition: width 1.5s ease-in-out;
}

js/script.js (脚本示例)

// 当页面加载完成后执行
window.addEventListener('DOMContentLoaded', () => {
    // 1. 导航栏滚动高亮效果 (可选,但很加分)
    // window.addEventListener('scroll', () => {
    //     const navbar = document.querySelector('.navbar');
    //     if (window.scrollY > 50) {
    //         navbar.style.backgroundColor = 'rgba(51, 51, 51, 0.95)';
    //     } else {
    //         navbar.style.backgroundColor = '#333';
    //     }
    // });
    // 2. 技能条动画 (当滚动到技能区域时触发)
    const skillBars = document.querySelectorAll('.progress');
    const skillsSection = document.querySelector('.skills');
    const animateSkillBars = () => {
        const sectionTop = skillsSection.offsetTop;
        const sectionHeight = skillsSection.clientHeight;
        const windowHeight = window.innerHeight;
        const scrollTop = window.pageYOffset;
        if (scrollTop > (sectionTop - windowHeight + sectionHeight / 2)) {
            skillBars.forEach(bar => {
                const width = bar.getAttribute('style').match(/width:\s*(\d+%)/)[1];
                bar.style.width = width;
            });
        }
    };
    window.addEventListener('scroll', animateSkillBars);
    animateSkillBars(); // 初始检查一次
    // 3. 作品详情模态框 (逻辑应写在works.html中,但为了完整性,这里展示核心逻辑)
    // 在works.html中,你需要给每个作品项添加一个类名,"work-item"
    // const workItems = document.querySelectorAll('.work-item');
    // const modal = document.getElementById('work-modal'); // 模态框的HTML结构
    // const modalImg = document.getElementById('modal-img'); // 模态框中的图片
    // const modalTitle = document.getElementById('modal-title'); // 模态框中的标题
    // const modalDesc = document.getElementById('modal-desc'); // 模态框中的描述
    // const closeBtn = document.querySelector('.close'); // 关闭按钮
    // workItems.forEach(item => {
    //     item.addEventListener('click', () => {
    //         // 获取该作品的数据
    //         const imgSrc = item.querySelector('img').src;
    //         const title = item.querySelector('h3').innerText;
    //         const desc = item.querySelector('p').innerText;
    //         // 将数据填入模态框
    //         modalImg.src = imgSrc;
    //         modalTitle.innerText = title;
    //         modalDesc.innerText = desc;
    //         // 显示模态框
    //         modal.style.display = 'block';
    //     });
    // });
    // closeBtn.addEventListener('click', () => {
    //     modal.style.display = 'none';
    // });
    // window.addEventListener('click', (e) => {
    //     if (e.target === modal) {
    //         modal.style.display = 'none';
    //     }
    // });
});

如何让你的作业更出色?

  1. 响应式设计:一定要加上媒体查询 (@media),让你的网站在手机上看起来也很好,这是老师非常看重的一点。
  2. 细节打磨
    • 为所有可交互元素(链接、按钮)添加 hover 效果。
    • 使用平滑滚动 (scroll-behavior: smooth;)。
    • 添加加载动画或页面滚动时的渐入效果。
  3. 代码规范
    • 代码缩进清晰,使用2个或4个空格。
    • 变量和函数命名要有意义。
    • 添加必要的注释,解释关键代码的作用。
  4. 交互性:除了模态框,还可以在“联系我”页面做一个简单的表单验证,比如检查邮箱格式是否正确。

提交和展示

  1. 打包:将整个 my-portfolio 文件夹压缩成一个 .zip 文件。
  2. 说明文档:在压缩包里创建一个 README.txt说明文档.md 文件,简单介绍你的项目、包含的页面和功能,以及如何运行(通常是直接用浏览器打开 index.html 即可)。
  3. 在线部署(加分项)
    • 注册一个 GitHub 账号。
    • 创建一个新的仓库,将你的代码上传。
    • 使用 GitHub Pages 功能,可以将你的网站免费部署到互联网上,生成一个网址,这样老师可以直接在线查看你的作业,体验更好。

希望这份详细的指南能帮助你顺利完成大一的Web作业!祝你取得好成绩!