HTML实战项目4:响应式设计

在本章节中,我们将学习如何使用HTML和CSS创建响应式网站,适配不同屏幕尺寸和设备。响应式设计是现代Web开发的重要组成部分,随着移动设备的普及,创建能够在各种设备上良好显示的网站变得越来越重要。

一个成功的响应式网站应该具备以下特点:

  • 在不同屏幕尺寸下都能提供良好的用户体验
  • 自适应布局,根据设备宽度自动调整
  • 优化的图片和资源加载
  • 触摸友好的交互设计
  • 快速的加载速度
  • 良好的SEO表现

通过本项目,您将掌握响应式设计的核心概念和技术,能够创建一个现代化、自适应的响应式网站。

1. 项目概述

1.1 项目目标

创建一个响应式设计的网站,包含以下核心功能:

  • 自适应布局,适配从移动设备到桌面的各种屏幕尺寸
  • 响应式导航,在移动设备上转换为汉堡菜单
  • 响应式图片处理,根据设备加载适当尺寸的图片
  • 移动优先设计,从移动端开始设计,逐步扩展到桌面端
  • 流畅的过渡效果和动画

1.2 技术栈

  • HTML5:用于构建网站的结构和内容
  • CSS3:用于实现响应式布局和样式
  • JavaScript:用于实现响应式导航和交互效果

1.3 项目特点

  • 移动优先设计理念
  • 使用CSS Grid和Flexbox实现响应式布局
  • 媒体查询适配不同屏幕尺寸
  • 响应式图片处理
  • 触摸友好的交互设计
  • 流畅的动画和过渡效果

2. 响应式设计核心概念

2.1 什么是响应式设计

响应式设计是一种网页设计方法,使网站能够根据访问设备的屏幕尺寸、方向和分辨率自动调整布局和内容。响应式设计的目标是为所有设备提供最佳的用户体验,无论用户使用的是手机、平板还是桌面电脑。

2.2 响应式设计的核心原则

  1. 流动网格:使用相对单位(如百分比)代替固定单位(如像素)来定义布局,使元素能够根据屏幕尺寸自动调整。
  2. 灵活图片:确保图片能够根据容器大小自动调整,避免在小屏幕上显示过大的图片。
  3. 媒体查询:根据设备的特性(如屏幕宽度、分辨率、方向)应用不同的CSS样式。
  4. 移动优先:从移动端开始设计,逐步扩展到桌面端,确保在移动设备上有良好的用户体验。
  5. 断点设计:选择合适的断点(屏幕宽度)来调整布局,确保在不同设备上都有最佳的显示效果。

2.3 响应式设计的关键技术

  • CSS Grid:用于创建二维网格布局,支持响应式设计
  • Flexbox:用于创建一维弹性布局,适合处理导航、卡片等组件
  • 媒体查询:用于根据设备特性应用不同的CSS样式
  • 相对单位:如百分比、em、rem、vw/vh等,用于创建流动布局
  • 响应式图片:使用srcset、sizes属性和picture元素来实现图片的响应式加载

3. 设计思路

3.1 移动优先设计

采用移动优先的设计理念,从移动端开始设计,逐步扩展到桌面端。移动优先设计有以下优势:

  • 确保在移动设备上有良好的用户体验
  • 减少不必要的CSS代码
  • 提高网站的加载速度
  • 更好的SEO表现

3.2 布局设计

使用CSS Grid和Flexbox结合的方式实现响应式布局:

  • 移动端:单列布局,简单的导航菜单
  • 平板端:双列布局,扩展的导航菜单
  • 桌面端:多列布局,完整的导航菜单和侧边栏

3.3 断点设计

选择以下断点来适配不同设备:

  • 移动端:小于768px
  • 平板端:768px - 1024px
  • 桌面端:大于1024px

3.4 响应式导航设计

  • 移动端:使用汉堡菜单,点击后展开导航
  • 平板端:简化的导航菜单,显示主要链接
  • 桌面端:完整的水平导航菜单

4. 实现步骤

4.1 步骤1:创建项目结构

创建响应式网站的目录结构:

