实践案例

案例一:响应式卡片布局

使用 CSS Grid 实现自适应的卡片网格布局,支持不同屏幕尺寸。

响应式卡片网格

难度:初级

实现步骤

  1. 创建 HTML 结构

    使用 div 容器包裹多个卡片元素

  2. 设置 Grid 容器

    使用 display: grid 和 grid-template-columns

  3. 实现响应式

    使用 repeat(auto-fit, minmax()) 实现自适应

  4. 添加卡片样式

    设置阴影、圆角、悬停效果

完整代码

<!-- HTML 结构 --> <div class="card-grid"> <div class="card">卡片 1</div> <div class="card">卡片 2</div> <div class="card">卡片 3</div> </div> /* CSS 样式 */ .card-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 2rem; padding: 2rem; } .card { background: white; border-radius: 8px; padding: 2rem; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.08); transition: transform 0.3s ease; } .card:hover { transform: translateY(-5px); }

关键知识点

1. auto-fit 自动填充可用空间

2. minmax(300px, 1fr) 设置最小 300px,最大占满剩余空间

3. gap 设置网格间距,无需使用 margin

4. transition 添加平滑的悬停动画

案例二:响应式导航菜单

实现桌面端水平导航、移动端汉堡菜单的响应式导航栏。

响应式导航菜单

难度:中级

实现步骤

  1. 创建导航 HTML

    nav 容器 + logo + 菜单列表 + 汉堡按钮

  2. 桌面端样式

    Flexbox 水平排列,隐藏汉堡按钮

  3. 移动端样式

    媒体查询切换为垂直排列,显示汉堡按钮

  4. JavaScript 交互

    点击汉堡按钮切换菜单显示状态

完整代码

<!-- HTML 结构 --> <nav class="navbar"> <div class="logo">Logo</div> <ul class="nav-links"> <li><a href="#">首页</a></li> <li><a href="#">关于</a></li> <li><a href="#">联系</a></li> </ul> <button class="hamburger"></button> </nav> /* CSS 样式 */ .navbar { display: flex; justify-content: space-between; align-items: center; padding: 1rem 2rem; background: #333; } .nav-links { display: flex; gap: 2rem; list-style: none; } .nav-links a { color: white; text-decoration: none; } .hamburger { display: none; background: none; border: none; color: white; font-size: 1.5rem; cursor: pointer; } /* 移动端样式 */ @media (max-width: 768px) { .hamburger { display: block; } .nav-links { display: none; position: absolute; top: 100%; left: 0; right: 0; flex-direction: column; background: #333; padding: 1rem; } .nav-links.active { display: flex; } } // JavaScript 交互 const hamburger = document.querySelector('.hamburger'); const navLinks = document.querySelector('.nav-links'); hamburger.addEventListener('click', () => { navLinks.classList.toggle('active'); });

关键知识点

1. 使用媒体查询切换布局模式

2. 移动端使用绝对定位展开菜单

3. JavaScript 切换 active 类控制显示

4. 桌面端隐藏汉堡按钮,移动端显示

案例三:登录页面

使用 Flexbox 实现居中的登录表单,包含表单验证和交互效果。

登录页面设计

难度:中级

实现步骤

  1. 创建表单结构

    form 容器 + 输入框 + 按钮

  2. 居中布局

    使用 Flexbox 实现垂直水平居中

  3. 表单样式

    输入框焦点效果、按钮悬停效果

  4. 表单验证

    HTML5 验证 + CSS 状态样式

完整代码

<!-- HTML 结构 --> <div class="login-container"> <form class="login-form"> <h2>登录</h2> <div class="form-group"> <label for="email">邮箱</label> <input type="email" id="email" required> </div> <div class="form-group"> <label for="password">密码</label> <input type="password" id="password" required> </div> <button type="submit">登录</button> </form> </div> /* CSS 样式 */ .login-container { display: flex; justify-content: center; align-items: center; min-height: 100vh; background: #f5f5f5; } .login-form { background: white; padding: 2rem; border-radius: 8px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); width: 100%; max-width: 400px; } .form-group { margin-bottom: 1rem; } .form-group label { display: block; margin-bottom: 0.5rem; color: #333; } .form-group input { width: 100%; padding: 0.8rem; border: 2px solid #e2e8f0; border-radius: 4px; transition: border-color 0.3s; } .form-group input:focus { outline: none; border-color: #667eea; } button[type="submit"] { width: 100%; padding: 0.8rem; background: #667eea; color: white; border: none; border-radius: 4px; cursor: pointer; transition: background 0.3s; } button[type="submit"]:hover { background: #764ba2; }

关键知识点

1. Flexbox 居中布局:justify-content + align-items

2. max-width 限制表单最大宽度

3. required 属性启用 HTML5 验证

4. :focus 伪类实现输入框焦点效果

5. transition 添加平滑过渡动画