Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
CSS Grid实现复杂不规则布局教程_创想鸟

CSS Grid实现复杂不规则布局教程

CSS Grid实现复杂不规则布局教程

本教程将深入探讨如何利用css grid布局实现传统html表格难以构建的复杂、不规则的网格结构,例如各列行高不一的布局。我们将详细介绍css grid的核心概念,包括网格容器、网格项、行列定义、自动流向以及精确的元素定位与跨度控制,并通过一个具体示例,指导您构建出高度灵活且响应式的页面布局,避免滥用表格进行非数据展示的布局设计。

理解传统表格的局限性与CSS Grid的优势

在网页布局设计中,尤其当需要创建类似砖石瀑布流或各列行高不一的复杂结构时,许多初学者可能会尝试使用HTML的

元素。然而,元素的主要设计目的是展示二维表格数据,其结构 rigid(刚性)且语义上不适合非数据展示的布局。当尝试用表格实现视觉上的“不规则行高”时,往往会导致复杂的嵌套、冗余的HTML代码以及难以维护的CSS样式。

CSS Grid布局(CSS网格布局)是CSS3中引入的一种强大的二维布局系统,它允许开发者将页面内容划分为行和列,并能精确控制每个网格项(grid item)的位置和大小,甚至可以使其跨越多个行或列。相较于传统表格或Flexbox(一维布局),CSS Grid在处理复杂、非线性的布局时展现出无与伦比的灵活性和强大功能。

CSS Grid核心概念解析

要实现复杂的不规则布局,我们需要掌握CSS Grid的几个核心属性:

display: grid: 将一个HTML元素定义为网格容器(Grid Container),其直接子元素将成为网格项(Grid Item)。grid-template-columns: 定义网格的列结构。可以指定列的数量、宽度,支持多种单位(如px, em, rem, %, fr等)。fr单位表示可用空间的分数,非常适合创建弹性列。grid-template-rows: 定义网格的行结构。与grid-template-columns类似,用于指定行的数量和高度。gap (或 grid-gap): 定义网格线之间的间距,可以同时设置行间距和列间距。grid-auto-flow: 控制网格项的自动放置方向。默认值为row,即按行填充;设置为column则按列填充。这在创建瀑布流或多列布局时非常关键。grid-column / grid-row: 用于定位或设置网格项跨越的列/行。grid-column: start / end:定义网格项从哪条列线开始,到哪条列线结束。grid-column: span N:定义网格项跨越N个列。grid-row: start / end 或 grid-row: span N:与grid-column类似,用于行。

实践:构建不规则的砖石布局

假设我们希望创建一个类似砖石瀑布流的布局,其中包含大小不一的元素,并且它们按列填充。

立即学习“前端免费学习笔记(深入)”;

HTML 结构

首先,我们需要一个网格容器和一系列网格项。网格项可以是简单的div元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

CSS 样式

接下来,我们为容器和网格项定义样式。我们将模拟一个具有15行和10列的网格,其中一些大项占据5行高,小项占据3行高。为了实现按列填充,我们将使用grid-auto-flow: column。