responsive-website/
├── index.html              # 首页
├── about.html              # 关于页
├── services.html           # 服务页
├── contact.html            # 联系页
├── css/
│   ├── style.css           # 主样式文件
│   └── responsive.css      # 响应式样式文件
├── js/
│   └── script.js           # 主脚本文件
├── images/                 # 图片资源
│   ├── desktop/            # 桌面端图片
│   ├── tablet/             # 平板端图片
│   └── mobile/             # 移动端图片
└── fonts/                  # 自定义字体(可选)

4.2 步骤2:创建HTML基础结构

为所有页面创建统一的HTML基础结构,采用移动优先的设计理念:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>响应式网站 - 首页</title>
    <meta name="description" content="一个现代化的响应式网站">
    <meta name="keywords" content="响应式设计, 移动优先, HTML5, CSS3">
    <link rel="stylesheet" href="css/style.css">
    <link rel="stylesheet" href="css/responsive.css">
    <link rel="icon" href="images/favicon.ico">
    <!-- 引入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 class="header">
        <div class="container">
            <div class="header-content">
                <div class="logo">
                    <h1><a href="index.html">响应式网站</a></h1>
                </div>
                <nav class="nav">
                    <ul class="nav-menu">
                        <li><a href="index.html" class="nav-link active">首页</a></li>
                        <li><a href="about.html" class="nav-link">关于</a></li>
                        <li><a href="services.html" class="nav-link">服务</a></li>
                        <li><a href="contact.html" class="nav-link">联系</a></li>
                    </ul>
                    <button class="nav-toggle" aria-label="切换导航">
                        <i class="fas fa-bars"></i>
                    </button>
                </nav>
            </div>
        </div>
    </header>

    <!-- 主要内容 -->
    <main class="main">
        <!-- 英雄区 -->
        <section class="hero">
            <div class="container">
                <div class="hero-content">
                    <h2>欢迎来到响应式网站</h2>
                    <p>这是一个采用移动优先设计理念的现代化响应式网站,适配各种屏幕尺寸和设备。</p>
                    <a href="about.html" class="cta-button">了解更多</a>
                </div>
            </div>
        </section>

        <!-- 特性区 -->
        <section class="features">
            <div class="container">
                <h2 class="section-title">我们的特性</h2>
                <div class="features-grid">
                    <!-- 特性项1 -->
                    <div class="feature-item">
                        <i class="fas fa-mobile-alt"></i>
                        <h3>移动优先</h3>
                        <p>从移动端开始设计,确保在移动设备上有良好的用户体验。</p>
                    </div>
                    <!-- 特性项2 -->
                    <div class="feature-item">
                        <i class="fas fa-desktop"></i>
                        <h3>响应式布局</h3>
                        <p>自适应不同屏幕尺寸,从手机到桌面都能良好显示。</p>
                    </div>
                    <!-- 特性项3 -->
                    <div class="feature-item">
                        <i class="fas fa-bolt"></i>
                        <h3>快速加载</h3>
                        <p>优化的代码和资源加载,确保网站快速加载。</p>
                    </div>
                    <!-- 特性项4 -->
                    <div class="feature-item">
                        <i class="fas fa-paint-brush"></i>
                        <h3>现代设计</h3>
                        <p>采用现代设计理念,提供良好的视觉体验。</p>
                    </div>
                </div>
            </div>
        </section>

        <!-- 服务区 -->
        <section class="services">
            <div class="container">
                <h2 class="section-title">我们的服务</h2>
                <div class="services-grid">
                    <!-- 服务项1 -->
                    <div class="service-item">
                        <img src="images/services/service1.jpg" alt="Web设计" class="service-image">
                        <h3>Web设计</h3>
                        <p>创建现代化、美观的网站设计,提升品牌形象。</p>
                        <a href="services.html" class="service-link">了解更多</a>
                    </div>
                    <!-- 服务项2 -->
                    <div class="service-item">
                        <img src="images/services/service2.jpg" alt="Web开发" class="service-image">
                        <h3>Web开发</h3>
                        <p>使用最新技术开发功能完整、性能优良的网站。</p>
                        <a href="services.html" class="service-link">了解更多</a>
                    </div>
                    <!-- 服务项3 -->
                    <div class="service-item">
                        <img src="images/services/service3.jpg" alt="响应式设计" class="service-image">
                        <h3>响应式设计</h3>
                        <p>创建适配各种设备的响应式网站,提供良好的用户体验。</p>
                        <a href="services.html" class="service-link">了解更多</a>
                    </div>
                </div>
            </div>
        </section>

        <!-- 联系区 -->
        <section class="contact">
            <div class="container">
                <h2 class="section-title">联系我们</h2>
                <div class="contact-content">
                    <p>如果您对我们的服务感兴趣,或者有任何问题,欢迎随时联系我们。</p>
                    <a href="contact.html" class="cta-button">联系我们</a>
                </div>
            </div>
        </section>
    </main>

    <!-- 页脚 -->
    <footer class="footer">
        <div class="container">
            <div class="footer-content">
                <div class="footer-section">
                    <h3>关于我们</h3>
                    <p>我们是一家专业的Web设计和开发公司,致力于为客户创建现代化、响应式的网站。</p>
                </div>
                <div class="footer-section">
                    <h3>快速链接</h3>
                    <ul class="footer-links">
                        <li><a href="index.html">首页</a></li>
                        <li><a href="about.html">关于</a></li>
                        <li><a href="services.html">服务</a></li>
                        <li><a href="contact.html">联系</a></li>
                    </ul>
                </div>
                <div class="footer-section">
                    <h3>联系方式</h3>
                    <p>邮箱:info@example.com</p>
                    <p>电话:123-456-7890</p>
                    <p>地址:北京市朝阳区XX大厦</p>
                </div>
            </div>
            <div class="footer-bottom">
                <p>&copy; 2024 响应式网站. 保留所有权利.</p>
            </div>
        </div>
    </footer>

    <!-- JavaScript文件 -->
    <script src="js/script.js"></script>
