讲师中心 微信公众号
AI工具推荐 视频效率加速

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

夜宇酱_7994

夜宇酱_7994

发布时间:2025-12-01 08:03:15

|

586人浏览过

|

来源于php中文网

原创

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

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

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

初始布局与Flexbox的局限性

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

原始HTML结构:

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

<div class="date-grid">
    <button class="node">
        <time>3</time>
        <div class="smallHolder">
            <div class="next"></div>
            <div class="last"></div>
        </div>   
    </button>
</div>

原始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结构:

htmlppt.skill
htmlppt.skill

把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。

下载

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

<button class="node date-grid">
  <time class='gray'>3</time>
  <div class="next"></div>
  <div class="last"></div>
</button>

这里我们将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;
}

代码解析:

  1. display: grid;: 将.date-grid容器声明为Grid容器。
  2. grid-template-columns: 120px 25px;: 定义了两列。第一列宽度为120px,用于主方块;第二列宽度为25px,用于两个小方块。
  3. grid-template-rows: 1fr 1fr;: 定义了两行。1fr表示“剩余空间的一等份”,因此这两行将平分容器的可用高度,非常适合垂直堆叠的两个小方块。
  4. grid-template-areas: "gray next" "gray last";: 这是实现复杂布局的关键。它定义了一个可视化网格,并为每个单元格分配了命名区域。
    • 第一行定义了两个区域:gray和next。
    • 第二行定义了两个区域:gray和last。
    • 注意gray区域跨越了两行,这意味着任何被指定为grid-area: gray;的元素都将占据这两行。
  5. grid-area: gray;, grid-area: next;, grid-area: last;: 这些属性将HTML元素分配到之前定义的命名区域中。
    • 被分配到last区域,占据了右下角。
    • place-content: center;: 在.gray元素内部,我们再次使用了display: grid;并配合place-content: center;,这是一种简写形式,等同于align-content: center;和justify-content: center;,用于将其内容(数字“3”)在自身内部垂直和水平居中。
    • 总结与注意事项

      通过CSS Grid,我们成功地将原始的垂直嵌套结构重排为水平排列,并且两个小方块实现了垂直堆叠,同时保持了清晰、易读的CSS代码。

      CSS Grid的优势:

      • 二维布局控制: CSS Grid天生为二维布局设计,能够同时控制行和列,对于复杂的网格系统具有无与伦比的优势。
      • 语义化的布局: grid-template-areas允许我们用易于理解的名称来定义布局区域,使得CSS代码更具可读性和可维护性。
      • 简化HTML结构: 许多情况下,Grid布局可以减少不必要的包装器元素,使HTML更加简洁。
      • 响应式设计: 结合媒体查询,Grid布局能够非常灵活地调整网格结构,适应不同屏幕尺寸。

      何时选择Flexbox与Grid?

      • Flexbox(一维布局): 当你需要沿着一个方向(行或列)排列一组项目时,Flexbox是理想选择。例如,导航菜单、表单输入组、卡片列表等。
      • Grid(二维布局): 当你需要同时控制行和列,构建复杂的网格系统时,Grid是最佳方案。例如,整个页面布局、仪表盘、图片画廊等。

      在实际开发中,Flexbox和Grid并非互斥,它们可以很好地结合使用。例如,一个Grid容器可以包含Flex项目,反之亦然,以实现更精细的布局控制。理解两者的核心区别和适用场景,将有助于我们编写出更健壮、更易于维护的CSS布局代码。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

6287

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2648

2023.08.10

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

4196

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

306

2025.12.06

flex教程
flex教程

php中文网为大家带来了flex教程合集,Flex是采用Flex布局的元素,称为Flex容器(flex container),简称"容器",它的所有子元素自动成为容器成员,有三个核心概念: flex项,需要布局的元素;flex容器,其包含flex项;排列方向,这决定了flex项的布局方向。php中文网还为大家带来flex的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

10717

2023.06.14

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

40

2026.10.28

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

20

2026.10.28

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

0

2026.10.28

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

120

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.6万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 6.1万人学习

CSS教程
CSS教程

共754课时 | 99.3万人学习

最新文章

更多

PDF工具

更多
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn