利用CSS Grid实现复杂嵌套结构水平重排

利用css grid实现复杂嵌套结构水平重排

本文详细介绍了如何将一个包含主方块和两个底部小方块的嵌套结构,通过CSS Grid布局实现水平重排,使小方块垂直堆叠在主方块的旁边。教程对比了Flexbox在处理此类二维布局时的局限性,并深入讲解了CSS Grid的`grid-template-columns`、`grid-template-rows`和`grid-template-areas`等核心属性,提供清晰的代码示例,旨在帮助开发者更高效、灵活地构建复杂的网页布局

在网页开发中,我们经常需要构建包含复杂嵌套元素的布局。当需要将这些嵌套元素从一种排列方式(例如垂直堆叠)转换为另一种排列方式(例如水平并列,同时保持内部结构),传统的Flexbox布局有时会显得力不从心,或者需要引入额外的包装器和复杂的CSS规则。本教程将通过一个具体的“方块内嵌方块”结构重排案例,展示CSS Grid如何优雅且高效地解决此类二维布局问题。

初始布局与Flexbox的局限性

假设我们有一个“日期网格”组件,其中包含一个较大的主内容区域(显示日期)和下方两个较小的辅助区域。最初的设计目标是让这两个小区域水平排列在主区域下方,整个组件垂直堆叠。

原始HTML结构:

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

原始CSS样式(Flexbox实现):

