文章目录
-
20个CSS3 Grid网格响应布局实战详解
-
什么是CSS Grid布局?
- Grid布局的核心概念
- 1. 基础Grid布局
- 2. 响应式自动填充网格
- 3. 不对称网格布局
- 4. 圣杯布局
- 5. 卡片网格布局
- 6. 瀑布流布局
- 7. 仪表盘布局
- 8. 产品网格
- 9. 图文列表布局
- 10. 表单网格布局
- 11. 页眉导航布局
- 12. 功能面板布局
- 13. 博客文章布局
- 14. 图片画廊
- 15. 页脚布局
- 16. 价格表布局
- 17. 团队介绍布局
- 18. 特性展示布局
- 19. 时间轴布局
- 20. 复杂网格嵌套布局
-
Grid布局的核心属性
- 容器属性
- 项目属性
- 20个CSS3 Grid网格响应布局示例源码
- 响应式设计技巧
- 浏览器兼容性
- 性能考虑
- 总结
-
什么是CSS Grid布局?
20个CSS3 Grid网格响应布局实战详解
CSS Grid布局是现代Web开发中最强大的布局系统之一,它提供了二维布局能力,让我们能够轻松创建复杂的网页布局。本文将详细介绍20个实用的Grid布局示例,每个示例都包含完整代码和使用场景分析。
什么是CSS Grid布局?
CSS Grid布局是一个二维的布局系统,专门为解决复杂网页布局而设计。与Flexbox(一维布局)不同,Grid可以同时处理行和列,让开发者能够更精确地控制页面元素的排列。
Grid布局的核心概念
-
网格容器(Grid Container):应用
display: grid的元素 - 网格项目(Grid Items):网格容器的直接子元素
- 网格线(Grid Lines):构成网格结构的分界线
- 网格轨道(Grid Tracks):相邻网格线之间的空间
- 网格单元格(Grid Cell):相邻行和列网格线之间的空间
- 网格区域(Grid Area):由一个或多个网格单元格组成的矩形区域
1. 基础Grid布局
功能介绍:最简单的Grid布局,使用grid-template-columns创建固定列数的网格。
适用场景:产品展示、图片画廊、功能模块排列等需要等分布局的场景。
.basic-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 15px;
}
.grid-item {
background: #4361ee;
color: white;
padding: 20px;
border-radius: 8px;
text-align: center;
}
核心要点:
-
repeat(3, 1fr)创建3个等宽的列 -
gap属性设置网格项之间的间距 -
fr单位表示可用空间的比例
2. 响应式自动填充网格
功能介绍:使用auto-fill和minmax()函数创建响应式网格,自动调整列数以适应容器宽度。
适用场景:相册、博客文章列表、产品目录等需要自适应列数的场景。
.auto-fill-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
gap: 15px;
}
.auto-fill-item {
background: #4361ee;
color: white;
padding: 20px;
border-radius: 8px;
text-align: center;
}
核心要点:
-
auto-fill自动填充尽可能多的列 -
minmax(150px, 1fr)设置最小150px,最大1fr的列宽 - 完全响应式,无需媒体查询
3. 不对称网格布局
功能介绍:创建不对称的网格布局,使用grid-template-areas定义复杂的布局结构。
适用场景:新闻网站、博客首页、产品详情页等需要突出重点内容的场景。
.asymmetric-grid {
display: grid;
grid-template-columns: 2fr 1fr 1fr;
grid-template-rows: 100px 100px;
gap: 15px;
}
.main-content {
grid-column: 1;
grid-row: 1 / span 2;
background: #4361ee;
}
.side-content {
background: #3a0ca3;
}
/* 使用grid-template-areas的替代方案 */
.asymmetric-grid-areas {
display: grid;
grid-template-areas:
"main side1 side2"
"main side3 side4";
gap: 15px;
}
.main-content {
grid-area: main;
}
.side1 { grid-area: side1; }
.side2 { grid-area: side2; }
.side3 { grid-area: side3; }
.side4 { grid-area: side4; }
核心要点:
-
grid-template-areas提供直观的布局定义方式 -
grid-column和grid-row精确控制项目位置 -
span关键字扩展项目跨越多行/列
4. 圣杯布局
功能介绍:经典的页头、内容区、侧边栏和页脚布局,使用Grid实现更加简洁。
适用场景:内容型网站、博客、新闻门户等传统网页布局。
.holy-grail {
display: grid;
grid-template-rows: auto 1fr auto;
grid-template-columns: 200px 1fr 200px;
height: 100vh;
gap: 15px;
}
.header {
grid-column: 1 / span 3;
background: #4361ee;
color: white;
padding: 15px;
text-align: center;
}
.sidebar-left {
background: #3a0ca3;
color: white;
padding: 15px;
}
.main-content {
background: #4***9f0;
color: white;
padding: 15px;
}
.sidebar-right {
background: #f72585;
color: white;
padding: 15px;
}
.footer {
grid-column: 1 / span 3;
background: #212529;
color: white;
padding: 15px;
text-align: center;
}
@media (max-width: 768px) {
.holy-grail {
grid-template-columns: 1fr;
grid-template-rows: auto auto 1fr auto auto;
}
.header, .footer {
grid-column: 1;
}
}
核心要点:
- 使用
grid-template-rows和grid-template-columns定义整体结构 -
grid-column: 1 / span 3让元素横跨所有列 - 媒体查询实现移动端适配
5. 卡片网格布局
功能介绍:使用Grid创建灵活的卡片布局,卡片自动适应容器宽度并保持一致的间距。
适用场景:产品展示、服务介绍、功能模块、博客文章列表等。
.card-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
}
.card {
background: white;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
padding: 20px;
transition: transform 0.3s, box-shadow 0.3s;
}
.card:hover {
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
}
核心要点:
-
auto-fit自动调整列数填充容器 -
minmax(250px, 1fr)确保卡片最小宽度 - 悬停效果增强用户体验
6. 瀑布流布局
功能介绍:使用Grid创建瀑布流布局,适合图片展示、博客文章等场景。
适用场景:Pinterest风格布局、图片社交网站、作品集展示。
.masonry-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
grid-auto-rows: 10px;
gap: 15px;
}
.masonry-item {
background: #4361ee;
color: white;
border-radius: 8px;
padding: 15px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
.item-tall {
grid-row-end: span 30;
}
.item-medium {
grid-row-end: span 20;
}
.item-short {
grid-row-end: span 15;
}
核心要点:
-
grid-auto-rows: 10px设置基础行高 -
grid-row-end: span X控制项目高度 - 创建自然的瀑布流效果
7. 仪表盘布局
功能介绍:适合后台管理系统的仪表盘布局,使用Grid创建复杂的多区域布局。
适用场景:管理系统、数据看板、控制面板。
.dashboard-layout {
display: grid;
grid-template-columns: 250px 1fr;
grid-template-rows: auto 1fr auto;
height: 100vh;
gap: 15px;
}
.dashboard-header {
grid-column: 1 / span 2;
background: #4361ee;
color: white;
padding: 15px;
text-align: center;
}
.dashboard-main {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 15px;
padding: 15px;
background: #f8f9fa;
}
.stat-card {
background: white;
padding: 15px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
text-align: center;
}
.activity-panel {
grid-column: 1 / span 3;
background: white;
padding: 15px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
核心要点:
- 嵌套Grid实现复杂布局
- 统计卡片使用等分布局
- 活动面板横跨所有列
8. 产品网格
功能介绍:适合电商网站的产品网格布局,包含图片、标题、价格和操作按钮。
适用场景:电商网站、产品目录、在线商店。
.product-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
}
.product-card {
background: white;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
padding: 20px;
text-align: center;
transition: transform 0.3s, box-shadow 0.3s;
}
.product-card:hover {
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
}
核心要点:
- 产品卡片统一风格
- 悬停动效提升交互体验
- 响应式设计适应不同屏幕
9. 图文列表布局
功能介绍:图片和文字结合的列表布局,适合新闻、博客等内容展示。
适用场景:新闻列表、博客文章、内容聚合页面。
.article-list {
display: grid;
grid-template-columns: 100px 1fr;
gap: 15px;
align-items: start;
}
.article-img {
width: 100px;
height: 80px;
background: #4361ee;
border-radius: 5px;
}
.article-content {
padding: 5px 0;
}
@media (max-width: 480px) {
.article-list {
grid-template-columns: 1fr;
}
.article-img {
width: 100%;
height: 150px;
}
}
核心要点:
- 固定图片尺寸,弹性内容区域
-
align-items: start顶部对齐 - 移动端转为单列布局
10. 表单网格布局
功能介绍:使用Grid创建多列表单布局,让表单元素在网格中整齐排列。
适用场景:注册表单、联系表单、数据录入界面。
.form-grid {
max-width: 600px;
background: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
}
.name-fields {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 15px;
margin-bottom: 15px;
}
@media (max-width: 480px) {
.name-fields {
grid-template-columns: 1fr;
}
}
核心要点:
- 姓名字段并排布局
- 单个表单组占满整行
- 移动端优化为单列
11. 页眉导航布局
功能介绍:使用Grid创建响应式页眉导航,包含Logo、导航链接和用户操作区域。
适用场景:网站头部导航、应用顶部栏。
.header-nav {
display: grid;
grid-template-columns: auto 1fr auto;
align-items: center;
background: #212529;
color: white;
padding: 15px;
border-radius: 8px;
gap: 15px;
}
.nav-links {
display: flex;
justify-content: center;
gap: 10px;
}
.user-actions {
display: flex;
gap: 10px;
}
@media (max-width: 768px) {
.header-nav {
grid-template-columns: 1fr;
grid-template-rows: auto auto auto;
gap: 10px;
text-align: center;
}
}
核心要点:
- 三列布局:Logo、导航链接、用户操作
- 导航链接居中显示
- 移动端转为垂直布局
12. 功能面板布局
功能介绍:使用Grid创建功能面板布局,适合展示多个功能模块或数据指标。
适用场景:控制面板、功能入口、数据指标展示。
.panel-layout {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: 100px 150px;
gap: 15px;
}
.title-panel {
grid-column: 1 / span 4;
background: #4361ee;
color: white;
padding: 20px;
border-radius: 8px;
text-align: center;
}
.feature-panel {
background: #3a0ca3;
color: white;
padding: 20px;
border-radius: 8px;
text-align: center;
}
核心要点:
- 标题面板横跨所有列
- 功能面板等分布局
- 明确的视觉层次
13. 博客文章布局
功能介绍:使用Grid创建博客文章布局,包含文章列表和侧边栏。
适用场景:博客网站、内容管理系统、新闻网站。
.blog-layout {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 30px;
}
.blog-post {
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0,0,0,0.1);
margin-bottom: 20px;
}
.blog-sidebar {
background: #f8f9fa;
padding: 20px;
border-radius: 8px;
}
@media (max-width: 768px) {
.blog-layout {
grid-template-columns: 1fr;
}
}
核心要点:
- 主要内容与侧边栏2:1比例
- 文章卡片统一样式
- 移动端单列布局
14. 图片画廊
功能介绍:使用Grid创建响应式图片画廊,图片自动调整大小并保持比例。
适用场景:作品集、相册、图片展示页面。
.gallery-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
grid-auto-rows: 150px;
gap: 10px;
}
.gallery-item {
background: #4361ee;
color: white;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
.gallery-item img {
width: 100%;
height: 100%;
object-fit: cover;
}
核心要点:
- 固定高度,弹性宽度
-
object-fit: cover保持图片比例 - 自动调整列数
15. 页脚布局
功能介绍:使用Grid创建多列页脚布局,包含链接、联系信息和社会媒体图标。
适用场景:网站底部、联系信息展示、快速链接。
.footer-layout {
display: grid;
grid-template-columns: 2fr 1fr 1fr 1fr;
gap: 30px;
background: #212529;
color: white;
padding: 30px;
}
.social-icons {
display: flex;
gap: 10px;
}
.social-icon {
width: 40px;
height: 40px;
background: #4361ee;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
transition: transform 0.3s;
}
.social-icon:hover {
transform: translateY(-3px);
}
核心要点:
- 四列不等宽布局
- 社交媒体图标使用Flexbox
- 悬停动效增强交互
16. 价格表布局
功能介绍:使用Grid创建价格表布局,适合展示不同套餐或服务等级。
适用场景:SaaS产品、服务定价、会员等级。
.pricing-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
}
.pricing-card {
background: white;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
padding: 30px;
text-align: center;
border: 2px solid #e9ecef;
position: relative;
}
.pricing-card.featured {
border-color: #4361ee;
}
.featured-badge {
position: absolute;
top: -10px;
left: 50%;
transform: translateX(-50%);
background: #4361ee;
color: white;
padding: 5px 15px;
border-radius: 15px;
font-size: 0.8rem;
}
核心要点:
- 突出显示推荐套餐
- 价格卡片统一样式
- 徽章标识特色套餐
17. 团队介绍布局
功能介绍:使用Grid创建团队介绍布局,展示团队成员的头像和基本信息。
适用场景:关于我们页面、团队介绍、成员展示。
.team-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
}
.team-card {
background: white;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
padding: 20px;
text-align: center;
transition: transform 0.3s, box-shadow 0.3s;
}
.team-card:hover {
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
}
核心要点:
- 团队成员卡片统一风格
- 悬停效果提升交互体验
- 响应式适应不同屏幕
18. 特性展示布局
功能介绍:使用Grid创建特性展示布局,适合展示产品功能或服务优势。
适用场景:产品特性展示、服务优势、功能说明。
.features-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 30px;
}
.feature-item {
display: grid;
grid-template-columns: 60px 1fr;
gap: 15px;
align-items: start;
}
.feature-icon {
width: 60px;
height: 60px;
background: #4361ee;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
color: white;
}
核心要点:
- 图标与内容并排布局
- 图标使用圆形设计
- 移动端单列布局
19. 时间轴布局
功能介绍:使用Grid创建时间轴布局,适合展示历史事件或项目进展。
适用场景:公司历史、项目时间线、发展历程。
.timeline {
display: grid;
grid-template-columns: 1fr auto 1fr;
gap: 20px;
align-items: center;
}
.timeline-item {
background: white;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
padding: 20px;
}
.timeline-marker {
width: 20px;
height: 20px;
background: #4361ee;
border-radius: 50%;
}
@media (max-width: 768px) {
.timeline {
grid-template-columns: 1fr;
gap: 15px;
}
.timeline-marker {
display: none;
}
}
核心要点:
- 三列布局创建时间轴效果
- 圆形标记标识时间点
- 移动端简化布局
20. 复杂网格嵌套布局
功能介绍:展示Grid嵌套使用的能力,创建复杂的多级网格布局结构。
适用场景:复杂的管理界面、数据看板、多功能应用。
.***plex-nested {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
grid-template-rows: auto 1fr auto;
height: 100vh;
gap: 15px;
}
.***plex-main {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: auto 1fr;
gap: 15px;
padding: 15px;
background: #f8f9fa;
}
.main-title {
grid-column: 1 / span 2;
background: white;
padding: 15px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.sub-content {
background: white;
padding: 15px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
核心要点:
- 外层Grid定义整体结构
- 内层Grid创建详细布局
- 多层嵌套实现复杂界面
Grid布局的核心属性
容器属性
-
display: grid- 定义Grid容器 -
grid-template-columns- 定义列轨道大小 -
grid-template-rows- 定义行轨道大小 -
grid-template-areas- 使用命名区域定义布局 -
gap- 设置网格项之间的间距 -
justify-items- 网格项在单元格内的水平对齐 -
align-items- 网格项在单元格内的垂直对齐 -
justify-content- 整个网格在容器内的水平对齐 -
align-content- 整个网格在容器内的垂直对齐
项目属性
-
grid-column- 指定项目在列上的位置 -
grid-row- 指定项目在行上的位置 -
grid-area- 指定项目在命名区域中的位置 -
justify-self- 单个项目的水平对齐 -
align-self- 单个项目的垂直对齐
20个CSS3 Grid网格响应布局示例源码
<!DOCTYPE html>
<html lang="zh-***">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>20个CSS3 Grid网格响应布局示例</title>
<!-- 引入Prism.js代码高亮 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.***/ajax/libs/prism/1.25.0/themes/prism-tomorrow.min.css">
<script src="https://cdnjs.cloudflare.***/ajax/libs/prism/1.25.0/prism.min.js"></script>
<script src="https://cdnjs.cloudflare.***/ajax/libs/prism/1.25.0/***ponents/prism-css.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
:root {
--primary: #4361ee;
--secondary: #3a0ca3;
--a***ent: #f72585;
--light: #f8f9fa;
--dark: #212529;
--su***ess: #4***9f0;
--warning: #f8961e;
--danger: #e63946;
--info: #7209b7;
--shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
--transition: all 0.3s ease;
}
body {
background-color: #f5f7fa;
color: var(--dark);
line-height: 1.6;
padding: 20px;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
header {
text-align: center;
margin-bottom: 40px;
padding: 40px 0;
background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
color: white;
border-radius: 15px;
box-shadow: var(--shadow);
}
h1 {
font-size: 2.8rem;
margin-bottom: 15px;
}
.description {
font-size: 1.2rem;
max-width: 800px;
margin: 0 auto;
opacity: 0.9;
}
.demo-section {
background: white;
border-radius: 15px;
padding: 30px;
margin-bottom: 40px;
box-shadow: var(--shadow);
transition: var(--transition);
}
.demo-section:hover {
transform: translateY(-5px);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
}
.demo-title {
font-size: 1.8rem;
margin-bottom: 15px;
color: var(--secondary);
border-bottom: 3px solid var(--primary);
padding-bottom: 10px;
display: flex;
align-items: center;
gap: 10px;
}
.demo-title::before {
content: "•";
color: var(--a***ent);
font-size: 2rem;
}
.demo-description {
margin-bottom: 25px;
color: #555;
line-height: 1.7;
font-size: 1.1rem;
}
.demo-container {
border: 2px dashed #dee2e6;
border-radius: 10px;
padding: 25px;
margin-bottom: 25px;
background: var(--light);
min-height: 200px;
display: flex;
align-items: center;
justify-content: center;
}
.code-container {
background: #2d2d2d;
border-radius: 10px;
overflow: hidden;
margin-top: 20px;
}
.code-header {
background: #1a1a1a;
color: #f8f9fa;
padding: 12px 20px;
font-size: 1rem;
display: flex;
justify-content: space-between;
align-items: center;
}
.copy-btn {
background: var(--primary);
color: white;
border: none;
padding: 6px 12px;
border-radius: 4px;
cursor: pointer;
font-size: 0.9rem;
transition: var(--transition);
}
.copy-btn:hover {
background: var(--secondary);
}
.code-content {
padding: 20px;
overflow-x: auto;
}
pre[class*="language-"] {
margin: 0;
background: transparent;
font-size: 0.95rem;
}
/* Grid演示样式 */
.grid-demo {
display: grid;
gap: 15px;
}
.demo-item {
background: var(--primary);
color: white;
padding: 20px;
border-radius: 8px;
text-align: center;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
display: flex;
align-items: center;
justify-content: center;
}
.demo-card {
background: white;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
padding: 20px;
display: flex;
flex-direction: column;
}
.demo-card img {
width: 100%;
height: 120px;
object-fit: cover;
border-radius: 5px;
margin-bottom: 10px;
}
.demo-nav {
background: var(--dark);
color: white;
padding: 15px;
border-radius: 8px;
display: grid;
grid-template-columns: auto 1fr auto;
align-items: center;
width: 100%;
}
.demo-nav a {
color: white;
text-decoration: none;
padding: 8px 15px;
border-radius: 4px;
transition: var(--transition);
}
.demo-nav a:hover {
background: rgba(255, 255, 255, 0.1);
}
.demo-form {
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
width: 100%;
}
.form-group {
margin-bottom: 15px;
}
.form-group label {
display: block;
margin-bottom: 5px;
font-weight: 500;
}
.form-group input {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 1rem;
}
.btn {
background: var(--primary);
color: white;
border: none;
padding: 10px 20px;
border-radius: 4px;
cursor: pointer;
font-size: 1rem;
transition: var(--transition);
}
.btn:hover {
background: var(--secondary);
}
footer {
text-align: center;
margin-top: 50px;
padding: 30px;
color: #6c757d;
border-top: 1px solid #e9ecef;
}
/* 响应式调整 */
@media (max-width: 768px) {
h1 {
font-size: 2.2rem;
}
.demo-title {
font-size: 1.5rem;
}
.demo-container {
padding: 15px;
}
}
@media (max-width: 480px) {
body {
padding: 10px;
}
.demo-section {
padding: 20px;
}
h1 {
font-size: 1.8rem;
}
}
.demo-toc {
position: fixed;
top: 20px;
left: 20px;
width: 200px;
}
.toc-section {
background: white;
border-radius: 15px;
padding: 10px;
margin-bottom: 40px;
box-shadow: var(--shadow);
transition: var(--transition);
}
.toc-section:hover {
transform: translateY(-5px);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
}
.toc-title {
font-size: 1rem;
margin-bottom: 15px;
color: var(--secondary);
border-bottom: 3px solid var(--primary);
padding: 10px 0;
align-items: center;
}
.toc-title::before {
content: "•";
color: var(--a***ent);
font-size: 1rem;
}
.toc-list{
display: flex;
flex-direction: column;
gap: 10px;
}
.toc-list a {
color: var(--secondary);
text-decoration: none;
transition: var(--transition);
}
.toc-list a:hover {
color: var(--primary);
}
</style>
</head>
<body>
<div class="demo-toc">
<div class="toc-section">
<h3 class="toc-title">目录</h3>
<div class="toc-list" id="toc-list">
</div>
</div>
</div>
<div class="container">
<header>
<h1>20个CSS3 Grid网格响应布局示例</h1>
<p class="description">使用纯CSS3 Grid实现的高质量响应式布局,涵盖各种常见页面布局场景</p>
</header>
<!-- 示例1: 基础Grid布局 -->
<div class="demo-section">
<h2 class="demo-title">1. 基础Grid布局</h2>
<p class="demo-description">最简单的Grid布局,使用grid-template-columns创建固定列数的网格。</p>
<div class="demo-container">
<div class="grid-demo" style="grid-template-columns: repeat(3, 1fr);">
<div class="demo-item">项目 1</div>
<div class="demo-item">项目 2</div>
<div class="demo-item">项目 3</div>
<div class="demo-item">项目 4</div>
<div class="demo-item">项目 5</div>
<div class="demo-item">项目 6</div>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.basic-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 15px;
}
.grid-item {
background: #4361ee;
color: white;
padding: 20px;
border-radius: 8px;
text-align: center;
}</code></pre>
</div>
</div>
</div>
<!-- 示例2: 响应式自动填充网格 -->
<div class="demo-section">
<h2 class="demo-title">2. 响应式自动填充网格</h2>
<p class="demo-description">使用auto-fill和minmax()函数创建响应式网格,自动调整列数以适应容器宽度。</p>
<div class="demo-container">
<div class="grid-demo" style="grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));">
<div class="demo-item" style="background: var(--primary);">项目 1</div>
<div class="demo-item" style="background: var(--secondary);">项目 2</div>
<div class="demo-item" style="background: var(--a***ent);">项目 3</div>
<div class="demo-item" style="background: var(--su***ess);">项目 4</div>
<div class="demo-item" style="background: var(--warning);">项目 5</div>
<div class="demo-item" style="background: var(--danger);">项目 6</div>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.auto-fill-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
gap: 15px;
}
.auto-fill-item {
background: #4361ee;
color: white;
padding: 20px;
border-radius: 8px;
text-align: center;
}</code></pre>
</div>
</div>
</div>
<!-- 示例3: 不对称网格布局 -->
<div class="demo-section">
<h2 class="demo-title">3. 不对称网格布局</h2>
<p class="demo-description">创建不对称的网格布局,使用grid-template-areas定义复杂的布局结构。</p>
<div class="demo-container">
<div class="grid-demo" style="grid-template-columns: 2fr 1fr 1fr; grid-template-rows: 100px 100px; gap: 15px;">
<div class="demo-item" style="grid-column: 1; grid-row: 1 / span 2; background: var(--primary);">主要内容</div>
<div class="demo-item" style="grid-column: 2; grid-row: 1; background: var(--secondary);">次要内容 1</div>
<div class="demo-item" style="grid-column: 3; grid-row: 1; background: var(--a***ent);">次要内容 2</div>
<div class="demo-item" style="grid-column: 2; grid-row: 2; background: var(--su***ess);">次要内容 3</div>
<div class="demo-item" style="grid-column: 3; grid-row: 2; background: var(--warning);">次要内容 4</div>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.asymmetric-grid {
display: grid;
grid-template-columns: 2fr 1fr 1fr;
grid-template-rows: 100px 100px;
gap: 15px;
}
.main-content {
grid-column: 1;
grid-row: 1 / span 2;
background: #4361ee;
}
.side-content {
background: #3a0ca3;
}
/* 或者使用grid-template-areas */
.asymmetric-grid-areas {
display: grid;
grid-template-areas:
"main side1 side2"
"main side3 side4";
gap: 15px;
}
.main-content {
grid-area: main;
}
.side1 { grid-area: side1; }
.side2 { grid-area: side2; }
.side3 { grid-area: side3; }
.side4 { grid-area: side4; }</code></pre>
</div>
</div>
</div>
<!-- 示例4: 圣杯布局 -->
<div class="demo-section">
<h2 class="demo-title">4. 圣杯布局</h2>
<p class="demo-description">经典的页头、内容区、侧边栏和页脚布局,使用Grid实现更加简洁。</p>
<div class="demo-container">
<div style="display: grid; grid-template-rows: auto 1fr auto; grid-template-columns: 200px 1fr 200px; height: 300px; gap: 15px;">
<header style="grid-column: 1 / span 3; background: var(--primary); color: white; padding: 15px; border-radius: 8px; text-align: center;">页头</header>
<aside style="background: var(--secondary); color: white; padding: 15px; border-radius: 8px;">左侧边栏</aside>
<main style="background: var(--su***ess); color: white; padding: 15px; border-radius: 8px;">主内容区</main>
<aside style="background: var(--a***ent); color: white; padding: 15px; border-radius: 8px;">右侧边栏</aside>
<footer style="grid-column: 1 / span 3; background: var(--dark); color: white; padding: 15px; border-radius: 8px; text-align: center;">页脚</footer>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.holy-grail {
display: grid;
grid-template-rows: auto 1fr auto;
grid-template-columns: 200px 1fr 200px;
height: 100vh;
gap: 15px;
}
.header {
grid-column: 1 / span 3;
background: #4361ee;
color: white;
padding: 15px;
text-align: center;
}
.sidebar-left {
background: #3a0ca3;
color: white;
padding: 15px;
}
.main-content {
background: #4***9f0;
color: white;
padding: 15px;
}
.sidebar-right {
background: #f72585;
color: white;
padding: 15px;
}
.footer {
grid-column: 1 / span 3;
background: #212529;
color: white;
padding: 15px;
text-align: center;
}
@media (max-width: 768px) {
.holy-grail {
grid-template-columns: 1fr;
grid-template-rows: auto auto 1fr auto auto;
}
.header, .footer {
grid-column: 1;
}
.sidebar-left, .sidebar-right {
grid-row: auto;
}
}</code></pre>
</div>
</div>
</div>
<!-- 示例5: 卡片网格布局 -->
<div class="demo-section">
<h2 class="demo-title">5. 卡片网格布局</h2>
<p class="demo-description">使用Grid创建灵活的卡片布局,卡片自动适应容器宽度并保持一致的间距。</p>
<div class="demo-container">
<div class="grid-demo" style="grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));">
<div class="demo-card">
<div style="height: 120px; background: var(--primary); border-radius: 5px; margin-bottom: 10px;"></div>
<h3 style="margin-bottom: 10px;">卡片标题</h3>
<p style="color: #666; margin-bottom: 15px;">这是一张卡片的描述内容,可以包含文字、图片等信息。</p>
<button class="btn">了解更多</button>
</div>
<div class="demo-card">
<div style="height: 120px; background: var(--secondary); border-radius: 5px; margin-bottom: 10px;"></div>
<h3 style="margin-bottom: 10px;">卡片标题</h3>
<p style="color: #666; margin-bottom: 15px;">这是一张卡片的描述内容,可以包含文字、图片等信息。</p>
<button class="btn">了解更多</button>
</div>
<div class="demo-card">
<div style="height: 120px; background: var(--a***ent); border-radius: 5px; margin-bottom: 10px;"></div>
<h3 style="margin-bottom: 10px;">卡片标题</h3>
<p style="color: #666; margin-bottom: 15px;">这是一张卡片的描述内容,可以包含文字、图片等信息。</p>
<button class="btn">了解更多</button>
</div>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.card-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
}
.card {
background: white;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
padding: 20px;
transition: transform 0.3s, box-shadow 0.3s;
}
.card:hover {
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
}
.card-img {
height: 120px;
background: #4361ee;
border-radius: 5px;
margin-bottom: 10px;
}
.card-title {
margin-bottom: 10px;
font-size: 1.25rem;
}
.card-description {
color: #666;
margin-bottom: 15px;
line-height: 1.5;
}</code></pre>
</div>
</div>
</div>
<!-- 示例6: 瀑布流布局 -->
<div class="demo-section">
<h2 class="demo-title">6. 瀑布流布局</h2>
<p class="demo-description">使用Grid创建瀑布流布局,适合图片展示、博客文章等场景。</p>
<div class="demo-container">
<div class="grid-demo" style="grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); grid-auto-rows: 10px;">
<div class="demo-item" style="grid-row-end: span 30; height: 150px; background: var(--primary);">项目 1</div>
<div class="demo-item" style="grid-row-end: span 20; height: 100px; background: var(--secondary);">项目 2</div>
<div class="demo-item" style="grid-row-end: span 35; height: 175px; background: var(--a***ent);">项目 3</div>
<div class="demo-item" style="grid-row-end: span 25; height: 125px; background: var(--su***ess);">项目 4</div>
<div class="demo-item" style="grid-row-end: span 30; height: 150px; background: var(--warning);">项目 5</div>
<div class="demo-item" style="grid-row-end: span 20; height: 100px; background: var(--danger);">项目 6</div>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.masonry-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
grid-auto-rows: 10px;
gap: 15px;
}
.masonry-item {
background: #4361ee;
color: white;
border-radius: 8px;
padding: 15px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
/* 不同高度的项目 */
.item-tall {
grid-row-end: span 30;
}
.item-medium {
grid-row-end: span 20;
}
.item-short {
grid-row-end: span 15;
}
@media (max-width: 768px) {
.masonry-grid {
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
}
}</code></pre>
</div>
</div>
</div>
<!-- 示例7: 仪表盘布局 -->
<div class="demo-section">
<h2 class="demo-title">7. 仪表盘布局</h2>
<p class="demo-description">适合后台管理系统的仪表盘布局,使用Grid创建复杂的多区域布局。</p>
<div class="demo-container">
<div style="display: grid; grid-template-columns: 250px 1fr; grid-template-rows: auto 1fr auto; height: 350px; gap: 15px;">
<header style="grid-column: 1 / span 2; background: var(--primary); color: white; padding: 15px; border-radius: 8px; text-align: center;">仪表盘头部</header>
<aside style="background: var(--dark); color: white; padding: 15px; border-radius: 8px;">
<h3 style="margin-bottom: 15px;">导航菜单</h3>
<ul style="list-style: none;">
<li style="padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.1);">仪表盘</li>
<li style="padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.1);">用户管理</li>
<li style="padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.1);">内容管理</li>
<li style="padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.1);">系统设置</li>
</ul>
</aside>
<main style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 15px; padding: 15px; background: var(--light); border-radius: 8px;">
<div style="background: white; padding: 15px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); text-align: center;">
<h4 style="color: var(--primary); font-size: 1.5rem; margin-bottom: 5px;">128</h4>
<p>用户总数</p>
</div>
<div style="background: white; padding: 15px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); text-align: center;">
<h4 style="color: var(--secondary); font-size: 1.5rem; margin-bottom: 5px;">56</h4>
<p>新增用户</p>
</div>
<div style="background: white; padding: 15px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); text-align: center;">
<h4 style="color: var(--a***ent); font-size: 1.5rem; margin-bottom: 5px;">24</h4>
<p>在线用户</p>
</div>
<div style="grid-column: 1 / span 3; background: white; padding: 15px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1);">
<h4 style="margin-bottom: 10px;">最近活动</h4>
<p>这里是最近的活动记录...</p>
</div>
</main>
<footer style="grid-column: 1 / span 2; background: var(--dark); color: white; padding: 15px; border-radius: 8px; text-align: center;">页脚信息</footer>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.dashboard-layout {
display: grid;
grid-template-columns: 250px 1fr;
grid-template-rows: auto 1fr auto;
height: 100vh;
gap: 15px;
}
.dashboard-header {
grid-column: 1 / span 2;
background: #4361ee;
color: white;
padding: 15px;
text-align: center;
}
.dashboard-sidebar {
background: #212529;
color: white;
padding: 15px;
}
.dashboard-main {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 15px;
padding: 15px;
background: #f8f9fa;
}
.stat-card {
background: white;
padding: 15px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
text-align: center;
}
.activity-panel {
grid-column: 1 / span 3;
background: white;
padding: 15px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.dashboard-footer {
grid-column: 1 / span 2;
background: #212529;
color: white;
padding: 15px;
text-align: center;
}
@media (max-width: 768px) {
.dashboard-layout {
grid-template-columns: 1fr;
grid-template-rows: auto auto 1fr auto;
}
.dashboard-header, .dashboard-footer {
grid-column: 1;
}
.activity-panel {
grid-column: 1;
}
}</code></pre>
</div>
</div>
</div>
<!-- 示例8: 产品网格 -->
<div class="demo-section">
<h2 class="demo-title">8. 产品网格</h2>
<p class="demo-description">适合电商网站的产品网格布局,包含图片、标题、价格和操作按钮。</p>
<div class="demo-container">
<div class="grid-demo" style="grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));">
<div class="demo-card" style="text-align: center;">
<div style="height: 150px; background: var(--primary); border-radius: 5px; margin-bottom: 10px;"></div>
<h3 style="margin-bottom: 10px;">产品名称</h3>
<p style="color: #e74c3c; font-weight: bold; font-size: 1.2rem; margin-bottom: 15px;">¥199.00</p>
<button class="btn">加入购物车</button>
</div>
<div class="demo-card" style="text-align: center;">
<div style="height: 150px; background: var(--secondary); border-radius: 5px; margin-bottom: 10px;"></div>
<h3 style="margin-bottom: 10px;">产品名称</h3>
<p style="color: #e74c3c; font-weight: bold; font-size: 1.2rem; margin-bottom: 15px;">¥299.00</p>
<button class="btn">加入购物车</button>
</div>
<div class="demo-card" style="text-align: center;">
<div style="height: 150px; background: var(--a***ent); border-radius: 5px; margin-bottom: 10px;"></div>
<h3 style="margin-bottom: 10px;">产品名称</h3>
<p style="color: #e74c3c; font-weight: bold; font-size: 1.2rem; margin-bottom: 15px;">¥399.00</p>
<button class="btn">加入购物车</button>
</div>
<div class="demo-card" style="text-align: center;">
<div style="height: 150px; background: var(--su***ess); border-radius: 5px; margin-bottom: 10px;"></div>
<h3 style="margin-bottom: 10px;">产品名称</h3>
<p style="color: #e74c3c; font-weight: bold; font-size: 1.2rem; margin-bottom: 15px;">¥499.00</p>
<button class="btn">加入购物车</button>
</div>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.product-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
}
.product-card {
background: white;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
padding: 20px;
text-align: center;
transition: transform 0.3s, box-shadow 0.3s;
}
.product-card:hover {
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
}
.product-img {
height: 150px;
background: #4361ee;
border-radius: 5px;
margin-bottom: 10px;
}
.product-name {
margin-bottom: 10px;
font-size: 1.2rem;
}
.product-price {
color: #e74c3c;
font-weight: bold;
font-size: 1.2rem;
margin-bottom: 15px;
}</code></pre>
</div>
</div>
</div>
<!-- 示例9: 图文列表布局 -->
<div class="demo-section">
<h2 class="demo-title">9. 图文列表布局</h2>
<p class="demo-description">图片和文字结合的列表布局,适合新闻、博客等内容展示。</p>
<div class="demo-container">
<div class="grid-demo" style="grid-template-columns: 100px 1fr; gap: 15px; align-items: start;">
<div style="width: 100px; height: 80px; background: var(--primary); border-radius: 5px;"></div>
<div>
<h4 style="margin-bottom: 5px;">文章标题</h4>
<p style="color: #666; font-size: 0.9rem;">这是一段文章的描述内容,简要介绍文章的主要内容和亮点。</p>
</div>
<div style="width: 100px; height: 80px; background: var(--secondary); border-radius: 5px;"></div>
<div>
<h4 style="margin-bottom: 5px;">文章标题</h4>
<p style="color: #666; font-size: 0.9rem;">这是一段文章的描述内容,简要介绍文章的主要内容和亮点。</p>
</div>
<div style="width: 100px; height: 80px; background: var(--a***ent); border-radius: 5px;"></div>
<div>
<h4 style="margin-bottom: 5px;">文章标题</h4>
<p style="color: #666; font-size: 0.9rem;">这是一段文章的描述内容,简要介绍文章的主要内容和亮点。</p>
</div>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.article-list {
display: grid;
grid-template-columns: 100px 1fr;
gap: 15px;
align-items: start;
}
.article-img {
width: 100px;
height: 80px;
background: #4361ee;
border-radius: 5px;
}
.article-content {
padding: 5px 0;
}
.article-title {
margin-bottom: 5px;
font-size: 1.1rem;
}
.article-description {
color: #666;
font-size: 0.9rem;
line-height: 1.5;
}
@media (max-width: 480px) {
.article-list {
grid-template-columns: 1fr;
}
.article-img {
width: 100%;
height: 150px;
}
}</code></pre>
</div>
</div>
</div>
<!-- 示例10: 表单网格布局 -->
<div class="demo-section">
<h2 class="demo-title">10. 表单网格布局</h2>
<p class="demo-description">使用Grid创建多列表单布局,让表单元素在网格中整齐排列。</p>
<div class="demo-container">
<div class="demo-form" style="max-width: 600px;">
<h3 style="margin-bottom: 20px; text-align: center;">用户注册</h3>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-bottom: 15px;">
<div class="form-group">
<label for="firstname">名字</label>
<input type="text" id="firstname" placeholder="请输入名字">
</div>
<div class="form-group">
<label for="lastname">姓氏</label>
<input type="text" id="lastname" placeholder="请输入姓氏">
</div>
</div>
<div class="form-group">
<label for="email">邮箱</label>
<input type="email" id="email" placeholder="请输入邮箱地址">
</div>
<div class="form-group">
<label for="password">密码</label>
<input type="password" id="password" placeholder="请输入密码">
</div>
<button class="btn" style="width: 100%;">注册</button>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.form-grid {
max-width: 600px;
background: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
}
.name-fields {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 15px;
margin-bottom: 15px;
}
.form-group {
margin-bottom: 15px;
}
.form-group label {
display: block;
margin-bottom: 5px;
font-weight: 500;
}
.form-group input {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 1rem;
}
.submit-btn {
width: 100%;
padding: 12px;
background: #4361ee;
color: white;
border: none;
border-radius: 4px;
font-size: 1rem;
cursor: pointer;
}
@media (max-width: 480px) {
.name-fields {
grid-template-columns: 1fr;
}
}</code></pre>
</div>
</div>
</div>
<!-- 示例11: 页眉导航布局 -->
<div class="demo-section">
<h2 class="demo-title">11. 页眉导航布局</h2>
<p class="demo-description">使用Grid创建响应式页眉导航,包含Logo、导航链接和用户操作区域。</p>
<div class="demo-container">
<div class="demo-nav">
<div style="font-weight: bold; font-size: 1.2rem;">LOGO</div>
<div style="display: flex; justify-content: center; gap: 10px;">
<a href="#">首页</a>
<a href="#">产品</a>
<a href="#">服务</a>
<a href="#">关于</a>
<a href="#">联系</a>
</div>
<div style="display: flex; gap: 10px;">
<a href="#">登录</a>
<a href="#" style="background: var(--primary);">注册</a>
</div>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.header-nav {
display: grid;
grid-template-columns: auto 1fr auto;
align-items: center;
background: #212529;
color: white;
padding: 15px;
border-radius: 8px;
gap: 15px;
}
.nav-links {
display: flex;
justify-content: center;
gap: 10px;
}
.nav-links a {
color: white;
text-decoration: none;
padding: 8px 15px;
border-radius: 4px;
transition: background 0.3s;
}
.nav-links a:hover {
background: rgba(255, 255, 255, 0.1);
}
.user-actions {
display: flex;
gap: 10px;
}
.user-actions a {
color: white;
text-decoration: none;
padding: 8px 15px;
border-radius: 4px;
transition: background 0.3s;
}
.user-actions a:last-child {
background: #4361ee;
}
@media (max-width: 768px) {
.header-nav {
grid-template-columns: 1fr;
grid-template-rows: auto auto auto;
gap: 10px;
text-align: center;
}
.nav-links {
flex-wrap: wrap;
}
}</code></pre>
</div>
</div>
</div>
<!-- 示例12: 功能面板布局 -->
<div class="demo-section">
<h2 class="demo-title">12. 功能面板布局</h2>
<p class="demo-description">使用Grid创建功能面板布局,适合展示多个功能模块或数据指标。</p>
<div class="demo-container">
<div class="grid-demo" style="grid-template-columns: repeat(4, 1fr); grid-template-rows: 100px 150px; gap: 15px;">
<div class="demo-item" style="grid-column: 1 / span 4; background: var(--primary);">标题面板</div>
<div class="demo-item" style="background: var(--secondary);">功能 1</div>
<div class="demo-item" style="background: var(--a***ent);">功能 2</div>
<div class="demo-item" style="background: var(--su***ess);">功能 3</div>
<div class="demo-item" style="background: var(--warning);">功能 4</div>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.panel-layout {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: 100px 150px;
gap: 15px;
}
.title-panel {
grid-column: 1 / span 4;
background: #4361ee;
color: white;
padding: 20px;
border-radius: 8px;
text-align: center;
}
.feature-panel {
background: #3a0ca3;
color: white;
padding: 20px;
border-radius: 8px;
text-align: center;
}
@media (max-width: 768px) {
.panel-layout {
grid-template-columns: 1fr 1fr;
grid-template-rows: 100px 150px 150px;
}
.title-panel {
grid-column: 1 / span 2;
}
}
@media (max-width: 480px) {
.panel-layout {
grid-template-columns: 1fr;
grid-template-rows: 100px repeat(4, 150px);
}
.title-panel {
grid-column: 1;
}
}</code></pre>
</div>
</div>
</div>
<!-- 示例13: 博客文章布局 -->
<div class="demo-section">
<h2 class="demo-title">13. 博客文章布局</h2>
<p class="demo-description">使用Grid创建博客文章布局,包含文章列表和侧边栏。</p>
<div class="demo-container">
<div style="display: grid; grid-template-columns: 2fr 1fr; gap: 30px;">
<div>
<div style="background: white; padding: 20px; border-radius: 8px; box-shadow: 0 3px 10px rgba(0,0,0,0.1); margin-bottom: 20px;">
<h3 style="margin-bottom: 10px;">博客文章标题</h3>
<p style="color: #666; margin-bottom: 15px;">这是一篇博客文章的摘要内容,简要介绍文章的主要观点和内容。</p>
<button class="btn">阅读更多</button>
</div>
<div style="background: white; padding: 20px; border-radius: 8px; box-shadow: 0 3px 10px rgba(0,0,0,0.1);">
<h3 style="margin-bottom: 10px;">博客文章标题</h3>
<p style="color: #666; margin-bottom: 15px;">这是一篇博客文章的摘要内容,简要介绍文章的主要观点和内容。</p>
<button class="btn">阅读更多</button>
</div>
</div>
<aside style="background: var(--light); padding: 20px; border-radius: 8px;">
<h4 style="margin-bottom: 15px;">侧边栏</h4>
<div style="margin-bottom: 15px;">
<h5>分类</h5>
<ul style="list-style: none; margin-top: 10px;">
<li style="padding: 5px 0;">技术 (15)</li>
<li style="padding: 5px 0;">生活 (8)</li>
<li style="padding: 5px 0;">旅行 (5)</li>
</ul>
</div>
<div>
<h5>标签</h5>
<div style="display: flex; flex-wrap: wrap; gap: 5px; margin-top: 10px;">
<span style="background: var(--primary); color: white; padding: 3px 8px; border-radius: 12px; font-size: 0.8rem;">CSS</span>
<span style="background: var(--secondary); color: white; padding: 3px 8px; border-radius: 12px; font-size: 0.8rem;">JavaScript</span>
<span style="background: var(--a***ent); color: white; padding: 3px 8px; border-radius: 12px; font-size: 0.8rem;">HTML</span>
</div>
</div>
</aside>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.blog-layout {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 30px;
}
.blog-posts {
/* 文章列表样式 */
}
.blog-post {
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0,0,0,0.1);
margin-bottom: 20px;
}
.blog-sidebar {
background: #f8f9fa;
padding: 20px;
border-radius: 8px;
}
.categories-list {
list-style: none;
margin-top: 10px;
}
.categories-list li {
padding: 5px 0;
}
.tags-container {
display: flex;
flex-wrap: wrap;
gap: 5px;
margin-top: 10px;
}
.tag {
background: #4361ee;
color: white;
padding: 3px 8px;
border-radius: 12px;
font-size: 0.8rem;
}
@media (max-width: 768px) {
.blog-layout {
grid-template-columns: 1fr;
}
}</code></pre>
</div>
</div>
</div>
<!-- 示例14: 图片画廊 -->
<div class="demo-section">
<h2 class="demo-title">14. 图片画廊</h2>
<p class="demo-description">使用Grid创建响应式图片画廊,图片自动调整大小并保持比例。</p>
<div class="demo-container">
<div class="grid-demo" style="grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); grid-auto-rows: 150px; gap: 10px;">
<div class="demo-item" style="background: var(--primary);">图片 1</div>
<div class="demo-item" style="background: var(--secondary);">图片 2</div>
<div class="demo-item" style="background: var(--a***ent);">图片 3</div>
<div class="demo-item" style="background: var(--su***ess);">图片 4</div>
<div class="demo-item" style="background: var(--warning);">图片 5</div>
<div class="demo-item" style="background: var(--danger);">图片 6</div>
<div class="demo-item" style="background: var(--info);">图片 7</div>
<div class="demo-item" style="background: var(--primary);">图片 8</div>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.gallery-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
grid-auto-rows: 150px;
gap: 10px;
}
.gallery-item {
background: #4361ee;
color: white;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
.gallery-item img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* 不同尺寸的图片 */
.item-wide {
grid-column: span 2;
}
.item-tall {
grid-row: span 2;
}
.item-large {
grid-column: span 2;
grid-row: span 2;
}</code></pre>
</div>
</div>
</div>
<!-- 示例15: 页脚布局 -->
<div class="demo-section">
<h2 class="demo-title">15. 页脚布局</h2>
<p class="demo-description">使用Grid创建多列页脚布局,包含链接、联系信息和社会媒体图标。</p>
<div class="demo-container">
<div style="display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 30px; background: var(--dark); color: white; padding: 30px; border-radius: 8px;">
<div>
<h4 style="margin-bottom: 15px;">公司名称</h4>
<p style="color: #adb5bd; line-height: 1.6;">我们是一家专注于提供高质量产品和服务的公司,致力于为客户创造价值。</p>
</div>
<div>
<h5 style="margin-bottom: 15px;">快速链接</h5>
<ul style="list-style: none; color: #adb5bd;">
<li style="padding: 5px 0;"><a href="#" style="color: #adb5bd; text-decoration: none;">首页</a></li>
<li style="padding: 5px 0;"><a href="#" style="color: #adb5bd; text-decoration: none;">关于我们</a></li>
<li style="padding: 5px 0;"><a href="#" style="color: #adb5bd; text-decoration: none;">服务</a></li>
<li style="padding: 5px 0;"><a href="#" style="color: #adb5bd; text-decoration: none;">联系</a></li>
</ul>
</div>
<div>
<h5 style="margin-bottom: 15px;">联系我们</h5>
<ul style="list-style: none; color: #adb5bd;">
<li style="padding: 5px 0;">地址: 某市某区某街道</li>
<li style="padding: 5px 0;">电话: 123-456-7890</li>
<li style="padding: 5px 0;">邮箱: info@example.***</li>
</ul>
</div>
<div>
<h5 style="margin-bottom: 15px;">关注我们</h5>
<div style="display: flex; gap: 10px;">
<div style="width: 40px; height: 40px; background: var(--primary); border-radius: 50%; display: flex; align-items: center; justify-content: center;">F</div>
<div style="width: 40px; height: 40px; background: var(--info); border-radius: 50%; display: flex; align-items: center; justify-content: center;">T</div>
<div style="width: 40px; height: 40px; background: var(--a***ent); border-radius: 50%; display: flex; align-items: center; justify-content: center;">I</div>
</div>
</div>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.footer-layout {
display: grid;
grid-template-columns: 2fr 1fr 1fr 1fr;
gap: 30px;
background: #212529;
color: white;
padding: 30px;
}
.footer-section h4, .footer-section h5 {
margin-bottom: 15px;
}
.footer-links {
list-style: none;
color: #adb5bd;
}
.footer-links li {
padding: 5px 0;
}
.footer-links a {
color: #adb5bd;
text-decoration: none;
transition: color 0.3s;
}
.footer-links a:hover {
color: white;
}
.social-icons {
display: flex;
gap: 10px;
}
.social-icon {
width: 40px;
height: 40px;
background: #4361ee;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
transition: transform 0.3s;
}
.social-icon:hover {
transform: translateY(-3px);
}
@media (max-width: 768px) {
.footer-layout {
grid-template-columns: 1fr 1fr;
gap: 20px;
}
}
@media (max-width: 480px) {
.footer-layout {
grid-template-columns: 1fr;
text-align: center;
}
.social-icons {
justify-content: center;
}
}</code></pre>
</div>
</div>
</div>
<!-- 示例16: 价格表布局 -->
<div class="demo-section">
<h2 class="demo-title">16. 价格表布局</h2>
<p class="demo-description">使用Grid创建价格表布局,适合展示不同套餐或服务等级。</p>
<div class="demo-container">
<div class="grid-demo" style="grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px;">
<div class="demo-card" style="text-align: center; border: 2px solid #e9ecef;">
<h3 style="margin-bottom: 10px;">基础版</h3>
<p style="color: var(--primary); font-size: 1.5rem; font-weight: bold; margin-bottom: 15px;">¥99/月</p>
<ul style="list-style: none; margin-bottom: 20px; text-align: left;">
<li style="padding: 8px 0; border-bottom: 1px solid #e9ecef;">✓ 基础功能</li>
<li style="padding: 8px 0; border-bottom: 1px solid #e9ecef;">✓ 5GB存储空间</li>
<li style="padding: 8px 0; border-bottom: 1px solid #e9ecef;">✓ 基础支持</li>
<li style="padding: 8px 0; border-bottom: 1px solid #e9ecef;">✗ 高级功能</li>
</ul>
<button class="btn">选择计划</button>
</div>
<div class="demo-card" style="text-align: center; border: 2px solid var(--primary); position: relative;">
<div style="position: absolute; top: -10px; left: 50%; transform: translateX(-50%); background: var(--primary); color: white; padding: 5px 15px; border-radius: 15px; font-size: 0.8rem;">最受欢迎</div>
<h3 style="margin-bottom: 10px;">专业版</h3>
<p style="color: var(--primary); font-size: 1.5rem; font-weight: bold; margin-bottom: 15px;">¥199/月</p>
<ul style="list-style: none; margin-bottom: 20px; text-align: left;">
<li style="padding: 8px 0; border-bottom: 1px solid #e9ecef;">✓ 所有基础功能</li>
<li style="padding: 8px 0; border-bottom: 1px solid #e9ecef;">✓ 50GB存储空间</li>
<li style="padding: 8px 0; border-bottom: 1px solid #e9ecef;">✓ 优先支持</li>
<li style="padding: 8px 0; border-bottom: 1px solid #e9ecef;">✓ 高级功能</li>
</ul>
<button class="btn" style="background: var(--primary);">选择计划</button>
</div>
<div class="demo-card" style="text-align: center; border: 2px solid #e9ecef;">
<h3 style="margin-bottom: 10px;">企业版</h3>
<p style="color: var(--primary); font-size: 1.5rem; font-weight: bold; margin-bottom: 15px;">¥399/月</p>
<ul style="list-style: none; margin-bottom: 20px; text-align: left;">
<li style="padding: 8px 0; border-bottom: 1px solid #e9ecef;">✓ 所有专业功能</li>
<li style="padding: 8px 0; border-bottom: 1px solid #e9ecef;">✓ 无限存储空间</li>
<li style="padding: 8px 0; border-bottom: 1px solid #e9ecef;">✓ 24/7专属支持</li>
<li style="padding: 8px 0; border-bottom: 1px solid #e9ecef;">✓ 定制功能</li>
</ul>
<button class="btn">选择计划</button>
</div>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.pricing-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
}
.pricing-card {
background: white;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
padding: 30px;
text-align: center;
border: 2px solid #e9ecef;
position: relative;
transition: transform 0.3s, box-shadow 0.3s;
}
.pricing-card:hover {
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
}
.pricing-card.featured {
border-color: #4361ee;
}
.featured-badge {
position: absolute;
top: -10px;
left: 50%;
transform: translateX(-50%);
background: #4361ee;
color: white;
padding: 5px 15px;
border-radius: 15px;
font-size: 0.8rem;
}
.pricing-title {
margin-bottom: 10px;
font-size: 1.5rem;
}
.pricing-price {
color: #4361ee;
font-size: 1.5rem;
font-weight: bold;
margin-bottom: 15px;
}
.pricing-features {
list-style: none;
margin-bottom: 20px;
text-align: left;
}
.pricing-features li {
padding: 8px 0;
border-bottom: 1px solid #e9ecef;
}</code></pre>
</div>
</div>
</div>
<!-- 示例17: 团队介绍布局 -->
<div class="demo-section">
<h2 class="demo-title">17. 团队介绍布局</h2>
<p class="demo-description">使用Grid创建团队介绍布局,展示团队成员的头像和基本信息。</p>
<div class="demo-container">
<div class="grid-demo" style="grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px;">
<div class="demo-card" style="text-align: center;">
<div style="width: 100px; height: 100px; background: var(--primary); border-radius: 50%; margin: 0 auto 15px;"></div>
<h4 style="margin-bottom: 5px;">张三</h4>
<p style="color: var(--primary); margin-bottom: 10px;">前端开发工程师</p>
<p style="color: #666; font-size: 0.9rem;">负责网站前端开发和用户体验优化。</p>
</div>
<div class="demo-card" style="text-align: center;">
<div style="width: 100px; height: 100px; background: var(--secondary); border-radius: 50%; margin: 0 auto 15px;"></div>
<h4 style="margin-bottom: 5px;">李四</h4>
<p style="color: var(--primary); margin-bottom: 10px;">后端开发工程师</p>
<p style="color: #666; font-size: 0.9rem;">负责服务器端开发和数据库设计。</p>
</div>
<div class="demo-card" style="text-align: center;">
<div style="width: 100px; height: 100px; background: var(--a***ent); border-radius: 50%; margin: 0 auto 15px;"></div>
<h4 style="margin-bottom: 5px;">王五</h4>
<p style="color: var(--primary); margin-bottom: 10px;">UI/UX设计师</p>
<p style="color: #666; font-size: 0.9rem;">负责产品界面设计和用户体验优化。</p>
</div>
<div class="demo-card" style="text-align: center;">
<div style="width: 100px; height: 100px; background: var(--su***ess); border-radius: 50%; margin: 0 auto 15px;"></div>
<h4 style="margin-bottom: 5px;">赵六</h4>
<p style="color: var(--primary); margin-bottom: 10px;">产品经理</p>
<p style="color: #666; font-size: 0.9rem;">负责产品规划和需求分析。</p>
</div>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.team-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
}
.team-card {
background: white;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
padding: 20px;
text-align: center;
transition: transform 0.3s, box-shadow 0.3s;
}
.team-card:hover {
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
}
.team-avatar {
width: 100px;
height: 100px;
background: #4361ee;
border-radius: 50%;
margin: 0 auto 15px;
}
.team-name {
margin-bottom: 5px;
font-size: 1.2rem;
}
.team-role {
color: #4361ee;
margin-bottom: 10px;
font-weight: 500;
}
.team-description {
color: #666;
font-size: 0.9rem;
line-height: 1.5;
}</code></pre>
</div>
</div>
</div>
<!-- 示例18: 特性展示布局 -->
<div class="demo-section">
<h2 class="demo-title">18. 特性展示布局</h2>
<p class="demo-description">使用Grid创建特性展示布局,适合展示产品功能或服务优势。</p>
<div class="demo-container">
<div class="grid-demo" style="grid-template-columns: repeat(2, 1fr); gap: 30px;">
<div style="display: grid; grid-template-columns: 60px 1fr; gap: 15px; align-items: start;">
<div style="width: 60px; height: 60px; background: var(--primary); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; color: white;">1</div>
<div>
<h4 style="margin-bottom: 10px;">易用性</h4>
<p style="color: #666;">我们的产品设计简洁直观,用户可以快速上手,无需复杂的学习过程。</p>
</div>
</div>
<div style="display: grid; grid-template-columns: 60px 1fr; gap: 15px; align-items: start;">
<div style="width: 60px; height: 60px; background: var(--secondary); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; color: white;">2</div>
<div>
<h4 style="margin-bottom: 10px;">高性能</h4>
<p style="color: #666;">采用最新技术架构,确保系统运行流畅,响应迅速,处理大量数据无压力。</p>
</div>
</div>
<div style="display: grid; grid-template-columns: 60px 1fr; gap: 15px; align-items: start;">
<div style="width: 60px; height: 60px; background: var(--a***ent); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; color: white;">3</div>
<div>
<h4 style="margin-bottom: 10px;">安全性</h4>
<p style="color: #666;">多重安全防护机制,保障用户数据和隐私安全,符合行业安全标准。</p>
</div>
</div>
<div style="display: grid; grid-template-columns: 60px 1fr; gap: 15px; align-items: start;">
<div style="width: 60px; height: 60px; background: var(--su***ess); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; color: white;">4</div>
<div>
<h4 style="margin-bottom: 10px;">可扩展性</h4>
<p style="color: #666;">系统架构灵活,支持功能模块扩展,满足企业不同阶段的业务需求。</p>
</div>
</div>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.features-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 30px;
}
.feature-item {
display: grid;
grid-template-columns: 60px 1fr;
gap: 15px;
align-items: start;
}
.feature-icon {
width: 60px;
height: 60px;
background: #4361ee;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
color: white;
}
.feature-content h4 {
margin-bottom: 10px;
}
.feature-content p {
color: #666;
line-height: 1.6;
}
@media (max-width: 768px) {
.features-grid {
grid-template-columns: 1fr;
}
}</code></pre>
</div>
</div>
</div>
<!-- 示例19: 时间轴布局 -->
<div class="demo-section">
<h2 class="demo-title">19. 时间轴布局</h2>
<p class="demo-description">使用Grid创建时间轴布局,适合展示历史事件或项目进展。</p>
<div class="demo-container">
<div class="grid-demo" style="grid-template-columns: 1fr auto 1fr; gap: 20px; align-items: center;">
<div class="demo-card">
<h4 style="margin-bottom: 10px;">项目启动</h4>
<p style="color: #666; margin-bottom: 10px;">2023年1月</p>
<p style="color: #666; font-size: 0.9rem;">项目正式启动,组建核心团队,明确项目目标和范围。</p>
</div>
<div style="width: 20px; height: 20px; background: var(--primary); border-radius: 50%;"></div>
<div></div>
<div></div>
<div style="width: 20px; height: 20px; background: var(--secondary); border-radius: 50%;"></div>
<div class="demo-card">
<h4 style="margin-bottom: 10px;">需求分析</h4>
<p style="color: #666; margin-bottom: 10px;">2023年2月</p>
<p style="color: #666; font-size: 0.9rem;">深入分析用户需求,制定产品功能规格和设计方向。</p>
</div>
<div class="demo-card">
<h4 style="margin-bottom: 10px;">设计与开发</h4>
<p style="color: #666; margin-bottom: 10px;">2023年3月-5月</p>
<p style="color: #666; font-size: 0.9rem;">完成产品UI/UX设计,开始核心功能开发。</p>
</div>
<div style="width: 20px; height: 20px; background: var(--a***ent); border-radius: 50%;"></div>
<div></div>
<div></div>
<div style="width: 20px; height: 20px; background: var(--su***ess); border-radius: 50%;"></div>
<div class="demo-card">
<h4 style="margin-bottom: 10px;">测试与优化</h4>
<p style="color: #666; margin-bottom: 10px;">2023年6月</p>
<p style="color: #666; font-size: 0.9rem;">进行全面测试,修复发现的问题,优化产品性能。</p>
</div>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.timeline {
display: grid;
grid-template-columns: 1fr auto 1fr;
gap: 20px;
align-items: center;
}
.timeline-item {
background: white;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
padding: 20px;
}
.timeline-item h4 {
margin-bottom: 10px;
}
.timeline-date {
color: #666;
margin-bottom: 10px;
}
.timeline-description {
color: #666;
font-size: 0.9rem;
line-height: 1.5;
}
.timeline-marker {
width: 20px;
height: 20px;
background: #4361ee;
border-radius: 50%;
}
/* 连接线效果 */
.timeline::before {
content: '';
position: absolute;
top: 0;
bottom: 0;
left: 50%;
width: 2px;
background: #e9ecef;
transform: translateX(-50%);
z-index: -1;
}
@media (max-width: 768px) {
.timeline {
grid-template-columns: 1fr;
gap: 15px;
}
.timeline-marker {
display: none;
}
.timeline::before {
display: none;
}
}</code></pre>
</div>
</div>
</div>
<!-- 示例20: 复杂网格嵌套布局 -->
<div class="demo-section">
<h2 class="demo-title">20. 复杂网格嵌套布局</h2>
<p class="demo-description">展示Grid嵌套使用的能力,创建复杂的多级网格布局结构。</p>
<div class="demo-container">
<div style="display: grid; grid-template-columns: 1fr 2fr 1fr; grid-template-rows: auto 1fr auto; height: 350px; gap: 15px;">
<header style="grid-column: 1 / span 3; background: var(--primary); color: white; padding: 15px; border-radius: 8px; text-align: center;">页面头部</header>
<aside style="background: var(--secondary); color: white; padding: 15px; border-radius: 8px;">
<h4 style="margin-bottom: 15px;">左侧边栏</h4>
<ul style="list-style: none;">
<li style="padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.1);">菜单项 1</li>
<li style="padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.1);">菜单项 2</li>
<li style="padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.1);">菜单项 3</li>
</ul>
</aside>
<main style="display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: auto 1fr; gap: 15px; padding: 15px; background: var(--light); border-radius: 8px;">
<div style="grid-column: 1 / span 2; background: white; padding: 15px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1);">
<h4 style="margin-bottom: 10px;">主要内容标题</h4>
<p style="color: #666;">这是主要内容区域的介绍文本。</p>
</div>
<div style="background: white; padding: 15px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1);">
<h5 style="margin-bottom: 10px;">子内容 1</h5>
<p style="color: #666; font-size: 0.9rem;">子内容区域的描述文本。</p>
</div>
<div style="background: white; padding: 15px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1);">
<h5 style="margin-bottom: 10px;">子内容 2</h5>
<p style="color: #666; font-size: 0.9rem;">子内容区域的描述文本。</p>
</div>
</main>
<aside style="background: var(--a***ent); color: white; padding: 15px; border-radius: 8px;">
<h4 style="margin-bottom: 15px;">右侧边栏</h4>
<div style="background: rgba(255,255,255,0.1); padding: 10px; border-radius: 5px; margin-bottom: 10px;">
<p style="font-size: 0.9rem;">侧边栏小部件 1</p>
</div>
<div style="background: rgba(255,255,255,0.1); padding: 10px; border-radius: 5px;">
<p style="font-size: 0.9rem;">侧边栏小部件 2</p>
</div>
</aside>
<footer style="grid-column: 1 / span 3; background: var(--dark); color: white; padding: 15px; border-radius: 8px; text-align: center;">页面底部</footer>
</div>
</div>
<div class="code-container">
<div class="code-header">
<span>CSS代码</span>
<button class="copy-btn" onclick="copyCode(this)">复制代码</button>
</div>
<div class="code-content">
<pre><code class="language-css">.***plex-nested {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
grid-template-rows: auto 1fr auto;
height: 100vh;
gap: 15px;
}
.***plex-header {
grid-column: 1 / span 3;
background: #4361ee;
color: white;
padding: 15px;
text-align: center;
}
.***plex-sidebar {
background: #3a0ca3;
color: white;
padding: 15px;
}
.***plex-main {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: auto 1fr;
gap: 15px;
padding: 15px;
background: #f8f9fa;
}
.main-title {
grid-column: 1 / span 2;
background: white;
padding: 15px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.sub-content {
background: white;
padding: 15px;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.***plex-footer {
grid-column: 1 / span 3;
background: #212529;
color: white;
padding: 15px;
text-align: center;
}
@media (max-width: 768px) {
.***plex-nested {
grid-template-columns: 1fr;
grid-template-rows: auto auto 1fr auto auto;
}
.***plex-header, .***plex-footer {
grid-column: 1;
}
.***plex-main {
grid-template-columns: 1fr;
}
.main-title {
grid-column: 1;
}
}</code></pre>
</div>
</div>
</div>
<footer>
<p>© 2023 CSS3 Grid网格响应布局示例 | 使用纯CSS3实现,无第三方框架</p>
</footer>
</div>
<script>
// 复制代码功能
function copyCode(button) {
const codeContainer = button.closest('.code-container');
const codeElement = codeContainer.querySelector('code');
const textArea = document.createElement('textarea');
textArea.value = codeElement.textContent;
document.body.appendChild(textArea);
textArea.select();
document.exec***mand('copy');
document.body.removeChild(textArea);
// 显示复制成功反馈
const originalText = button.textContent;
button.textContent = '已复制!';
setTimeout(() => {
button.textContent = originalText;
}, 2000);
}
// 初始化Prism高亮
document.addEventListener('DOMContentLoaded', () => {
Prism.highlightAll();
const tocList = document.getElementById("toc-list");
document.querySelectorAll("h2").forEach((e,index) => {
const id = "demo-" + (index + 1);
e.setAttribute("id",id);
const link = document.createElement("a");
link.href = "#" + id;
link.textContent = e.textContent;
link.classList.add("toc-link");
tocList.appendChild(link);
})
});
</script>
</body>
</html>
响应式设计技巧
- 使用auto-fill和auto-fit - 自动调整列数适应容器
- 结合minmax()函数 - 设置灵活的尺寸范围
- 利用媒体查询 - 在不同断点调整网格结构
- 使用命名区域 - 提高代码可读性和维护性
- 注意浏览器支持 - 为旧版浏览器提供降级方案
浏览器兼容性
CSS Grid在现代浏览器中有很好的支持:
- Chrome 57+
- Firefox 52+
- Safari 10.1+
- Edge 16+
- Opera 44+
对于需要支持旧版浏览器的情况,可以使用特性检测和渐进增强策略。
性能考虑
- 避免过度嵌套 - 复杂的网格结构可能影响性能
- 合理使用显式和隐式网格 - 根据内容需求选择
- 注意重复渲染 - 动态内容更新时的性能优化
总结
CSS Grid布局为Web开发带来了革命性的变化,它解决了传统布局中的许多难题。通过掌握这20个实用示例,您将能够:
- 创建各种复杂的网页布局
- 实现真正的响应式设计
- 提高开发效率和代码质量
- 创建更美观、更专业的用户界面
Grid布局的学习曲线相对平缓,一旦掌握核心概念,您将发现它比传统布局方法更直观、更强大。建议在实际项目中多加练习,逐步掌握Grid布局的精髓。