当前位置: 首页 > news >正文

CSS Grid 布局实战:从入门到精通

文章目录

    • 前言
    • 一、CSS Grid 布局概述
      • 1.1 什么是 CSS Grid 布局?
      • 1.2 主要特点
    • 二、基本概念
      • 2.1 网格容器
      • 2.2 网格线
      • 2.3 网格轨道
      • 2.4 网格区域
    • 三、常用属性
      • 3.1 定义网格结构
      • 3.2 控制网格项的位置
      • 3.3 控制网格间距
      • 3.4 自动填充和重复
    • 四、实践案例
      • 4.1 项目结构
      • 4.2 HTML结构
      • 4.3 CSS样式
    • 五、响应式布局
      • 5.1 媒体查询示例
    • 六、进阶技巧
      • 6.1 嵌套网络
      • 6.2 动态网络
    • 七、最佳实践
      • 7.1 使用命名区域
      • 7.2 使用fr单位
      • 7.3 使用 auto-fit 和 auto-fill
    • 八、常见问题及解决方法
      • 8.1 网格项超出容器边界
      • 8.2 网格项对齐问题
    • 结语


前言

随着前端技术的不断发展,CSS Grid 布局逐渐成为构建复杂和灵活布局的强大工具。正如某位设计师所说:“好的设计是解决问题的艺术。”CSS Grid 布局不仅简化了布局的创建过程,还提供了更高的灵活性和控制能力。本文将详细介绍 CSS Grid 布局的基本概念、常用属性和实际案例,帮助开发者从入门到精通这一强大的布局工具。


一、CSS Grid 布局概述

1.1 什么是 CSS Grid 布局?

CSS Grid 布局是一种二维布局系统,允许开发者在水平和垂直方向上对齐元素。与传统的 Flexbox 布局相比,Grid 布局更适合处理复杂的多列或多行布局。

1.2 主要特点

  • 二维布局:同时支持行和列的布局。
  • 灵活的对其方式:可以轻松对齐和对齐元素。
  • 强大的控制能力:可以通过属性精确控制网格的大小和位置。

二、基本概念

2.1 网格容器

网格容器是应用了 display: grid 的元素。所有的直接子元素都会成为网格项。

.container {display: grid;
}

2.2 网格线

网格线是网格中的虚拟线,用于划分网格区域。网格线可以是显式的(通过 grid-template-columnsgrid-template-rows 定义)或隐式的(自动生成)。

2.3 网格轨道

网格轨道是网格线之间的空间,可以是行或列。

2.4 网格区域

网格区域是由四条网格线围成的矩形区域,可以包含一个或多个网格项。

三、常用属性

3.1 定义网格结构

  • grid-template-columns:定义列的宽度。
  • grid-template-rows:定义行的高度。
  • grid-template-areas:定义网格区域的名称。
.container {display: grid;grid-template-columns: 100px 200px auto;grid-template-rows: 50px 100px;grid-template-areas:"header header header""nav main sidebar""footer footer footer";
}

3.2 控制网格项的位置

  • grid-column:定义网格项在列方向上的位置。
  • grid-row:定义网格项在行方向上的位置。
  • grid-area:定义网格项所在的网格区域。
.item1 {grid-column: 1 / 3;grid-row: 1 / 2;
}.item2 {grid-area: nav;
}

3.3 控制网格间距

  • grid-gap:定义网格项之间的间距。
  • grid-column-gap:定义列方向上的间距。
  • grid-row-gap:定义行方向上的间距。
.container {display: grid;grid-template-columns: repeat(3, 1fr);grid-template-rows: repeat(2, 100px);grid-gap: 10px;
}

3.4 自动填充和重复

  • repeat:重复定义网格轨道。
  • auto-fill:自动填充网格轨道。
  • auto-fit:自动适应网格轨道。
.container {display: grid;grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));grid-gap: 10px;
}

四、实践案例

为了更好地理解如何在实际项目中应用 CSS Grid 布局,我们来看一个简单的示例。假设我们有一个简单的响应式布局,包括头部、导航、主内容区和侧边栏。

4.1 项目结构