</body>
</html>

4.3 步骤3:实现CSS样式

创建CSS样式文件,采用移动优先的设计理念,先定义移动端样式,然后通过媒体查询扩展到更大的屏幕尺寸:

/* 重置样式 */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: 'Inter', sans-serif;
    line-height: 1.6;
    color: #333;
    background-color: #f8f9fa;
}

/* 容器样式 */
.container {
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 20px;
}

/* 头部样式 */
.header {
    background-color: #fff;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
    padding: 20px 0;
    position: sticky;
    top: 0;
    z-index: 1000;
}

.header-content {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.logo h1 {
    font-size: 1.5rem;
    margin: 0;
}

.logo a {
    color: #333;
    text-decoration: none;
}

/* 导航样式 */
.nav {
    position: relative;
}

.nav-menu {
    position: fixed;
    top: 70px;
    left: -100%;
    flex-direction: column;
    background-color: #fff;
    width: 100%;
    text-align: center;
    transition: 0.3s;
    box-shadow: 0 10px 27px rgba(0, 0, 0, 0.05);
    padding: 20px 0;
    gap: 15px;
    z-index: 999;
}

.nav-menu.active {
    left: 0;
}

.nav-menu {
    list-style: none;
}

.nav-link {
    text-decoration: none;
    color: #333;
    font-weight: 500;
    transition: color 0.3s ease;
}

.nav-link:hover, .nav-link.active {
    color: #007bff;
}

.nav-toggle {
    display: block;
    background: none;
    border: none;
    font-size: 1.5rem;
    cursor: pointer;
    color: #333;
}

/* 英雄区样式 */
.hero {
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    color: #fff;
    padding: 80px 0;
    text-align: center;
}

.hero h2 {
    font-size: 2rem;
    margin-bottom: 20px;
}

.hero p {
    font-size: 1.1rem;
    margin-bottom: 30px;
    max-width: 600px;
    margin-left: auto;
    margin-right: auto;
}

/* CTA按钮样式 */
.cta-button {
    display: inline-block;
    background-color: #fff;
    color: #667eea;
    padding: 12px 30px;
    border-radius: 50px;
    text-decoration: none;
    font-weight: 600;
    transition: all 0.3s ease;
}

.cta-button:hover {
    transform: translateY(-3px);
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}

/* 区块标题样式 */
.section-title {
    font-size: 1.8rem;
    text-align: center;
    margin-bottom: 40px;
    color: #333;
}

/* 特性区样式 */
.features {
    padding: 60px 0;
    background-color: #fff;
}

.features-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 30px;
}

