基础响应式网页(静态内容)

这是一个最经典的网页结构,适合个人博客、作品集、公司介绍等静态内容展示。

JS网页设计源代码模板
(图片来源网络,侵删)

文件结构

project-root/
├── index.html
├── css/
│   └── style.css
└── js/
    └── main.js

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="css/style.css">
    <!-- 可以在这里添加 Font Awesome 等图标库 -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
</head>
<body>
    <header>
        <nav>
            <div class="logo">Logo</div>
            <ul class="nav-links">
                <li><a href="#home">首页</a></li>
                <li><a href="#about">lt;/a></li>
                <li><a href="#services">服务</a></li>
                <li><a href="#contact">联系</a></li>
            </ul>
        </nav>
    </header>
    <main>
        <section id="home">
            <h1>欢迎来到我的网站</h1>
            <p>这是一个使用 HTML, CSS 和 JavaScript 构建的响应式网页模板。</p>
            <button id="cta-button">了解更多</button>
        </section>
        <section id="about">
            <h2>关于我们</h2>
            <p>这里是关于我们的详细介绍...</p>
        </section>
    </main>
    <footer>
        <p>&copy; 2025 我的公司. 保留所有权利.</p>
    </footer>
    <!-- 引入 JavaScript 文件 -->
    <script src="js/main.js"></script>
</body>
</html>

css/style.css (样式)

/* 全局重置和基础样式 */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
body {
    font-family: 'Arial', sans-serif;
    line-height: 1.6;
    color: #333;
}
/* 头部导航 */
header {
    background: #333;
    color: #fff;
    padding: 1rem 0;
    position: sticky;
    top: 0;
    z-index: 1000;
}
nav {
    display: flex;
    justify-content: space-between;
    align-items: center;
    max-width: 1100px;
    margin: 0 auto;
    padding: 0 2rem;
}
.nav-links li {
    display: inline-block;
    margin-left: 20px;
}
.nav-links a {
    color: #fff;
    text-decoration: none;
    transition: color 0.3s ease;
}
.nav-links a:hover {
    color: #00d2ff;
}
区域 */
main {
    max-width: 1100px;
    margin: 2rem auto;
    padding: 0 2rem;
}
section {
    margin-bottom: 3rem;
}
h1, h2 {
    margin-bottom: 1rem;
}
#home {
    text-align: center;
    padding: 4rem 0;
}
#cta-button {
    background: #00d2ff;
    color: #fff;
    border: none;
    padding: 12px 24px;
    font-size: 1rem;
    cursor: pointer;
    border-radius: 5px;
    transition: background 0.3s ease;
}
#cta-button:hover {
    background: #00a8cc;
}
/* 页脚 */
footer {
    background: #333;
    color: #fff;
    text-align: center;
    padding: 1.5rem 0;
    margin-top: 2rem;
}
/* 响应式设计 */
@media (max-width: 768px) {
    nav {
        flex-direction: column;
        text-align: center;
    }
    .nav-links {
        margin-top: 1rem;
    }
    .nav-links li {
        display: block;
        margin: 10px 0;
    }
}

js/main.js (交互)

// 等待整个 HTML 文档加载完毕后执行
document.addEventListener('DOMContentLoaded', () => {
    // 获取 CTA 按钮
    const ctaButton = document.getElementById('cta-button');
    // 为按钮添加点击事件监听器
    ctaButton.addEventListener('click', () => {
        alert('感谢您的关注!这里可以跳转到其他页面或显示更多信息。');
    });
    // 平滑滚动到锚点
    document.querySelectorAll('a[href^="#"]').forEach(anchor => {
        anchor.addEventListener('click', function (e) {
            e.preventDefault();
            const target = document.querySelector(this.getAttribute('href'));
            if (target) {
                target.scrollIntoView({
                    behavior: 'smooth',
                    block: 'start'
                });
            }
        });
    });
    console.log('网页已加载,JavaScript 运行正常!');
});

交互式单页应用 (SPA)

这个模板模拟了一个简单的单页应用,页面内容通过 JavaScript 动态加载,无需刷新整个页面。

文件结构

project-root/
├── index.html
├── css/
│   └── style.css
└── js/
    └── app.js

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="css/style.css">
</head>
<body>
    <div id="app">
        <!-- 导航 -->
        <nav>
            <button data-page="home" class="nav-btn active">首页</button>
            <button data-page="about" class="nav-btn">lt;/button>
            <button data-page="contact" class="nav-btn">联系</button>
        </nav>
        <!-- 内容容器 -->
        <main id="page-content">
            <!-- 内容将通过 JavaScript 动态插入 -->
            <p>请从上方导航选择一个页面...</p>
        </main>
    </div>
    <script src="js/app.js"></script>