/my-grid-layout
│── /public
│   └── index.html
├── /styles
│   └── styles.css
└── package.json

4.2 HTML结构

<!-- public/index.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>CSS Grid Layout Example</title><link rel="stylesheet" href="styles/styles.css">
</head>
<body><div class="container"><header class="header">Header</header><nav class="nav">Nav</nav><main class="main">Main Content</main><aside class="sidebar">Sidebar</aside><footer class="footer">Footer</footer></div>
</body>
</html>

4.3 CSS样式

/* styles/styles.css */
* {box-sizing: border-box;margin: 0;padding: 0;
}body {font-family: Arial, sans-serif;
}.container {display: grid;grid-template-columns: 200px 1fr 200px;grid-template-rows: 100px 1fr 100px;grid-template-areas:"header header header""nav main sidebar""footer footer footer";grid-gap: 10px;height: 100vh;
}.header {grid-area: header;background-color: #f8f9fa;text-align: center;padding: 20px;
}.nav {grid-area: nav;background-color: #e9ecef;padding: 20px;
}.main {grid-area: main;background-color: #dee2e6;padding: 20px;
}.sidebar {grid-area: sidebar;background-color: #ced4da;padding: 20px;
}.footer {grid-area: footer;background-color: #adb5bd;text-align: center;padding: 20px;
}

五、响应式布局

CSS Grid 布局的一个重要优势是其强大的响应式能力。通过媒体查询,可以轻松地调整网格结构以适应不同的屏幕尺寸。

5.1 媒体查询示例

/* styles/styles.css */
@media (max-width: 768px) {.container {grid-template-columns: 1fr;grid-template-rows: auto auto 1fr auto;grid-template-areas:"header""nav""main""sidebar""footer";}.nav {order: 2;}.main {order: 3;}.sidebar {order: 4;}.footer {order: 5;}
}

六、进阶技巧

6.1 嵌套网络

在某些情况下,你可能需要在一个网格项中嵌套另一个网格。这可以通过在网格项中再次应用 display: grid 来实现。

<!-- public/index.html -->
<div class="container"><header class="header">Header</header><nav class="nav">Nav</nav><main class="main"><div class="content"><div class="card">Card 1</div><div class="card">Card 2</div><div class="card">Card 3</div></div></main><aside class="sidebar">Sidebar</aside><footer class="footer">Footer</footer>
</div>
/* styles/styles.css */
.content {display: grid;grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));grid-gap: 10px;
}.card {background-color: #f8f9fa;padding: 20px;text-align: center;
}

6.2 动态网络

通过 JavaScript 动态生成网格项,可以根据数据动态调整网格布局。

<!-- public/index.html -->
<div class="container"><header class="header">Header</header><nav class="nav">Nav</nav><main class="main"><div id="content"></div></main><aside class="sidebar">Sidebar</aside><footer class="footer">Footer</footer>
</div><script>const data = [{ title: 'Card 1', content: 'This is card 1' },{ title: 'Card 2', content: 'This is card 2' },{ title: 'Card 3', content: 'This is card 3' }];const contentContainer = document.getElementById('content');data.forEach(item => {const card = document.createElement('div');card.classList.add('card');card.innerHTML = `<h2>${item.title}</h2><p>${item.content}</p>`;contentContainer.appendChild(card);});
</script>

七、最佳实践

7.1 使用命名区域

使用命名区域可以使布局代码更具可读性和可维护性。

.container {display: grid;grid-template-columns: 200px 1fr 200px;grid-template-rows: 100px 1fr 100px;grid-template-areas:"header header header""nav main sidebar""footer footer footer";grid-gap: 10px;
}
.header {grid-area: header;
}
.nav {grid-area: nav;
}
.main {grid-area: main;
}
.sidebar {grid-area: sidebar;
}
.footer {grid-area: footer;
}

7.2 使用fr单位

fr 单位表示分数单位,可以根据可用空间自动分配网格轨道的大小。

.container {display: grid;grid-template-columns: 1fr 2fr 1fr;grid-template-rows: 100px 1fr 100px;grid-gap: 10px;
}

7.3 使用 auto-fit 和 auto-fill

auto-fitauto-fill 可以自动调整网格轨道的数量和大小,适用于动态内容。