.date-grid {    width: 120px;    height: 100px;    display: flex;    flex-direction: column; /* 整体垂直堆叠 */}.node {    width: 100%;    height: 100%;    background: #e9ecef;    border: none;    padding: 0;}time {    display: block;    height: 75%;    font-size: 24px;    display: flex;    flex-direction: column;    justify-content: center; /* 日期垂直居中 */}.smallHolder {    width: 100%;    height: 25%;    display: flex; /* 小方块水平排列 */}.smallHolder>div {    width: 25%;    height: 100%;    flex-shrink: 0;    flex-grow: 1;}.next { background: #0060df; }  .last { background: #d53343; } 

在这个结构中,.date-grid和time都使用了flex-direction: column,而.smallHolder则使用了flex-direction: row(默认值),以实现内部小方块的水平排列。如果我们的需求是让整个组件水平排列,且两个小方块垂直堆叠在主方块的旁边,使用Flexbox可能需要重新思考整个嵌套结构,或者引入复杂的负外边距、绝对定位等,这将增加代码的复杂性和维护难度。

利用CSS Grid实现水平重排

CSS Grid是为二维布局而生,它允许我们同时控制行和列,非常适合处理这种复杂的对齐和排列需求。通过CSS Grid,我们可以将上述结构优雅地重排为:一个主方块占据左侧,两个小方块垂直堆叠在主方块的右侧。

优化后的HTML结构:

首先,我们可以简化HTML结构,将所有直接参与布局的元素作为Grid容器的直系子元素。这样,Grid容器可以直接控制它们的位置。我们将.node和.date-grid合并,并移除smallHolder这个额外的包装器。

这里我们将time元素添加了一个gray类,以便在CSS Grid中对其进行样式和区域分配。

CSS Grid布局实现:

现在,我们使用CSS Grid来定义布局。关键在于使用grid-template-columns、grid-template-rows和grid-template-areas。

.date-grid {  height: 100px; /* 保持总高度 */  display: grid; /* 启用Grid布局 */  /* 定义列:第一列120px给主方块,第二列25px给小方块 */  grid-template-columns: 120px 25px;   /* 定义行:两行,各占剩余高度的1fr,用于小方块 */  grid-template-rows: 1fr 1fr;   /* 定义命名区域:     第一行:左侧是'gray',右侧是'next'     第二行:左侧是'gray',右侧是'last'  */  grid-template-areas: "gray next"                        "gray last";  padding: 0;  border-style: none;}.gray {  grid-area: gray; /* 将此元素放置在'gray'区域 */  display: grid; /* 内部再次使用Grid进行内容居中 */  place-content: center; /* 垂直和水平居中内容 */  background: #e9ecef;}time {  font-size: 24px;}.next {  grid-area: next; /* 将此元素放置在'next'区域 */  background: #0060df;}.last {  grid-area: last; /* 将此元素放置在'last'区域 */  background: #d53343;}

代码解析:

display: grid;: 将.date-grid容器声明为Grid容器。grid-template-columns: 120px 25px;: 定义了两列。第一列宽度为120px,用于主方块;第二列宽度为25px,用于两个小方块。grid-template-rows: 1fr 1fr;: 定义了两行。1fr表示“剩余空间的一等份”,因此这两行将平分容器的可用高度,非常适合垂直堆叠的两个小方块。grid-template-areas: “gray next” “gray last”;: 这是实现复杂布局的关键。它定义了一个可视化网格,并为每个单元格分配了命名区域。第一行定义了两个区域:gray和next。第二行定义了两个区域:gray和last。注意gray区域跨越了两行,这意味着任何被指定为grid-area: gray;的元素都将占据这两行。grid-area: gray;, grid-area: next;, grid-area: last;: 这些属性将HTML元素分配到之前定义的命名区域中。

以上就是利用CSS Grid实现复杂嵌套结构水平重排的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
解决Sphinx代码块内联文本解析与语法高亮冲突的指南
上一篇 2025年12月23日 14:42:57
代码保存为html文件后怎么运行_保存后html文件运行方法【教程】
下一篇 2025年12月23日 14:43:13

相关推荐

  • 如何解决Magento2CSP兼容性难题,yireo/magento2-csp-utilities助你构建更安全的网站

    可以通过一下地址学习composer:学习地址 当安全性遇上兼容性:Magento 2 CSP的痛点 作为一名magento开发者,我们都知道网站安全的重要性。内容安全策略(csp)是防御跨站脚本(xss)攻击的强大工具,它通过限制浏览器可以加载的资源来减少攻击面。在magento 2中启用csp是…

    用户投稿 2026年8月26日
    000
  • PHPComposer是什么_PHP包管理工具Composer入门

    Composer 是 PHP 依赖管理工具,可声明并自动安装第三方库、生成自动加载文件。通过 composer.json 定义依赖,composer.lock 锁定版本,vendor 目录存放库文件,使用 composer init 初始化项目,composer require 添加依赖,requi…

    2026年8月26日
    000
  • 华硕主机CPU散热风扇更换与维护全流程详解

    华硕主机CPU散热风扇更换与维护全流程详解华硕主机CPU散热风扇更换与维护全流程详解华硕主机CPU散热风扇更换与维护全流程详解华硕主机CPU散热风扇更换与维护全流程详解

    更换华硕主机cpu散热风扇需按步骤操作:一、先断电并拆卸旧风扇,注意按对角顺序松开卡扣并清理硅脂;二、安装时确认方向与接口匹配,均匀涂抹硅脂后固定散热器并连接供电线;三、定期清灰润滑以维持散热效率;四、注意兼容性、bios识别及灯效同步问题,确保更换后正常运行。 换散热风扇其实不算太难,但细节多、步…

    2026年8月26日 用户投稿
    000
  • 告别API错误响应的混乱:如何使用phpro/api-problem构建统一、清晰的接口错误处理机制

    Composer在线学习地址:学习地址 你的 API 错误响应,是不是也一团糟? 在现代 web 开发中,api 接口是前后端协作的核心。一个设计良好、文档清晰的 api,能够极大地提升开发效率。然而,很多时候我们却忽略了一个关键环节:api 的错误响应。 你是否也曾遇到过以下场景,让你在开发过程中…

    用户投稿 2026年8月26日
    000
  • Python爬虫抓取智联招聘(基础版)

    Python爬虫抓取智联招聘(基础版)Python爬虫抓取智联招聘(基础版)Python爬虫抓取智联招聘(基础版)Python爬虫抓取智联招聘(基础版)

    运行平台: WindowsPython版本: Python3.6IDE: Sublime Text其他工具: Chrome浏览器 1、网页分析 1.1 分析请求地址 以北京海淀区的Python工程师为例进行网页分析。打开智联招聘首页,选择北京地区,在搜索框输入”Python工程师&#82…

    2026年8月26日 用户投稿
    100
  • Java中DatagramPacket的作用 解析UDP数据包

    Java中DatagramPacket的作用 解析UDP数据包Java中DatagramPacket的作用 解析UDP数据包Java中DatagramPacket的作用 解析UDP数据包Java中DatagramPacket的作用 解析UDP数据包

    datagrampacket的主要作用是封装udp数据报,用于发送和接收数据。它包含数据、目标或来源地址信息,是java udp编程的核心类。发送数据时需创建datagrampacket对象并调用send()方法;接收数据时需创建缓冲区并通过receive()方法获取数据。关键方法包括构造函数、ge…

    2026年8月26日 用户投稿
    300
  • Swoole是什么?它与传统PHP有何不同?

    swoole是一个异步、并行、协程的php扩展,与传统php不同,它通过异步i/o和协程提升了并发处理能力。swoole允许开发者编写高效的服务器端应用,支持多种协议,适合高并发和实时应用场景。 Swoole是什么?它与传统PHP有何不同? Swoole是一个异步、并行、协程的PHP扩展,提供了高性…

    2026年8月26日
    100
  • 在java中什么是类什么是对象 类与对象的区别和联系

    类和对象是java中面向对象编程的核心概念。类是模板,定义了属性和方法;对象是类的实例,具有具体的值和行为。类与对象的关系类似于剧本和演员:类是剧本,定义了角色的行为和特征;对象是根据剧本上演的具体演员。 在Java中,类和对象是面向对象编程的核心概念。让我来详细解释一下什么是类,什么是对象,以及它…

    2026年8月26日
    200
  • 告别递归查询噩梦:如何使用previousnext/nested-set和Composer优雅管理PHP树形数据

    可以通过一下地址学习composer:学习地址 树形数据的烦恼:传统方法为何力不从心? 相信很多 php 开发者都遇到过这样的场景:你需要在一个数据库中存储具有层级关系的数据,比如一个多级分类系统、一个文件目录结构,或者一个组织内的部门层级。最直观的实现方式,莫过于在每个记录中添加一个 parent…

    用户投稿 2026年8月26日
    100
  • Listen1界面如何自定义_Listen1界面自定义的详细设置方法

    Listen1支持个性化设置以提升使用体验。首先可切换深色或浅色主题,减少视觉疲劳;其次调整播放列表排序方式及启用卡片式布局,优化浏览效率;接着通过快捷方式管理自定义工具栏功能图标;再通过数据源管理隐藏不常用音乐平台标签;最后设置默认搜索平台以提高检索速度。 如果您希望让Listen1音乐播放器界面…

    2026年8月26日
    000
  • [cmd]Windows下创建符号链接使用命令mklink

    mklink命令在windows系统中用于创建符号链接,属于cmd的内置命令。我们可以通过打开命令提示符来查看mklink的具体用法和语法说明。首先点击“搜索”图标 12,输入“cmd”或“命令提示符”,然后选择“以管理员身份运行”启动命令行工具。接着输入 mklink 并回车,即可显示该命令的详细…

    2026年8月26日
    100
  • Java中堆内存和栈内存的区别及内存管理机制

    Java中堆内存和栈内存的区别及内存管理机制Java中堆内存和栈内存的区别及内存管理机制Java中堆内存和栈内存的区别及内存管理机制Java中堆内存和栈内存的区别及内存管理机制

    堆内存用于存储对象实例,栈内存用于方法调用和局部变量。1. 堆内存由垃圾回收器管理,线程共享,生命周期长,适合存储动态分配的对象;2. 栈内存自动管理,线程私有,生命周期短,适合存储局部变量和方法调用帧;3. 区分两者是为了优化内存管理和性能;4. 堆溢出可通过分析内存泄漏、优化代码、增加堆内存等解…

    2026年8月26日 用户投稿
    200
  • 人体工学键盘与垂直鼠标对长期使用舒适度的改善

    人体工学键盘与垂直鼠标通过优化手部姿态缓解办公族和程序员的腕臂肩颈疲劳。1. 分体式键盘减少手腕偏转,保持前臂中立位;2. 垂直鼠标使手心朝内,降低桡尺关节压力;3. 二者协同使用可统一工作角度,配合正确坐姿有效预防慢性劳损。 长时间使用电脑的人群,尤其是办公族和程序员,常面临手腕、前臂甚至肩颈的疲…

    2026年8月26日
    000
  • 如何解决PHP中复杂的HTML/XML解析与操作问题,arthurkushman/query-path助你轻松驾驭!

    可以通过一下地址学习composer:学习地址 告别繁琐:PHP 处理 HTML/XML 的痛与思 在日常的 php 开发中,我们经常需要与各种 html 或 xml 文档打交道。无论是从第三方网页抓取信息,还是处理复杂的 xml 配置,亦或是动态生成和修改 html 片段,这些任务都不可避免。然而…

    用户投稿 2026年8月26日
    100
  • java中的var有什么用 类型推断var的4个使用限制

    java中的var有什么用 类型推断var的4个使用限制java中的var有什么用 类型推断var的4个使用限制java中的var有什么用 类型推断var的4个使用限制java中的var有什么用 类型推断var的4个使用限制

    java中的var关键字通过编译器推断变量类型,使代码更简洁,例如用var mymap = new hashmap<string, list>();代替冗长的类型声明。但其使用需注意4个限制:1. 必须初始化变量;2. 只能用于局部变量;3. 不能用于方法参数;4. 不能用于复合声明。此…

    2026年8月26日 用户投稿
    100
  • 抖音直播带货怎么做?流程与实用技巧解析

    很多商家和创业者希望通过抖音直播带货拓展销售渠道,但初期常常面临流量波动大、转化率不高等难题。直播带货不仅依赖选品能力和产品展示技巧,更需要深入理解平台机制与精细化运营策略。本文将系统梳理抖音直播带货的全流程,并针对常见痛点提供可落地的优化方案,助力商家实现销售突破。 如何准备直播带货的前置条件? …

    2026年8月25日
    300
  • 华为p60pro屏幕怎么样_华为p60pro屏幕介绍

    对于即将推出的华为 p60 pro,想必大家对它的屏幕素质非常关注。php小编新一这就为大家带来华为 p60 pro 的屏幕介绍,一起来看看这款旗舰手机的屏幕表现如何吧! 1、有着高级感的颜值 这也是很多高端机会使用曲面屏的原因之一,因为曲面屏的曲率越大,高级感就越明显,给整体机型设计提供更多的可能…

    2026年8月25日
    000
  • 抖音直播带货有哪些核心优势?选平台必看的对比亮点

    抖音直播带货凭借庞大的用户基数和成熟的内容生态,迅速成为商家与主播争相布局的核心阵地。相较于传统电商模式,抖音通过算法驱动推荐机制与社交裂变能力,大幅增强直播间曝光机会与成交转化效率。在实际运营过程中,品牌不仅能高效触达广泛潜在人群,还能借助高频互动提升用户粘性与忠诚度。接下来将深入剖析抖音在直播电…

    2026年8月25日
    100
  • 如何解决Magento2图片加载慢的问题,使用Composer和WebP模块让你的电商网站飞起来

    Composer在线学习地址:学习地址 痛点:电商网站的“甜蜜负担”——图片 在电商领域,高质量的产品图片是吸引顾客、促成转化的关键。然而,这些精美的图片也常常成为网站性能的“甜蜜负担”。当用户访问一个图片众多的商品列表页或详情页时,浏览器需要下载大量的图片资源,这直接导致页面加载时间过长。 我曾在…

    用户投稿 2026年8月25日
    100
  • VSCode怎么切换解释器_VSCode更换Python/Node等运行环境教程

    答案:在VSCode中切换解释器需通过命令面板或状态栏选择Python解释器,使用nvm或配置settings.json切换Node版本,遇报错可重启、检查扩展与路径,避免自动回切需手动指定并禁提示。 在VSCode中切换解释器,其实就是告诉VSCode用哪个Python环境,或者哪个Node版本来…

    2026年8月25日
    100

发表回复

登录后才能评论
关注微信