.feature-item {
    text-align: center;
    padding: 30px;
    background-color: #f8f9fa;
    border-radius: 8px;
    transition: all 0.3s ease;
}

.feature-item:hover {
    transform: translateY(-5px);
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
}

.feature-item i {
    font-size: 2.5rem;
    color: #667eea;
    margin-bottom: 20px;
}

.feature-item h3 {
    font-size: 1.3rem;
    margin-bottom: 15px;
    color: #333;
}

/* 服务区样式 */
.services {
    padding: 60px 0;
    background-color: #f8f9fa;
}

.services-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 30px;
}

.service-item {
    background-color: #fff;
    border-radius: 8px;
    overflow: hidden;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
    transition: all 0.3s ease;
}

.service-item:hover {
    transform: translateY(-5px);
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
}

.service-image {
    width: 100%;
    height: 200px;
    object-fit: cover;
}

.service-item h3 {
    padding: 20px 20px 10px;
    font-size: 1.3rem;
    color: #333;
}

.service-item p {
    padding: 0 20px 20px;
    color: #666;
    margin-bottom: 20px;
}

.service-link {
    display: inline-block;
    margin: 0 20px 20px;
    color: #007bff;
    text-decoration: none;
    font-weight: 500;
    transition: all 0.3s ease;
}

.service-link:hover {
    transform: translateX(5px);
}

/* 联系区样式 */
.contact {
    padding: 60px 0;
    background-color: #667eea;
    color: #fff;
    text-align: center;
}

.contact h2 {
    color: #fff;
}

.contact p {
    font-size: 1.1rem;
    margin-bottom: 30px;
    max-width: 600px;
    margin-left: auto;
    margin-right: auto;
}

.contact .cta-button {
    background-color: #fff;
    color: #667eea;
}

/* 页脚样式 */
.footer {
    background-color: #333;
    color: #fff;
    padding: 40px 0 20px;
}

.footer-content {
    display: grid;
    grid-template-columns: 1fr;
    gap: 30px;
    margin-bottom: 30px;
}

.footer-section h3 {
    margin-bottom: 20px;
    font-size: 1.2rem;
    color: #fff;
}

.footer-section p {
    margin-bottom: 15px;
    color: #ccc;
    font-size: 0.95rem;
    line-height: 1.6;
}

.footer-links {
    list-style: none;
}

.footer-links li {
    margin-bottom: 10px;
}

.footer-links a {
    color: #ccc;
    text-decoration: none;
    font-size: 0.95rem;
    transition: color 0.3s ease;
}

.footer-links a:hover {
    color: #007bff;
}

.footer-bottom {
    text-align: center;
    padding-top: 20px;
    border-top: 1px solid rgba(255, 255, 255, 0.1);
    color: #ccc;
    font-size: 0.9rem;
}

/* 响应式设计 */

/* 平板设备 */
@media (min-width: 768px) {
    /* 导航样式 */
    .nav-menu {
        position: static;
        flex-direction: row;
        background-color: transparent;
        width: auto;
        box-shadow: none;
        padding: 0;
        gap: 30px;
    }
    
    .nav-toggle {
        display: none;
    }
    
    /* 英雄区样式 */
    .hero h2 {
        font-size: 2.5rem;
    }
    
    /* 特性区样式 */
    .features-grid {
        grid-template-columns: repeat(2, 1fr);
    }
    
    /* 服务区样式 */
    .services-grid {
        grid-template-columns: repeat(2, 1fr);
    }
    
    /* 页脚样式 */
    .footer-content {
        grid-template-columns: repeat(2, 1fr);
    }
}