.container {display: grid;grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));grid-gap: 10px;
}

八、常见问题及解决方法

8.1 网格项超出容器边界

如果网格项的内容过多,可能会超出容器边界。可以通过设置 overflow 属性来解决。

.item {overflow: auto;
}

8.2 网格项对齐问题

使用 justify-itemsalign-items 属性可以控制网格项的对齐方式。

.container {justify-items: center;align-items: center;
}

结语

CSS Grid 布局是一种强大的布局工具,可以极大地简化复杂布局的创建过程。通过本文的介绍,希望读者能够掌握 CSS Grid 布局的基本概念、常用属性和实际应用方法。无论是初学者还是有经验的开发者,都可以从 CSS Grid 布局中受益,构建更加灵活和高效的前端应用。

通过本文的详细介绍,希望能够帮助您更好地理解和应用 CSS Grid 布局,从而构建更加复杂和灵活的前端应用。

相关文章:

CSS Grid 布局实战:从入门到精通

文章目录 前言一、CSS Grid 布局概述1.1 什么是 CSS Grid 布局&#xff1f;1.2 主要特点 二、基本概念2.1 网格容器2.2 网格线2.3 网格轨道2.4 网格区域 三、常用属性3.1 定义网格结构3.2 控制网格项的位置3.3 控制网格间距3.4 自动填充和重复 四、实践案例4.1 项目结构4.2 HTM…...

git创建远程仓库,以gitee码云为例GitHub同理

git远程Remote服务端仓库构建的视频教程在这 Git建立服务端Remote远程仓库&#xff0c;gitee码云例&#xff0c;Github_哔哩哔哩_bilibili 1、登gitee码云/Github 登录 - Gitee.com https://github.com/ &#xff08;没账号的注册一下就行&#xff09; 点击如下图位置的创…...

Java爬虫(HttpURLConnection)详解

文章目录 Java爬虫&#xff08;HttpURLConnection&#xff09;详解一、引言二、准备工作1、环境配置2、理解HttpURLConnection 三、发送GET请求1、创建URL对象2、打开连接3、设置请求方法4、连接并读取响应5、处理返回的数据 四、发送POST请求1、设置输出2、发送请求体3、读取响…...

基于STM32的智能停车管理系统设计

引言 随着城市汽车保有量的增加&#xff0c;停车难问题日益严重&#xff0c;传统停车管理方式效率低下&#xff0c;无法满足现代化需求。为了解决这一问题&#xff0c;本项目基于STM32微控制器设计了一种智能停车管理系统。系统能够通过传感器实时监测停车位的使用情况&#x…...

【循环神经网络】

循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一类用于处理序列数据的神经网络&#xff0c;擅长处理具有时间依赖或顺序结构的数据。RNN通过循环连接的结构&#xff0c;使得当前时刻的输出可以受之前时刻信息的影响&#xff0c;因此被广泛应用于自然语…...

优选算法 - 4 ( 链表 哈希表 字符串 9000 字详解 )

一&#xff1a;链表 1.1 链表常用技巧和操作总结 1.2 两数相加 题目链接&#xff1a;两数相加 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* …...

CTF-RE 从0到N: windows反调试-获取Process Environment Block(PEB)信息来检测调试

在Windows操作系统中&#xff0c;Process Environment Block (PEB&#xff0c;进程环境块) 是一个包含特定进程信息的数据结构。它可以被用于反调试中 如何获取PEB指针&#xff1f; 在Windows操作系统中&#xff0c;获取PEB指针的常见方法主要有以下几种。&#xff1a; 1. 使…...

STM32开发基础阶段复习

1.使用寄存器方式点亮LED灯的三个步骤是什么&#xff1f; 首先使能RCC_APB2ENR&#xff08;外设时钟使能寄存器&#xff09;对应的GPIO端口时钟,即给LED这个外设使能时钟。 配置对应GPIO端口&#xff0c;配置为通用推挽输出&#xff0c;输出速度可以选择最大。 将GPIO端口输…...

搜维尔科技:SenseGlove触觉反馈手套开箱+场景测试

