【GLM-5 陪练式前端新手入门】第四篇:卡片布局 ------ 让个人主页内容更有层次
目录
[【GLM-5 陪练式前端新手入门】第四篇:卡片布局 ------ 让个人主页内容更有层次](#【GLM-5 陪练式前端新手入门】第四篇:卡片布局 —— 让个人主页内容更有层次)
[1 项目背景:给个人主页填充 "内容卡片"](#1 项目背景:给个人主页填充 “内容卡片”)
[2 AI 赋能:向 GLM-5 提出卡片布局学习需求](#2 AI 赋能:向 GLM-5 提出卡片布局学习需求)
[3 快速落地:跟着 AI 搭建响应式卡片布局](#3 快速落地:跟着 AI 搭建响应式卡片布局)
[3.1 核心实现思路:卡片布局就像 "便签排列"](#3.1 核心实现思路:卡片布局就像 “便签排列”)
[3.2 代码实践:编写有交互效果的卡片布局](#3.2 代码实践:编写有交互效果的卡片布局)
[3.3 本地运行:3 步查看卡片布局效果](#3.3 本地运行:3 步查看卡片布局效果)
[3.4 动手练习:修改卡片,巩固知识点](#3.4 动手练习:修改卡片,巩固知识点)
[4 实践感悟:卡片布局是个人主页的 "内容骨架"](#4 实践感悟:卡片布局是个人主页的 “内容骨架”)
🎯 主题 1:初体验拾光 ------ AI 陪练式前端新手入门
本文聚焦 GLM-5 引导零基础新手从导航栏制作进阶到卡片布局的实战过程。
活动仓库链接:https://atomgit.com/GitCode/0daymodel
1 项目背景:给个人主页填充 "内容卡片"
在第三篇的学习中,我借助 GLM-5 完成了网页导航栏,解决了 "用户去哪里" 的问题,但个人主页还缺少核心的内容展示载体。导航栏只是 "指路牌",真正让页面有价值的,是清晰呈现的作品、技能或个人信息 ------ 而卡片布局,就是前端开发中最常用的内容展示方式。
作为零基础新手,我对卡片布局的实现逻辑一无所知:不知道如何让卡片整齐排列,也不明白如何让它们在不同屏幕上自适应。于是我再次求助 GLM-5,希望延续 "一步一知识点、一步一练习" 的陪练模式,学会制作响应式、有设计感的卡片布局。
2 AI 赋能:向 GLM-5 提出卡片布局学习需求
延续之前的学习节奏,我向 GLM-5 提出了精准的卡片布局学习需求:
"我已经学会了 HTML、CSS 基础和导航栏制作,现在要学习第四步:卡片布局。请你用通俗易懂的语言讲解卡片布局的核心实现思路,提供可直接运行的 HTML+CSS 代码,布置一个小练习(比如修改卡片的大小、间距或内容),并解释关键代码的含义。"
GLM-5 不仅拆解了卡片布局的 "便签卡片" 核心思路,还指定了技术栈(Tailwind CSS、Inter 字体、Lucide Icons),设计了带有悬停交互效果的卡片示例,兼顾了教学性和视觉吸引力,让我能直观感受到卡片布局的作用。


用户已经学会了 HTML、CSS 基础和导航栏制作,现在要学习第四步:卡片布局。我需要:
1. 用通俗易懂的语言讲解卡片布局的核心实现思路
2. 提供可直接运行的 HTML+CSS 代码
3. 布置一个小练习
4. 解释关键代码的含义
按照设计规格,我需要使用:
- Tailwind CSS
- Inter 字体
- Lucide Icons
- 配色方案
- 卡片样式(圆角、阴影、边框等)
让我设计一个教学性质的卡片布局页面,展示卡片的核心概念。
卡片布局的核心思路:
1. 容器包裹多个卡片
2. 使用 Flexbox 或 Grid 排列卡片
3. 卡片本身是一个独立的"盒子",包含图片、标题、描述、按钮等
4. 卡片有圆角、阴影、边框等视觉效果
5. 卡片有 hover 交互效果
我会创建一个简单但完整的示例,包含:
- 多个卡片
- 不同排列方式展示
- hover 效果
- 响应式布局
代码要简洁易懂,适合初学者学习# 卡片布局教程
## 核心思路(通俗理解)
**卡片布局就像"便签卡片"的排列:**
1. **每个卡片** = 一个独立的"小盒子",里面装着图片、标题、文字、按钮
2. **卡片容器** = 一个"大托盘",把所有卡片整齐地摆放在里面
3. **排列方式** = 用 Flexbox(弹性盒子)让卡片自动换行、均匀分布
4. **视觉美化** = 圆角边框 + 阴影 = 卡片"浮起来"的感觉
---
## 完整代码示例
```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>
<!-- 字体 -->
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
<!-- 图标 -->
<script src="https://unpkg.com/lucide@latest"></script>
<!-- Tailwind CSS -->
<script src="https://cdn.tailwindcss.com"></script>
<style>
* { font-family: 'Inter', sans-serif; }
</style>
</head>
<body class="bg-slate-50 min-h-screen">
<!-- 页面标题 -->
<header class="text-center py-12">
<h1 class="text-3xl font-semibold text-slate-900 tracking-tight">卡片布局示例</h1>
<p class="text-slate-500 mt-2">学会这个,你就能做出精美的产品展示页!</p>
</header>
<!-- ============================================ -->
<!-- 核心区域:卡片容器 + 多个卡片 -->
<!-- ============================================ -->
<main class="max-w-6xl mx-auto px-6 pb-16">
<!-- 卡片容器(大托盘) -->
<div class="flex flex-wrap gap-6 justify-center">
<!-- 卡片 1 -->
<div class="card">
<img src="https://picsum.photos/seed/card1/400/240.jpg" alt="卡片图片" class="card-image">
<div class="card-content">
<h3 class="card-title">精美设计</h3>
<p class="card-text">每个卡片都是独立的内容单元,可以包含图片、文字和按钮。</p>
<button class="card-button">
<i data-lucide="arrow-right" class="w-4 h-4"></i>
了解更多
</button>
</div>
</div>
<!-- 卡片 2 -->
<div class="card">
<img src="https://picsum.photos/seed/card2/400/240.jpg" alt="卡片图片" class="card-image">
<div class="card-content">
<h3 class="card-title">灵活布局</h3>
<p class="card-text">使用 Flexbox 可以轻松实现卡片的自动换行和均匀分布。</p>
<button class="card-button">
<i data-lucide="arrow-right" class="w-4 h-4"></i>
了解更多
</button>
</div>
</div>
<!-- 卡片 3 -->
<div class="card">
<img src="https://picsum.photos/seed/card3/400/240.jpg" alt="卡片图片" class="card-image">
<div class="card-content">
<h3 class="card-title">交互效果</h3>
<p class="card-text">鼠标悬停时卡片会上浮,阴影加深,带来生动的体验。</p>
<button class="card-button">
<i data-lucide="arrow-right" class="w-4 h-4"></i>
了解更多
</button>
</div>
</div>
</div>
<!-- 卡片容器结束 -->
</main>
<!-- ============================================ -->
<!-- CSS 样式:卡片的核心样式 -->
<!-- ============================================ -->
<style>
/* ========== 卡片本体 ========== */
.card {
width: 320px; /* 卡片宽度 */
background: white; /* 白色背景 */
border-radius: 16px; /* 圆角 16px */
border: 1px solid #e2e8f0; /* 边框颜色 */
overflow: hidden; /* 隐藏超出部分(让图片也有圆角) */
box-shadow: 0 1px 2px rgba(0,0,0,0.04); /* 轻微阴影 */
transition: all 0.3s ease; /* 动画过渡 */
}
/* 卡片悬停效果 */
.card:hover {
transform: translateY(-8px); /* 向上移动 8px */
box-shadow: 0 20px 25px rgba(0,0,0,0.1); /* 阴影加深 */
border-color: #cbd5e1; /* 边框变深 */
}
/* ========== 卡片图片 ========== */
.card-image {
width: 100%; /* 图片宽度撑满卡片 */
height: 180px; /* 固定高度 */
object-fit: cover; /* 图片裁剪填满,不变形 */
}
/* ========== 卡片内容区 ========== */
.card-content {
padding: 24px; /* 内边距 */
}
/* ========== 卡片标题 ========== */
.card-title {
font-size: 18px; /* 字号 */
font-weight: 600; /* 加粗 */
color: #0f172a; /* 深色文字 */
margin-bottom: 8px; /* 底部间距 */
}
/* ========== 卡片描述文字 ========== */
.card-text {
font-size: 14px; /* 字号 */
color: #64748b; /* 灰色文字 */
line-height: 1.6; /* 行高 */
margin-bottom: 16px; /* 底部间距 */
}
/* ========== 卡片按钮 ========== */
.card-button {
display: inline-flex; /* 弹性布局,让图标和文字对齐 */
align-items: center; /* 垂直居中 */
gap: 6px; /* 图标和文字的间距 */
background: #0F172A; /* 按钮背景色 */
color: white; /* 文字白色 */
font-size: 14px; /* 字号 */
font-weight: 500; /* 字重 */
padding: 10px 16px; /* 内边距 */
border-radius: 8px; /* 圆角 */
border: none; /* 无边框 */
cursor: pointer; /* 鼠标手型 */
transition: background 0.2s; /* 颜色过渡动画 */
}
/* 按钮悬停效果 */
.card-button:hover {
background: #1e293b; /* 悬停时背景变浅一点 */
}
</style>
<script>
lucide.createIcons(); // 初始化图标
</script>
</body>
</html>
```
---
## 关键代码含义解释
| 代码 | 含义 |
|------|------|
| `flex flex-wrap gap-6` | Flex布局 + 自动换行 + 卡片间距24px |
| `width: 320px` | 每个卡片固定宽度320像素 |
| `border-radius: 16px` | 圆角,让卡片看起来更柔和 |
| `overflow: hidden` | 让卡片内部的图片也跟着圆角显示 |
| `object-fit: cover` | 图片填满区域,裁剪多余部分,不变形 |
| `transform: translateY(-8px)` | 悬停时卡片向上移动8像素 |
| `box-shadow` | 阴影,让卡片有"浮起"的感觉 |
---
## 🎯 小练习
尝试修改以下内容,看看效果变化:
1. **修改卡片大小**:把 `.card` 的 `width: 320px` 改成 `400px` 或 `260px`
2. **修改间距**:把 `gap-6` 改成 `gap-4`(16px)或 `gap-8`(32px)
3. **修改圆角**:把 `border-radius: 16px` 改成 `8px` 或 `24px`
4. **修改悬停上浮距离**:把 `translateY(-8px)` 改成 `translateY(-12px)` 或 `translateY(-4px)`
5. **添加第4张卡片**:复制一个卡片,修改图片 `seed` 值和文字内容
---
## 卡片布局的"万能公式"
```
┌─────────────────────────────────────┐
│ 卡片容器(flex flex-wrap gap-6) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐│
│ │ 卡片1 │ │ 卡片2 │ │ 卡片3 ││
│ │ ├图片 │ │ ├图片 │ │ ├图片 ││
│ │ ├标题 │ │ ├标题 │ │ ├标题 ││
│ │ ├描述 │ │ ├描述 │ │ ├描述 ││
│ │ └按钮 │ │ └按钮 │ │ └按钮 ││
│ └─────────┘ └─────────┘ └─────────┘│
└─────────────────────────────────────┘
```
学会这个结构,你就能做出产品展示、团队介绍、博客文章列表等各种页面!
3 快速落地:跟着 AI 搭建响应式卡片布局
在 GLM-5 的引导下,我顺利完成了卡片布局的制作,从核心思路到代码实现,全程清晰易懂。
3.1 核心实现思路:卡片布局就像 "便签排列"
GLM-5 用一个通俗的比喻,帮我瞬间理解了卡片布局的本质:
卡片布局就像 "便签卡片的排列":
- 每个卡片 = 一个独立的 "小盒子",里面装着图片、标题、文字、按钮;
- 卡片容器 = 一个 "大托盘",用 Flexbox 让卡片自动换行、均匀分布;
- 视觉美化 = 圆角边框 + 阴影,让卡片有 "浮起来" 的质感;
- 交互效果 = 悬停时卡片上浮、阴影加深,提升用户体验。
3.2 代码实践:编写有交互效果的卡片布局
GLM-5 提供了一段完整的可运行代码,我在 VS Code 中新建 kapian.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>
<!-- 字体 -->
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
<!-- 图标 -->
<script src="https://unpkg.com/lucide@latest"></script>
<!-- Tailwind CSS -->
<script src="https://cdn.tailwindcss.com"></script>
<style>
* { font-family: 'Inter', sans-serif; }
</style>
</head>
<body class="bg-slate-50 min-h-screen">
<!-- 页面标题 -->
<header class="text-center py-12">
<h1 class="text-3xl font-semibold text-slate-900 tracking-tight">卡片布局示例</h1>
<p class="text-slate-500 mt-2">学会这个,你就能做出精美的产品展示页!</p>
</header>
<!-- ============================================ -->
<!-- 核心区域:卡片容器 + 多个卡片 -->
<!-- ============================================ -->
<main class="max-w-6xl mx-auto px-6 pb-16">
<!-- 卡片容器(大托盘) -->
<div class="flex flex-wrap gap-6 justify-center">
<!-- 卡片 1 -->
<div class="card">
<img src="https://picsum.photos/seed/card1/400/240.jpg" alt="卡片图片" class="card-image">
<div class="card-content">
<h3 class="card-title">精美设计</h3>
<p class="card-text">每个卡片都是独立的内容单元,可以包含图片、文字和按钮。</p>
<button class="card-button">
<i data-lucide="arrow-right" class="w-4 h-4"></i>
了解更多
</button>
</div>
</div>
<!-- 卡片 2 -->
<div class="card">
<img src="https://picsum.photos/seed/card2/400/240.jpg" alt="卡片图片" class="card-image">
<div class="card-content">
<h3 class="card-title">灵活布局</h3>
<p class="card-text">使用 Flexbox 可以轻松实现卡片的自动换行和均匀分布。</p>
<button class="card-button">
<i data-lucide="arrow-right" class="w-4 h-4"></i>
了解更多
</button>
</div>
</div>
<!-- 卡片 3 -->
<div class="card">
<img src="https://picsum.photos/seed/card3/400/240.jpg" alt="卡片图片" class="card-image">
<div class="card-content">
<h3 class="card-title">交互效果</h3>
<p class="card-text">鼠标悬停时卡片会上浮,阴影加深,带来生动的体验。</p>
<button class="card-button">
<i data-lucide="arrow-right" class="w-4 h-4"></i>
了解更多
</button>
</div>
</div>
</div>
<!-- 卡片容器结束 -->
</main>
<!-- ============================================ -->
<!-- CSS 样式:卡片的核心样式 -->
<!-- ============================================ -->
<style>
/* ========== 卡片本体 ========== */
.card {
width: 320px; /* 卡片宽度 */
background: white; /* 白色背景 */
border-radius: 16px; /* 圆角 16px */
border: 1px solid #e2e8f0; /* 边框颜色 */
overflow: hidden; /* 隐藏超出部分(让图片也有圆角) */
box-shadow: 0 1px 2px rgba(0,0,0,0.04); /* 轻微阴影 */
transition: all 0.3s ease; /* 动画过渡 */
}
/* 卡片悬停效果 */
.card:hover {
transform: translateY(-8px); /* 向上移动 8px */
box-shadow: 0 20px 25px rgba(0,0,0,0.1); /* 阴影加深 */
border-color: #cbd5e1; /* 边框变深 */
}
/* ========== 卡片图片 ========== */
.card-image {
width: 100%; /* 图片宽度撑满卡片 */
height: 180px; /* 固定高度 */
object-fit: cover; /* 图片裁剪填满,不变形 */
}
/* ========== 卡片内容区 ========== */
.card-content {
padding: 24px; /* 内边距 */
}
/* ========== 卡片标题 ========== */
.card-title {
font-size: 18px; /* 字号 */
font-weight: 600; /* 加粗 */
color: #0f172a; /* 深色文字 */
margin-bottom: 8px; /* 底部间距 */
}
/* ========== 卡片描述文字 ========== */
.card-text {
font-size: 14px; /* 字号 */
color: #64748b; /* 灰色文字 */
line-height: 1.6; /* 行高 */
margin-bottom: 16px; /* 底部间距 */
}
/* ========== 卡片按钮 ========== */
.card-button {
display: inline-flex; /* 弹性布局,让图标和文字对齐 */
align-items: center; /* 垂直居中 */
gap: 6px; /* 图标和文字的间距 */
background: #0F172A; /* 按钮背景色 */
color: white; /* 文字白色 */
font-size: 14px; /* 字号 */
font-weight: 500; /* 字重 */
padding: 10px 16px; /* 内边距 */
border-radius: 8px; /* 圆角 */
border: none; /* 无边框 */
cursor: pointer; /* 鼠标手型 */
transition: background 0.2s; /* 颜色过渡动画 */
}
/* 按钮悬停效果 */
.card-button:hover {
background: #1e293b; /* 悬停时背景变浅一点 */
}
</style>
<script>
lucide.createIcons(); // 初始化图标
</script>
</body>
</html>
3.3 本地运行:3 步查看卡片布局效果
- 保存
kapian.html文件(确保后缀为.html); - 双击文件,用浏览器打开;
- 看到三张整齐排列的卡片,鼠标悬停时卡片会上浮、阴影加深,瞬间有了 "专业产品展示页" 的质感。

3.4 动手练习:修改卡片,巩固知识点
按照 GLM-5 的指导,我完成了 5 个小练习:
- 把卡片宽度从
320px改成400px,卡片变得更宽,内容更舒展; - 把容器间距
gap-6改成gap-8,卡片之间的空隙更大,布局更透气; - 把卡片圆角从
16px改成24px,整体风格更柔和; - 把悬停上浮距离从
translateY(-8px)改成translateY(-12px),交互效果更明显; - 复制了一张新卡片,修改了图片和文字,卡片布局的内容更丰富了。


每一次修改后刷新浏览器,都能直观看到变化,这种 "试错 - 观察 - 理解" 的方式,让我对卡片布局的代码逻辑理解得更透彻。
4 实践感悟:卡片布局是个人主页的 "内容骨架"
这次卡片布局学习让我对前端开发有了新的认知:
- 卡片布局的核心是 "容器 + 单元":用 Flexbox 容器排列独立的卡片单元,既灵活又清晰;
- Tailwind CSS 简化了样式编写:不用写大量重复的 CSS 代码,通过类名就能快速实现响应式布局;
- 交互细节决定体验:一个简单的悬停上浮效果,就能让卡片从 "静态" 变成 "动态",用户体验瞬间提升;
- 响应式是关键:通过
flex-wrap让卡片自动换行,在手机和电脑上都能完美显示,避免了布局错乱。
现在,通过GLM-5提供的方案,我已经学习到了 "导航栏 + 卡片布局",从 "有路牌" 升级为 "有内容",离完成一个完整的个人主页又近了一步。
参与链接:
GLM-5 在线体验:https://ai.atomgit.com/zai-org/GLM-5/model-inference