/* 桌面设备 */
@media (min-width: 1024px) {
    /* 英雄区样式 */
    .hero h2 {
        font-size: 3rem;
    }
    
    /* 特性区样式 */
    .features-grid {
        grid-template-columns: repeat(4, 1fr);
    }
    
    /* 服务区样式 */
    .services-grid {
        grid-template-columns: repeat(3, 1fr);
    }
    
    /* 页脚样式 */
    .footer-content {
        grid-template-columns: repeat(3, 1fr);
    }
}

/* 大型桌面设备 */
@media (min-width: 1440px) {
    /* 容器样式 */
    .container {
        max-width: 1400px;
    }
    
    /* 英雄区样式 */
    .hero {
        padding: 120px 0;
    }
    
    /* 区块样式 */
    .features, .services, .contact {
        padding: 80px 0;
    }
}

4.4 步骤4:添加响应式导航JavaScript

创建JavaScript文件,实现响应式导航菜单:

// 脚本文件:script.js

// DOM加载完成后执行
document.addEventListener('DOMContentLoaded', function() {
    // 响应式导航菜单
    const navToggle = document.querySelector('.nav-toggle');
    const navMenu = document.querySelector('.nav-menu');
    
    if (navToggle && navMenu) {
        navToggle.addEventListener('click', function() {
            navMenu.classList.toggle('active');
        });
    }
    
    // 平滑滚动
    const smoothLinks = document.querySelectorAll('a[href^="#"]');
    smoothLinks.forEach(link => {
        link.addEventListener('click', function(e) {
            e.preventDefault();
            
            const targetId = this.getAttribute('href');
            if (targetId === '#') return;
            
            const targetElement = document.querySelector(targetId);
            if (targetElement) {
                window.scrollTo({
                    top: targetElement.offsetTop - 80,
                    behavior: 'smooth'
                });
            }
        });
    });
    
    // 回到顶部按钮
    const backToTopButton = document.createElement('button');
    backToTopButton.innerHTML = '<i class="fas fa-chevron-up"></i>';
    backToTopButton.className = 'back-to-top';
    document.body.appendChild(backToTopButton);
    
    // 初始隐藏回到顶部按钮
    backToTopButton.style.display = 'none';
    backToTopButton.style.position = 'fixed';
    backToTopButton.style.bottom = '30px';
    backToTopButton.style.right = '30px';
    backToTopButton.style.width = '50px';
    backToTopButton.style.height = '50px';
    backToTopButton.style.border = 'none';
    backToTopButton.style.borderRadius = '50%';
    backToTopButton.style.background = '#667eea';
    backToTopButton.style.color = '#fff';
    backToTopButton.style.fontSize = '1.2rem';
    backToTopButton.style.cursor = 'pointer';
    backToTopButton.style.boxShadow = '0 2px 10px rgba(0, 0, 0, 0.2)';
    backToTopButton.style.transition = 'all 0.3s ease';
    
    // 滚动事件监听
    window.addEventListener('scroll', function() {
        if (window.pageYOffset > 300) {
            backToTopButton.style.display = 'block';
        } else {
            backToTopButton.style.display = 'none';
        }
    });
    
    // 回到顶部功能
    backToTopButton.addEventListener('click', function() {
        window.scrollTo({
            top: 0,
            behavior: 'smooth'
        });
    });
});

4.5 步骤5:实现响应式图片

使用HTML的响应式图片特性,根据设备加载适当尺寸的图片:

<!-- 使用srcset和sizes属性 -->
<img src="images/mobile/service1.jpg" 
     srcset="images/mobile/service1.jpg 320w, 
             images/tablet/service1.jpg 768w, 
             images/desktop/service1.jpg 1200w" 
     sizes="(max-width: 767px) 320px, 
            (max-width: 1023px) 768px, 
            1200px" 
     alt="服务图片" class="service-image">

<!-- 使用picture元素 -->
<picture>
    <source media="(max-width: 767px)" srcset="images/mobile/service1.jpg">
    <source media="(max-width: 1023px)" srcset="images/tablet/service1.jpg">
    <img src="images/desktop/service1.jpg" alt="服务图片" class="service-image">
</picture>

5. 功能扩展