搜维尔科技&#xff1a;SenseGlove触觉反馈手套开箱场景测试 SenseGlove触觉反馈手套开箱场景测试...

在k8s上部署Crunchy Postgres for Kubernetes

目录 一、前言二、安装Crunchy Postgres for Kubernetes三、部署一个简单的postgres集群四、增加pgbouncer五、数据备份六、备份恢复七、postgres配置参数七、数据导入 一、前言 Crunchy Postgres可以帮助我们在k8s上快速部署一个高可用、具有自动备份和恢复功能的postgres集群…...

大模型(LLMs)进阶篇

大模型&#xff08;LLMs&#xff09;进阶篇 一、什么是生成式大模型&#xff1f; 生成式大模型&#xff08;一般简称大模型LLMs&#xff09;是指能用于创作新内容&#xff0c;例如文本、图片、音频以及视频的一类深度学习模型。相比普通深度学习模型&#xff0c;主要有两点不…...

近几年新笔记本重装系统方法及一些注意事项

新笔记本怎么重装系统&#xff1f; 近几年的新笔记本默认开启了raid on模式或vmd选项&#xff0c;安装过程中会遇到问题&#xff0c;新笔记本电脑重装自带的系统建议采用u盘方式安装&#xff0c;默认新笔记本有bitlocker加密机制&#xff0c;如果采用一键重装系统或硬盘方式安装…...

小程序19-微信小程序的样式和组件介绍

在小程序中不能使用 HTML 标签&#xff0c;也就没有 DOM 和 BOM&#xff0c;CSS 也仅支持部分选择器 小程序提供了 WXML 进行页面结构的编写&#xff0c;WXSS 进行页面的样式编写 WXML 提供了 view、text、image、navigator等标签构建页面结构&#xff0c;小程序中标签称为组件…...

Chrome 浏览器开启打印模式

打开开发者工具ctrl shift p输入print 找到 Emulate CSS print media type...

Git回到某个分支的某次提交

1.切换到需要操作的分支&#xff08;<branch-name>是分支名称&#xff09;。 命令如下&#xff1a; git checkout <branch-name> 2.获取代码的提交记录 。命令如下&#xff1a; git log 按q退出当前命令对话。 获取到某次提交或者合并的hash值&#xff08;下文…...

[前端面试]javascript

js数据类型 简单数据类型 null undefined string number boolean bigint 任意精度的大整数 symbol 创建唯一且不变的值&#xff0c;常用来表示对象属性的唯一标识 复杂数据类型 object&#xff0c;数组&#xff0c;函数,正则,日期等 区别 存储区别 简单数据类型因为其大小固定…...

对象的初步认识

#对象可组织数据&#xff08;如统计数据的表格&#xff09; 下以表格为例 1.设计一个表格:(None为初始值设定&#xff0c;表示无) class a; ##1None ##2None 2.创建一个表格 变量a 3.对对象的属性进行赋值 变量.##1"##" 变量.##2"##" 4.查询对象中…...

layui 输入框带清空图标、分词搜索、关键词高亮

https://andi.cn/page/621858.html...

Vue 3 + TypeScript: 类型安全的前端开发实践

引言 在现代前端开发中&#xff0c;TypeScript 已经成为提升代码质量和开发效率的重要工具。将 Vue 3 与 TypeScript 结合使用&#xff0c;能够为我们的项目带来更好的类型安全性和开发体验。 1. 项目配置 1.1 创建项目 使用 Vue CLI 创建支持 TypeScript 的 Vue 3 项目&am…...

Python爬虫知识体系-----requests-----持续更新

数据科学、数据分析、人工智能必备知识汇总-----Python爬虫-----持续更新&#xff1a;https://blog.csdn.net/grd_java/article/details/140574349 文章目录 一、安装和基本使用1. 安装2. 基本使用3. response常用属性 二、get请求三、post请求四、代理 一、安装和基本使用 1.…...

mRNA疫苗序列生物信息学分析:从密码子优化到免疫原性预测