</body>
</html>

css/style.css (与模板一类似,略有调整)

/* 基础样式与模板一相同,这里只展示新增或修改的部分 */
#app {
    max-width: 800px;
    margin: 2rem auto;
    padding: 0 1rem;
    font-family: sans-serif;
}
nav {
    display: flex;
    gap: 10px;
    margin-bottom: 2rem;
    border-bottom: 1px solid #ccc;
    padding-bottom: 10px;
}
.nav-btn {
    padding: 10px 20px;
    border: 1px solid #ddd;
    background: #f4f4f4;
    cursor: pointer;
    border-radius: 5px;
    transition: all 0.3s ease;
}
.nav-btn.active {
    background: #007bff;
    color: white;
    border-color: #007bff;
}
#page-content {
    min-height: 400px;
    padding: 20px;
    border: 1px solid #eee;
    border-radius: 8px;
}

js/app.js (核心逻辑)

const pages = {
    home: {
        title: '欢迎来到首页',
        content: `
            <h1>首页内容</h1>
            <p>这是通过 JavaScript 动态加载的首页内容。</p>
            <p>您可以看到,点击导航按钮时,页面不会刷新,但内容会发生变化。</p>
        `
    },
    about: {
        title: '关于我们',
        content: `
            <h1>关于我们</h1>
            <p>我们是一个致力于创造美好网络体验的团队。</p>
            <p>我们专注于前端技术的创新与应用。</p>
        `
    },
    contact: {
        title: '联系我们',
        content: `
            <h1>联系我们</h1>
            <p>邮箱: contact@example.com</p>
            <p>电话: 123-456-7890</p>
            <p>地址: 北京市朝阳区某某街道</p>
        `
    }
};
// 获取 DOM 元素
const pageContent = document.getElementById('page-content');
const navButtons = document.querySelectorAll('.nav-btn');
// 函数:加载页面内容
function loadPage(pageId) {
    const page = pages[pageId];
    if (page) {
        pageContent.innerHTML = page.content;
        // 更新页面标题 (可选)
        document.title = page.title;
    }
}
// 为每个导航按钮添加点击事件
navButtons.forEach(button => {
    button.addEventListener('click', () => {
        // 1. 移除所有按钮的 'active' 类
        navButtons.forEach(btn => btn.classList.remove('active'));
        // 2. 给当前点击的按钮添加 'active' 类
        button.classList.add('active');
        // 3. 获取要加载的页面 ID 并加载内容
        const pageId = button.getAttribute('data-page');
        loadPage(pageId);
    });
});
// 页面加载时,默认加载首页
window.addEventListener('DOMContentLoaded', () => {
    loadPage('home');
});

功能丰富的组件化应用

这个模板引入了组件化思想,使用原生 JS 模拟框架(如 Vue/React)的一些核心功能,如数据绑定和事件处理,它非常适合构建复杂的、数据驱动的界面。

文件结构

project-root/
├── index.html
├── css/
│   └── style.css
└── js/
    ├── app.js         # 主应用逻辑
    └── components/
        └── todo.js    # 待办事项组件

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="css/style.css">
</head>
<body>
    <div id="app">
        <h1>我的待办事项</h1>
        <!-- 待办事项组件将被渲染在这里 -->
        <div id="todo-app"></div>
    </div>
    <script src="js/components/todo.js"></script>
    <script src="js/app.js"></script>
</body>
</html>

css/style.css

body {
    font-family: sans-serif;
    background-color: #f0f2f5;
    padding: 20px;
}
#app {
    max-width: 600px;
    margin: 0 auto;
    background: white;
    padding: 20px;
    border-radius: 8px;
    box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
#todo-app {
    margin-top: 20px;
}
.todo-input-group {
    display: flex;
    margin-bottom: 20px;
}
#new-todo-input {
    flex-grow: 1;
    padding: 10px;
    border: 1px solid #ddd;
    border-radius: 4px 0 0 4px;
}
#add-todo-btn {
    padding: 10px 15px;
    border: 1px solid #007bff;
    background: #007bff;
    color: white;
    border-radius: 0 4px 4px 0;
    cursor: pointer;
}
.todo-list {
    list-style: none;
}
.todo-item {
    display: flex;
    align-items: center;
    padding: 10px;
    border-bottom: 1px solid #eee;
}
.todo-item.completed .todo-text {
    text-decoration: line-through;
    color: #aaa;
}
.todo-checkbox {
    margin-right: 10px;
}
.todo-text {
    flex-grow: 1;
}
.delete-btn {
    background: #dc3545;
    color: white;
    border: none;
    padding: 5px 10px;
    border-radius: 4px;
    cursor: pointer;
}