您可以根据自己的需求扩展响应式网站的功能:

  1. 添加响应式图片库:实现图片的响应式展示和画廊功能
  2. 实现响应式表格:在小屏幕上优化表格的显示
  3. 添加响应式表单:优化表单在不同设备上的显示和交互
  4. 实现响应式视频:确保视频在不同设备上都能良好播放
  5. 添加黑暗模式:支持切换明亮/黑暗主题
  6. 实现离线支持:使用Service Worker实现网站的离线访问
  7. 添加PWA功能:将网站转换为渐进式Web应用
  8. 优化加载性能:使用懒加载、预加载等技术优化网站加载速度
  9. 添加无障碍支持:确保网站对所有用户都可访问
  10. 实现多语言支持:添加网站的多语言切换功能

6. 常见问题解答

Q: 什么是移动优先设计?

A: 移动优先设计是一种设计理念,从移动端开始设计,逐步扩展到桌面端。这种设计方法确保在移动设备上有良好的用户体验,同时减少不必要的CSS代码,提高网站的加载速度。

Q: 如何选择合适的断点?

A: 选择断点时,应该考虑常见设备的屏幕尺寸,但不应该过度依赖特定设备。建议使用以下断点:

  • 移动端:小于768px
  • 平板端:768px - 1024px
  • 桌面端:大于1024px

Q: 如何优化响应式网站的加载速度?

A: 优化响应式网站的加载速度可以通过以下方式:

  • 使用响应式图片,根据设备加载适当尺寸的图片
  • 压缩CSS和JavaScript文件
  • 使用CDN加速资源加载
  • 实现缓存机制
  • 减少HTTP请求
  • 优化字体加载

Q: 如何测试响应式网站?

A: 测试响应式网站可以通过以下方式:

  • 使用浏览器的开发者工具模拟不同设备
  • 在实际设备上测试
  • 使用在线响应式测试工具
  • 测试不同网络条件下的表现

Q: CSS Grid和Flexbox哪个更适合响应式设计?

A: CSS Grid和Flexbox都适合响应式设计,它们可以结合使用:

  • CSS Grid适合创建二维布局,如页面整体布局
  • Flexbox适合创建一维布局,如导航菜单、卡片列表等

Q: 如何实现响应式导航?

A: 实现响应式导航可以通过以下方式:

  • 在移动端使用汉堡菜单,点击后展开导航
  • 使用JavaScript控制导航菜单的显示和隐藏
  • 确保导航在所有设备上都易于使用
  • 为触摸设备优化导航交互

7. 练习项目

  1. 创建一个响应式网站,包含以下页面:

    • 首页:包含英雄区、特性展示、服务介绍等
    • 关于页:公司或个人介绍
    • 服务页:详细的服务介绍
    • 联系页:联系表单和联系方式
  2. 实现以下响应式功能:

    • 移动优先设计
    • 响应式导航,在移动端转换为汉堡菜单
    • 响应式布局,适配不同屏幕尺寸
    • 响应式图片处理
    • 触摸友好的交互设计
  3. 优化网站:

    • 优化加载速度
    • 确保良好的可访问性
    • 添加适当的动画和过渡效果
    • 优化SEO表现
  4. 测试网站:

    • 在不同设备上测试网站的显示效果
    • 测试网站的加载速度
    • 测试网站的交互功能

8. 小结

通过本实战项目,您已经学习了如何使用HTML和CSS创建响应式网站,适配不同屏幕尺寸和设备。您掌握了响应式设计的核心概念和技术,包括移动优先设计、媒体查询、CSS Grid和Flexbox布局、响应式图片处理等。

响应式设计是现代Web开发的重要组成部分,随着移动设备的普及,创建能够在各种设备上良好显示的网站变得越来越重要。通过不断学习和实践,您可以进一步提升自己的响应式设计能力,创建更加优秀的响应式网站。

希望本项目能够帮助您入门响应式设计,并为您的Web开发之旅打下坚实的基础。在下一章节中,我们将学习HTML常见问题解答,进一步提升您的HTML开发能力。

« 上一篇 HTML实战项目3:博客网站 下一篇 » HTML常见问题解答