.container {  display: grid;  /* 定义10列:2fr 1fr 1fr 2fr 1fr 1fr 1fr 1fr 1fr 1fr     这意味着第一列和第四列是其他列宽度的两倍,其余列等宽。 */  grid-template-columns: 2fr 1fr 1fr 2fr 1fr 1fr 1fr 1fr 1fr 1fr;  /* 定义15行,每行等高 */  grid-template-rows: repeat(15, 1fr);  /* 网格项之间的间距 */  gap: 5px;  /* 容器宽度和高度示例 */  width: 100vw;  height: 33vw; /* 示例高度,可根据内容调整 */  background: pink; /* 容器背景色 */  /* 关键:设置网格项按列自动填充 */  grid-auto-flow: column;}/* 所有网格项的默认样式 */.container > div {  background: cyan; /* 默认背景色 */  grid-column: span 1; /* 默认跨越1列 */  grid-row: span 3;    /* 默认跨越3行 */  display: flex;       /* 使内容居中 */  justify-content: center;  align-items: center;  font-size: 1.5em;  color: #333;}/* 特定网格项(例如,较大的“砖块”)的样式,使其跨越5行 *//* 这里通过nth-child选择器选取特定的网格项,使其显示为较大尺寸 */.container > div:nth-child(1),.container > div:nth-child(2),.container > div:nth-child(3),.container > div:nth-child(14),.container > div:nth-child(15),.container > div:nth-child(16),.container > div:nth-child(35),.container > div:nth-child(36),.container > div:nth-child(37) {  background: yellow; /* 较大项的背景色 */  grid-column: span 1; /* 保持跨越1列 */  grid-row: span 5;    /* 跨越5行,使其更高 */}/* 精确定位特定的几个大项,以防止其他自动流动的项占据它们的位置 *//* 第35个网格项:从第5列线开始,跨越2列;从第11行线开始,跨越5行 */.container > div:nth-child(35) {  grid-column: 5 / span 2;  grid-row: 11 / span 5;}/* 第36个网格项:从第7列线开始,跨越2列;从第11行线开始,跨越5行 */.container > div:nth-child(36) {  grid-column: 7 / span 2;  grid-row: 11 / span 5;}/* 第37个网格项:从第9列线开始,跨越2列;从第11行线开始,跨越5行 */.container > div:nth-child(37) {  grid-column: 9 / span 2;  grid-row: 11 / span 5;}

代码解析

容器设置:display: grid;: 激活网格布局。grid-template-columns: 2fr 1fr …;: 定义了10列,其中某些列的宽度是其他列的两倍,实现了列宽的不均匀分布。fr单位确保了列的弹性伸缩。grid-template-rows: repeat(15, 1fr);: 定义了15行,每行高度相等,并会根据内容和容器高度自动调整。gap: 5px;: 设置网格单元之间的间距。grid-auto-flow: column;: 这是实现“按列填充”的关键。如果没有这个属性,网格项会默认按行从左到右填充。默认网格项样式:.container > div: 所有的网格项默认占据1列和3行。这是大多数“小砖块”的基础尺寸。特殊网格项样式:通过:nth-child()选择器,我们选取了特定的网格项(例如第1、2、3个,以及第14、15、16个等),并将它们的grid-row设置为span 5,使它们的高度变为默认项的5/3倍,从而创建出高矮不一的视觉效果。精确位置与跨度:对于最后三个特殊的网格项(第35、36、37个),我们不仅指定了它们的高度(grid-row: span 5),还使用grid-column: start / span N和grid-row: start / span N精确地定义了它们在网格中的起始位置和跨度。例如,grid-column: 5 / span 2表示从第5条列线开始,向右跨越2个列单元。这种精确控制对于固定某些重要元素的位置,防止自动流动的其他元素覆盖它们至关重要。

注意事项与最佳实践

语义化: 始终优先考虑HTML的语义化。只有当数据确实是表格形式时才使用。对于布局,CSS Grid是更优的选择。规划网格: 在开始编码前,最好在纸上或设计工具中规划好您的网格结构,包括行列数量、尺寸比例以及特殊元素的定位。fr 单位: 善用fr单位,它能让您的网格在不同屏幕尺寸下保持良好的弹性。repeat() 函数: repeat()函数是定义重复行或列模式的强大工具,能有效简化CSS代码。grid-auto-flow: 理解并灵活运用grid-auto-flow属性,它能极大地影响网格项的排列方式。调试工具: 现代浏览器(如Chrome, Firefox)都提供了强大的CSS Grid调试工具,可以可视化网格线和网格项,帮助您快速定位和解决布局问题。响应式设计: CSS Grid与媒体查询结合使用,可以轻松实现复杂的响应式布局,根据屏幕大小调整网格的列数、行数或网格项的跨度。

总结

通过本教程,您应该已经掌握了如何使用CSS Grid来创建传统HTML表格难以实现的复杂、不规则布局。CSS Grid的强大之处在于其二维布局能力、灵活的尺寸单位、精确的定位控制以及对自动放置流向的干预。抛弃为布局而滥用

的旧习惯,拥抱CSS Grid,您将能够构建出更优雅、更灵活且易于维护的现代网页布局。

以上就是CSS Grid实现复杂不规则布局教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1601117.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
使用CSS和Tailwind实现焦点时底部圆角取消效果
上一篇 2025年12月23日 15:13:38
JavaScript DOM操作:批量移除子元素特定CSS类的实践指南
下一篇 2025年12月23日 15:13:52

相关推荐

  • Debian如何实现数据备份与回收

    Debian如何实现数据备份与回收Debian如何实现数据备份与回收Debian如何实现数据备份与回收Debian如何实现数据备份与回收

    本文介绍在Debian系统中进行数据备份和恢复的多种方法及工具。 备份方法 Debian系统的数据备份可以通过多种方式实现,确保系统和数据的安全: 全面系统备份 (tar): 使用tar命令创建包含系统文件、配置文件和用户数据的完整压缩备份: sudo tar -czvf backup.tar.gz…

    2026年9月25日 • 用户投稿
    000
  • PDF转Word怎么一键转换_PDF一键转Word的简单操作流程

    PDF转Word怎么一键转换_PDF一键转Word的简单操作流程PDF转Word怎么一键转换_PDF一键转Word的简单操作流程PDF转Word怎么一键转换_PDF一键转Word的简单操作流程PDF转Word怎么一键转换_PDF一键转Word的简单操作流程

    可通过在线工具、Word、WPS或Adobe软件将PDF转为Word。在线工具如iLovePDF上传即转;2. Word可直接打开PDF另存为.docx;3. WPS点击“PDF转Word”一键转换;4. Adobe Acrobat选择“导出PDF”为Word格式,精准保留原排版。 如果您需要将PD…

    2026年9月25日 • 用户投稿
    200
  • 远光84怎么加分 加分技巧分享​

    远光84怎么加分 加分技巧分享​远光84怎么加分 加分技巧分享​远光84怎么加分 加分技巧分享​远光84怎么加分 加分技巧分享​

    远光84中玩家可通过熟练特定流派英雄(如侦察流魅影、支援流苏尼尔)、合理用喷气背包与载具、升级载具配件来提升表现,从而高效获取积分。​以下为您详细介绍加分技巧,感兴趣的玩家千万不要错过哦。 远光84加分技巧分享如下:​ 1、专注特定流派英雄练习 游戏英雄分进攻、防御、侦察、支援四流派,新手前期可优先…

    2026年9月25日 • 用户投稿
    000
  • safari浏览器如何管理和删除Cookie_safari浏览器Cookie管理和删除方法

    清除或管理Safari浏览器的Cookie可解决网页加载异常、登录状态丢失等问题。1、通过“设置-隐私-管理网站数据”可查看并删除特定网站的Cookie;2、点击“移除全部”可彻底清除所有Cookie,重置浏览状态;3、勾选“阻止所有Cookie”能增强隐私保护,但会影响网站正常功能;4、使用“无痕…

    2026年9月25日
    100
  • 淘宝推广计划在哪里找到?推广计划名称该如何命名?卖家必看!精准定位后台入口+三大命名法则,轻松管理8大推广计划!

    淘宝推广计划在哪里找到?推广计划名称该如何命名?卖家必看!精准定位后台入口+三大命名法则,轻松管理8大推广计划!淘宝推广计划在哪里找到?推广计划名称该如何命名?卖家必看!精准定位后台入口+三大命名法则,轻松管理8大推广计划!淘宝推广计划在哪里找到?推广计划名称该如何命名?卖家必看!精准定位后台入口+三大命名法则,轻松管理8大推广计划!淘宝推广计划在哪里找到?推广计划名称该如何命名?卖家必看!精准定位后台入口+三大命名法则,轻松管理8大推广计划!

    在淘宝这个庞大的电商生态中,推广计划是商家提升店铺曝光率与成交额的核心工具之一。然而,许多新手或经验不足的商家常常会遇到两个基础却关键的问题:淘宝推广计划究竟在哪里可以找到?以及,如何为推广计划起一个清晰有效的名称?这两个问题看似简单,实则直接影响到后续推广操作的便捷性与精准度。如果找不到推广入口,…

    2026年9月25日 • 用户投稿
    000
  • 如何修复电脑硬盘"

    如何修复电脑硬盘"如何修复电脑硬盘"如何修复电脑硬盘"如何修复电脑硬盘"

    最近有小伙伴在后台私信小编说,电脑硬盘坏了能不能修复,该如何修复电脑硬盘。因此,针对该问题,小编就马上跑来整理出来了一些相关于这个方面的内容,那么小伙伴下面就随小编一起来看看如何修复电脑硬盘的方法吧。 众所周知硬盘是电脑中一个非常重要的硬件设备,是电脑主要的存储媒介之一。不过最近有童鞋向小编反映说自…

    2026年9月25日 • 用户投稿
    100
  • sublime怎么配置PHP CS Fixer进行代码格式化_sublime使用PHP CS Fixer自动格式化代码教程

    sublime怎么配置PHP CS Fixer进行代码格式化_sublime使用PHP CS Fixer自动格式化代码教程sublime怎么配置PHP CS Fixer进行代码格式化_sublime使用PHP CS Fixer自动格式化代码教程sublime怎么配置PHP CS Fixer进行代码格式化_sublime使用PHP CS Fixer自动格式化代码教程sublime怎么配置PHP CS Fixer进行代码格式化_sublime使用PHP CS Fixer自动格式化代码教程

    首先安装PHP CS Fixer工具并将其放置于系统指定目录,确保PHP环境正常;接着在Sublime Text中通过Package Control安装PHP CS Fixer插件;然后在插件设置中配置php_cs_fixer_exec_path和php_path指向正确的PHAR文件和PHP可执行…

    2026年9月25日 • 用户投稿
    100
  • uc浏览器怎么添加书签到主页_UC浏览器将书签添加到首页快捷方式

    uc浏览器怎么添加书签到主页_UC浏览器将书签添加到首页快捷方式uc浏览器怎么添加书签到主页_UC浏览器将书签添加到首页快捷方式uc浏览器怎么添加书签到主页_UC浏览器将书签添加到首页快捷方式uc浏览器怎么添加书签到主页_UC浏览器将书签添加到首页快捷方式

    首先可通过书签管理长按添加,其次在浏览时点击菜单选择添加到桌面,最后部分版本可直接使用工具栏+按钮创建快捷方式。 如果您希望快速访问常用网站,可以通过将书签添加到UC浏览器主页来实现便捷操作。这一功能可以帮助您在启动浏览器时一键跳转至目标页面。 本文运行环境:小米14,Android 14 一、通过…

    2026年9月25日 • 用户投稿
    100
  • 解决JavaFX应用导出为可运行JAR后FXMLLoader资源加载失败的问题

    解决JavaFX应用导出为可运行JAR后FXMLLoader资源加载失败的问题解决JavaFX应用导出为可运行JAR后FXMLLoader资源加载失败的问题解决JavaFX应用导出为可运行JAR后FXMLLoader资源加载失败的问题解决JavaFX应用导出为可运行JAR后FXMLLoader资源加载失败的问题

    本文旨在解决JavaFX应用在Eclipse中正常运行,但导出为可运行JAR包后,因FXMLLoader无法找到FXML资源文件而抛出IllegalStateException: Location is not set异常的问题。核心解决方案是调整FXMLLoader.setLocation()方法…

    2026年9月25日 • 用户投稿
    100
  • iQOO Z10 Turbo+ 续航登顶各大榜单 8000mAh 电池绝了

    iQOO Z10 Turbo+ 续航登顶各大榜单 8000mAh 电池绝了iQOO Z10 Turbo+ 续航登顶各大榜单 8000mAh 电池绝了iQOO Z10 Turbo+ 续航登顶各大榜单 8000mAh 电池绝了iQOO Z10 Turbo+ 续航登顶各大榜单 8000mAh 电池绝了

    8 月 4 日,iqoo 产品团队公布了 iqoo z10 turbo+ 的续航测试成绩,该机凭借出色的续航表现强势登顶多家主流媒体榜单,引发广泛关注。搭载 8000mah 超大容量蓝海电池与联发科最新旗舰芯片天玑 9400+,iqoo z10 turbo+ 成为兼顾高性能与持久续航用户的理想之选。…

    2026年9月25日 • 用户投稿
    100
  • 如何结合其他工具使用Debian Sniffer

    如何结合其他工具使用Debian Sniffer如何结合其他工具使用Debian Sniffer如何结合其他工具使用Debian Sniffer如何结合其他工具使用Debian Sniffer

    图片: 虽然找不到关于“如何结合其他工具使用Debian Sniffer”的直接信息,但以下是一些关于Debian及其网络工具的实用信息,希望能帮助您更好地理解如何使用Debian进行网络分析: Debian是一个强大的Linux发行版,拥有丰富的网络工具。要有效地结合其他工具使用Debian Sn…

    2026年9月25日 • 用户投稿
    100
  • 快手 Kwaipilot 团队发布两款 KAT 系列 Agentic Coding 大模型

    快手 Kwaipilot 团队发布两款 KAT 系列 Agentic Coding 大模型快手 Kwaipilot 团队发布两款 KAT 系列 Agentic Coding 大模型快手 Kwaipilot 团队发布两款 KAT 系列 Agentic Coding 大模型快手 Kwaipilot 团队发布两款 KAT 系列 Agentic Coding 大模型

    快手 kwaipilot 团队近日推出了两款全新的 kat 系列 agentic coding 大模型,标志着在代码智能领域的重大突破:开源的 32b 参数模型 kat-dev-32b 以及闭源的旗舰级模型 kat-coder。 据悉,这两款模型在代码理解与生成方面分别展现了卓越的轻量化性能与顶级的…

    2026年9月25日 • 用户投稿
    200
  • 抖音店铺怎么举报商家和客服?抖音投诉商家入口

    抖音已成为众多消费者购物的首选之地。在享受便捷购物体验的消费者在抖音店铺购物过程中也时常会遇到一些问题,如商家发货慢、商品质量差、客服态度恶劣等。在这种情况下,如何有效举报商家和客服,维护自身权益成为了消费者关注的焦点。本文将为您详细解析抖音店铺举报流程,助您轻松维权。 一、抖音店铺举报的重要性 抖…

    2026年9月25日
    200
  • 洛可可输出全解析:三阶爆发与聚怪技巧详解

    在激烈的战斗中,洛可可宛如一位身姿翩跹却杀机暗藏的舞台主宰,她的输出节奏犹如一场精心策划的三幕戏剧。想要彻底释放她那毁天灭地的力量?只需遵循以下三大核心步骤,便能完美演绎属于她的高光时刻! 第一幕:想象力!能量的根基 洛可可一切力量的源头,皆源自“想象力”的积累——这股珍贵的能量是触发后续华丽连招的…

    2026年9月25日
    400
  • Chrome浏览器怎么设置最小字体大小_网页最小显示字体设置教程

    Chrome浏览器怎么设置最小字体大小_网页最小显示字体设置教程Chrome浏览器怎么设置最小字体大小_网页最小显示字体设置教程Chrome浏览器怎么设置最小字体大小_网页最小显示字体设置教程Chrome浏览器怎么设置最小字体大小_网页最小显示字体设置教程

    首先调整Chrome最小字体设置至12像素以上,其次可通过页面缩放或开发者工具临时修改字体大小以提升可读性。 如果您发现Chrome浏览器中某些网页的字体过小导致阅读困难,这可能是因为浏览器或网页本身设置了较小的最小字体限制。以下是解决此问题的步骤: 本文运行环境:Dell XPS 13,Windo…

    2026年9月25日 • 用户投稿
    100
  • sublime如何在新版本中找回旧版的功能 _sublime新版本找回旧功能方法

    sublime如何在新版本中找回旧版的功能 _sublime新版本找回旧功能方法sublime如何在新版本中找回旧版的功能 _sublime新版本找回旧功能方法sublime如何在新版本中找回旧版的功能 _sublime新版本找回旧功能方法sublime如何在新版本中找回旧版的功能 _sublime新版本找回旧功能方法

    答案:通过设置和插件可恢复Sublime Text旧版体验。1. 右键顶部或用命令面板启用菜单栏和工具栏;2. 安装PackageResourceViewer修改主题或切换为Default主题还原标签页样式;3. 在用户设置中添加参数关闭动画、显示边框、使用小图标以还原侧边栏;4. 设置&#8221…

    2026年9月25日 • 用户投稿
    000
  • Deepseek 满血版联合 Scribble Diffusion Pro,绘制专业级图像​

    Deepseek 满血版联合 Scribble Diffusion Pro,绘制专业级图像​Deepseek 满血版联合 Scribble Diffusion Pro,绘制专业级图像​Deepseek 满血版联合 Scribble Diffusion Pro,绘制专业级图像​Deepseek 满血版联合 Scribble Diffusion Pro,绘制专业级图像​

    使用deepseek满血版配合scribble diffusion pro可高效进行专业图像创作。1. scribble diffusion pro是基于草图生成高质量图像的插件,适合已有初步构图的创作者;2. deepseek提供更强文本理解与细节控制能力,提升风格、光影等描述精准度;3. 高效使…

    2026年9月25日 • 用户投稿
    200
  • 快手如何设置动态封面_快手动态封面设置的步骤与技巧

    快手如何设置动态封面_快手动态封面设置的步骤与技巧快手如何设置动态封面_快手动态封面设置的步骤与技巧快手如何设置动态封面_快手动态封面设置的步骤与技巧快手如何设置动态封面_快手动态封面设置的步骤与技巧

    1、可通过长按主页背景选择相册视频设置动态封面;2、需在通用设置中开启动态封面功能;3、也可从视频分享页点击动态壁纸快速应用。 如果您在快手个人主页希望展示更具吸引力的动态封面,以替代静态图片,可以通过特定步骤进行设置。该功能允许用户使用短视频作为主页背景,提升个性化展示效果。 本文运行环境:iPh…

    2026年9月25日 • 用户投稿
    200
  • win10电脑qq远程桌面连接不上的解决方法

    win10电脑qq远程桌面连接不上的解决方法win10电脑qq远程桌面连接不上的解决方法win10电脑qq远程桌面连接不上的解决方法win10电脑qq远程桌面连接不上的解决方法

    腾讯出品的qq是一款广泛使用的聊天工具,几乎每个人都拥有自己的qq账号,在使用过程中还可以实现远程控制的功能。不过,部分用户反映在尝试远程连接时遇到了障碍,那么win10系统下qq远程连接失败该怎么办呢?接下来就让我们一起探讨win10电脑qq远程桌面连接失败的解决办法。 QQ远程连接无法使用怎么办…

    2026年9月25日 • 用户投稿
    000
  • Java多态中成员变量是否具有动态绑定特性

    成员变量不具有动态绑定特性,其访问基于引用变量的声明类型而非实际对象类型。例如,当父类和子类存在同名成员变量时,通过父类引用访问该变量将获取父类中的值,即使实际对象是子类实例。这体现了静态绑定,即在编译期确定访问的变量。相比之下,实例方法支持动态绑定(后期绑定),在运行时根据对象的实际类型决定调用哪…

    2026年9月25日
    100

发表回复

登录后才能评论
关注微信