js/components/todo.js (组件逻辑)

// 这是一个简单的待办事项组件
class TodoApp {
    constructor(containerId) {
        this.container = document.getElementById(containerId);
        this.todos = this.loadTodos(); // 从本地存储加载
        this.render();
    }
    // 从 localStorage 加载
    loadTodos() {
        const savedTodos = localStorage.getItem('todos');
        return savedTodos ? JSON.parse(savedTodos) : [];
    }
    // 保存到 localStorage
    saveTodos() {
        localStorage.setItem('todos', JSON.stringify(this.todos));
    }
    // 添加新待办事项
    addTodo(text) {
        if (text.trim() === '') return;
        const newTodo = {
            id: Date.now(),
            text: text,
            completed: false
        };
        this.todos.push(newTodo);
        this.saveTodos();
        this.render();
    }
    // 切换完成状态
    toggleTodo(id) {
        const todo = this.todos.find(t => t.id === id);
        if (todo) {
            todo.completed = !todo.completed;
            this.saveTodos();
            this.render();
        }
    }
    // 删除待办事项
    deleteTodo(id) {
        this.todos = this.todos.filter(t => t.id !== id);
        this.saveTodos();
        this.render();
    }
    // 渲染组件到 DOM
    render() {
        const html = `
            <div class="todo-input-group">
                <input type="text" id="new-todo-input" placeholder="添加一个新的待办事项...">
                <button id="add-todo-btn">添加</button>
            </div>
            <ul class="todo-list">
                ${this.todos.map(todo => `
                    <li class="todo-item ${todo.completed ? 'completed' : ''}">
                        <input type="checkbox" class="todo-checkbox" data-id="${todo.id}" ${todo.completed ? 'checked' : ''}>
                        <span class="todo-text">${todo.text}</span>
                        <button class="delete-btn" data-id="${todo.id}">删除</button>
                    </li>
                `).join('')}
            </ul>
        `;
        this.container.innerHTML = html;
        // 绑定事件
        this.bindEvents();
    }
    // 绑定事件委托
    bindEvents() {
        // 添加按钮点击事件
        const addBtn = this.container.querySelector('#add-todo-btn');
        const input = this.container.querySelector('#new-todo-input');
        addBtn.addEventListener('click', () => {
            this.addTodo(input.value);
            input.value = '';
        });
        // 输入框回车事件
        input.addEventListener('keypress', (e) => {
            if (e.key === 'Enter') {
                this.addTodo(input.value);
                input.value = '';
            }
        });
        // 使用事件委托处理复选框和删除按钮
        this.container.addEventListener('click', (e) => {
            const id = parseInt(e.target.getAttribute('data-id'));
            if (e.target.classList.contains('todo-checkbox')) {
                this.toggleTodo(id);
            } else if (e.target.classList.contains('delete-btn')) {
                this.deleteTodo(id);
            }
        });
    }
}

js/app.js (启动应用)

// 当 DOM 加载完成后,初始化我们的待办事项应用
document.addEventListener('DOMContentLoaded', () => {
    // 创建 TodoApp 实例,并挂载到 #todo-app 元素上
    new TodoApp('todo-app');
});

如何选择和使用这些模板?

  1. 基础响应式网页

    • 适用场景:新手入门、学习基础三件套、制作简单的展示型网站。
    • 核心:理解 HTML 结构、CSS 样式和基础的 JS 事件处理。
  2. 交互式单页应用

    JS网页设计源代码模板
    (图片来源网络,侵删)
    • 适用场景:个人作品集、小型产品介绍页、需要流畅用户体验的网站。
    • 核心:学习 DOM 操作、事件监听、状态管理和 history.pushState(本例未展示,但可以扩展)来实现无刷新页面切换。
  3. 功能丰富的组件化应用

    • 适用场景:复杂的 Web 应用、数据驱动的界面(如仪表盘、管理系统)、希望学习现代前端开发思想。
    • 核心:理解组件化思想、数据与视图的分离、事件委托、以及如何组织代码结构,这是向 Vue、React、Angular 等 MVVM 框架迈出的重要一步。

使用建议

  • 将代码复制到对应的文件中。
  • 使用 Visual Studio Code、Sublime Text 或任何你喜欢的代码编辑器打开项目文件夹。
  • 用浏览器打开 index.html 文件即可看到效果。
  • 修改代码,观察变化,这是学习的最好方式。
JS网页设计源代码模板
(图片来源网络,侵删)