1. 项目概述&#xff1a;解码两大mRNA疫苗的“核心蓝图”作为一名在生物信息学和基因组学领域摸爬滚打了十多年的“老码农”&#xff0c;我见过太多令人兴奋的数据集&#xff0c;但当我第一次在GitHub上看到这个名为“Assemblies-of-putative-SARS-CoV2-spike-encoding-mRNA-se…...

芯片老化座的工作温度范围?

在芯片测试领域&#xff0c;老化座&#xff08;Burn-in Socket&#xff09;是保障半导体器件长期可靠性的关键设备。它不仅要在极端温度下稳定工作&#xff0c;还要确保测试数据的精准度。今天&#xff0c;我们以HMILU&#xff08;深圳市鸿怡电子有限公司&#xff09;为例&…...

终极指南:3步掌握yfinance金融数据获取与智能修复实战

终极指南&#xff1a;3步掌握yfinance金融数据获取与智能修复实战 【免费下载链接】yfinance Download market data from Yahoo! Finances API 项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance yfinance是一个强大的Python库&#xff0c;能够从Yahoo! Finan…...

SyntaxUI:基于原子设计与Web组件的现代UI库开发实践

1. 项目概述&#xff1a;一个为开发者而生的现代UI组件库 如果你是一名前端开发者&#xff0c;或者正在构建一个需要用户界面的应用&#xff0c;那么你肯定经历过这样的场景&#xff1a;为了一个按钮的样式、一个表格的交互&#xff0c;或者一个模态框的动画&#xff0c;反复在…...

游戏技能工程化:用数据驱动与计算机视觉构建Apex Legends个人成长系统

1. 项目概述&#xff1a;从“Apex Growth”到“OpenClaw Skill”的爬升之路如果你是一名游戏开发者&#xff0c;尤其是对竞技类FPS&#xff08;第一人称射击&#xff09;游戏感兴趣&#xff0c;那么“Apex Legends”这个名字你一定不陌生。这款游戏以其快节奏、高机动性和深度的…...

数据流编排与异步任务调度中间件kelivo部署与实战指南

1. 项目概述与核心价值最近在折腾一个挺有意思的项目&#xff0c;叫“Chevey339/kelivo”。乍一看这个标题&#xff0c;可能有点摸不着头脑&#xff0c;它不像那些直接告诉你“XX管理系统”或“XX工具库”的项目名那么直白。但恰恰是这种看似神秘的命名&#xff0c;背后往往隐藏…...

车载以太网之要火系列 - 第46篇:郭大侠学SOME/IP (offer Service):启动时快稍后慢,断断续续哥还在

写在开篇蓉儿继续挖坑上回说到&#xff0c;郭靖搞清楚了Offer Service的基本原理——服务端广播“我会啥&#xff0c;我在这”&#xff0c;TTL告诉客户端有效期。郭靖合上笔记本&#xff0c;突然皱起眉头&#xff1a;“蓉儿&#xff0c;我有个问题——如果每个ECU都每隔1.5秒发…...

开源大模型推理引擎Takeoff部署指南:从原理到生产实践

1. 项目概述&#xff1a;一个让大模型推理“起飞”的开源引擎 如果你正在为如何将那些动辄几十GB、几百亿参数的大语言模型&#xff08;LLM&#xff09;部署到生产环境而头疼&#xff0c;或者厌倦了为每一次API调用支付高昂的费用&#xff0c;那么今天聊的这个项目&#xff0c…...

MySQL-MVCC核心原理-版本链ReadView与可见性判断

MVCC 全称是 Multi-Version Concurrency Control&#xff0c;也就是多版本并发控制。它的核心思想是&#xff1a;为同一行数据维护多个版本&#xff0c;让读写在很多情况下不用互相阻塞。 没有 MVCC 时&#xff0c;读写冲突通常要大量依赖锁。MVCC 让普通 select 可以读一个可见…...

Sophia优化器:二阶曲率感知如何加速大模型训练与调参

1. 项目概述&#xff1a;当优化器遇上“二阶”智慧最近在复现一些前沿的论文实验时&#xff0c;我又一次被优化器的选择给卡住了。AdamW虽然稳&#xff0c;但在某些超大规模模型或特定任务上&#xff0c;总觉得收敛速度不够快&#xff0c;调参又是个玄学。就在我对着损失曲线发…...