CSS Grid同一列元素并排显示与自适应布局

css grid同一列元素并排显示与自适应布局

在CSS Grid布局中,当多个子元素被分配到相同的网格列或存在重叠的网格行区域时,它们默认的行为是堆叠或相互覆盖。这与期望它们并排显示并自动调整大小的需求产生了冲突。例如,在一个时间表视图中,如果多个事件都位于同一天的列中,我们可能希望它们在视觉上并排呈现,而不是简单地堆叠在一起。

理解问题:CSS Grid的默认行为

考虑以下CSS Grid设置,其中.grid容器定义了行和列,而.entry-one和.entry-two都被分配到相同的col列,但它们的行跨度有所不同或重叠:

.grid {  display: grid;  grid-template-rows: [row-a] 1fr [row-b] 1fr [row-c] 1fr [row-d] 1fr;  grid-template-columns: [col] 1fr;  flex-grow: 1; /* 注意:此属性在display: grid下效果有限 */}.entry-one {  grid-column: col;  grid-row: row-a/row-d; /* 跨越多行 */  background-color: red;}.entry-two {  grid-column: col;  grid-row: row-b; /* 位于entry-one的内部 */  background-color: green;}
Foobar
Barfoo

在这种配置下,由于.entry-one和.entry-two都被放置在col列中,并且它们的行区域存在重叠(entry-two的row-b完全包含在entry-one的row-a/row-d内),它们将默认堆叠在一起,导致.entry-two可能被.entry-one覆盖。

为了解决这个问题,一种常见的临时方案是手动设置元素的width和margin-left,使其强行并排:

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

.entry-one {  grid-column: col;  grid-row: row-a/row-d;  background-color: red;  width: 50%; /* 手动设置宽度 */}.entry-two {  grid-column: col;  grid-row: row-b;  background-color: green;  width: 50%; /* 手动设置宽度 */  margin-left: 50%; /* 手动设置偏移 */}

然而,这种方法不够灵活,尤其当元素数量动态变化时,需要复杂的JavaScript计算来调整宽度和边距,维护成本高昂。

解决方案:利用Flexbox实现并排布局

要实现元素的自动并排和自适应布局,我们可以巧妙地利用Flexbox的强大能力。关键在于将包含这些元素的父容器的display属性从grid更改为flex。

.grid {  display: flex; /* 关键改变:从grid改为flex */  /* 以下grid相关的属性在display: flex时将不再生效 */  grid-template-rows: [row-a] 1fr [row-b] 1fr [row-c] 1fr [row-d] 1fr;  grid-template-columns: [col] 1fr;  flex-grow: 1;}.entry-one {  /* 当父容器是flex时,这些grid属性将不再生效 */  grid-column: col;  grid-row: row-a/row-d;  background-color: red;  /* 不再需要手动设置宽度和边距 */}.entry-two {  /* 当父容器是flex时,这些grid属性将不再生效 */  grid-column: col;  grid-row: row-b;  background-color: green;  /* 不再需要手动设置宽度和边距 */}
Foobar
Barfoo

解释:

display: flex on .grid: 当我们将.grid容器的display属性设置为flex时,它就变成了一个Flex容器。它的直接子元素(.entry-one和.entry-two)随即成为Flex项目。Flexbox默认行为: Flex容器默认的flex-direction是row,这意味着Flex项目会沿着主轴(水平方向)并排排列。同时,它们会根据可用空间自动调整大小。Grid属性失效: 需要注意的是,一旦.grid成为Flex容器,其上定义的grid-template-rows和grid-template-columns属性将不再对它的直接子元素产生布局影响。同样,子元素上的grid-column和grid-row属性也会失效。这意味着我们实际上是放弃了.grid容器作为网格容器的功能,转而利用Flexbox的布局能力来处理其内部元素的排列。

通过这种方式,entry-one和entry-two将自动并排显示,并根据父容器的宽度自适应调整,无需任何手动计算。

注意事项与进阶考虑

布局模型切换: 这种方法的核心是切换了父容器的布局模型。如果您的整体页面布局严重依赖CSS Grid,并且需要.grid容器同时作为网格容器来布局其子元素(例如,某些子元素需要精确地放置在网格的特定单元格中,而另一些则需要并排),那么直接将.grid设置为display: flex可能不是最佳选择。Grid与Flexbox的结合: 在更复杂的场景中,如果需要同时保持Grid的整体结构和Flexbox的局部并排能力,可以采用嵌套布局。例如,您可以让.grid容器保持display: grid,然后在需要并排元素的特定网格单元格内,放置一个额外的div作为Flex容器,将需要并排的元素作为这个div的子元素。

.grid-container {  display: grid;  grid-template-columns: 1fr 1fr;  grid-template-rows: auto;}.grid-cell-for-flex {  grid-column: 1; /* 放置在网格的第一列 */  display: flex; /* 内部元素并排 */  gap: 10px; /* 增加间距 */}.flex-item-one, .flex-item-two {  flex: 1; /* 让它们平分可用空间 */  background-color: lightblue;  padding: 10px;}

这种方式允许您在保持整体网格布局的同时,局部地利用Flexbox进行精细的元素排列。

Flexbox属性的进一步控制: 一旦父容器成为Flex容器,您可以使用各种Flexbox属性来进一步控制子元素的排列和对齐,例如:justify-content: 控制主轴上的对齐方式(space-around, space-between, center等)。align-items: 控制交叉轴上的对齐方式(flex-start, center, stretch等)。flex-wrap: 控制Flex项目是否换行(wrap, nowrap)。gap: 控制Flex项目之间的间距。

总结

当面临CSS Grid中同一列元素需要并排显示并自动适应布局的需求时,将包含这些元素的父容器的display属性从grid更改为flex是一种直接且高效的解决方案。这种方法利用了Flexbox的单轴布局优势,实现了元素的自动排列和自适应。然而,理解这种改变对原有Grid布局的影响至关重要,并在必要时考虑采用Grid与Flexbox嵌套的混合布局策略,以兼顾整体网格结构和局部元素的灵活排列。

以上就是CSS Grid同一列元素并排显示与自适应布局的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Vue.js 动态表单:实现下拉框与文本框的条件切换
上一篇 2025年12月23日 15:18:37
html怎么运行bat文件路径_html运行bat文件路径方法【教程】
下一篇 2025年12月23日 15:18:41

相关推荐

  • 从字符串列表中提取最大数值:Java Stream API实践指南

    本文详细介绍了如何在java中高效地从包含数字字符串的列表中提取最大数值。通过利用java stream api,特别是`maptoint`和`max`方法,结合`orelse`处理空列表情况,可以简洁地实现字符串到整数的转换及最大值查找,适用于处理api响应等场景,优化数据处理流程。 在现代Jav…

    2026年9月8日
    000
  • 知网AIGC检测官网 免费AIGC查重入口链接

    知网AIGC检测无免费入口,官网https://cx.cnki.net提供付费服务,支持Word和PDF格式,按2元/千字符计费,5万字符论文需100元,10分钟出结果,报告48小时内可下载。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ …

    2026年9月8日
    000
  • 一加15配置汇总 LUMO影像+7300mAh电池 猜猜价格?

    一加15将于10月27日正式亮相,这款备受期待的旗舰机型已通过官方预热和多方可靠消息源揭开了面纱。作为一加数字系列的最新力作,它首次引入oppo lumo凝光影像系统,并配备高达7300mah的大容量电池。 一加15 据CNMO掌握的信息,一加15搭载了一块6.78英寸的第三代东方屏,支持1.5K分…

    2026年9月8日
    300
  • laravel如何创建自定义的验证规则_Laravel自定义验证规则方法

    使用闭包、自定义Rule类或扩展Validator实现Laravel自定义验证。1. 闭包适用于简单一次性规则;2. Rule类通过php artisan make:rule生成,实现passes和message方法,便于复用;3. 在Form Request中引入自定义Rule使代码更清晰;4. …

    2026年9月8日
    000
  • 鸿蒙版《三角洲行动》上线!数据互通 支持 120 帧高刷

    9 月 23 日,《三角洲行动》鸿蒙版正式发布。官方表示,该版本支持 120 帧超高清刷新率,具备全平台数据互通与跨平台匹配功能,并将同步开启全新赛季。此前,游戏已推出鸿蒙测试服,但测试期间为删档模式且未开放充值入口。 据悉,《三角洲行动》鸿蒙版经过毕昇编译器的深度优化,在运行效率和帧率稳定性方面均…

    2026年9月8日
    000
  • 如何在Java中使用内部类处理复杂逻辑

    成员内部类可访问外部类所有成员,适合封装与外部状态紧密相关的逻辑;2. 局部内部类定义在方法内,用于限制辅助类作用域并访问局部变量;3. 匿名内部类简化一次性接口实现,常用于回调和事件处理;4. 静态内部类不依赖外部实例,适用于逻辑独立但概念相关的组件。合理选用可提升代码组织性与可维护性。 在Jav…

    2026年9月8日
    000
  • Java中基于条件比较的列表元素替换教程

    本文详细介绍了如何在java中比较两个字符串列表的对应位置元素,并根据比较结果对第二个列表进行条件替换。对于不匹配的元素,将从预定义的值集合中随机选取一个新值进行替换,而匹配的元素则保持不变。教程提供了清晰的实现步骤、完整的示例代码以及重要的注意事项,帮助读者高效地完成此类列表操作。 引言:列表元素…

    2026年9月8日
    000
  • Swoole的onWorkerStart回调是做什么用的

    onWorkerStart是在每个工作进程启动时自动触发的回调函数,用于初始化数据库连接、加载配置、注册全局对象等操作。每个Worker进程仅执行一次,适用于常驻内存的长期设置,如连接MySQL/Redis、复用配置、注册定时任务等。不同Worker间数据隔离,需独立初始化。注意事项包括避免阻塞操作…

    2026年9月8日
    000
  • 阿里夸克发布AI眼镜!仅需三千出头!

    阿里夸克发布AI眼镜!仅需三千出头!阿里夸克发布AI眼镜!仅需三千出头!阿里夸克发布AI眼镜!仅需三千出头!阿里夸克发布AI眼镜!仅需三千出头!

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 最近,夸克正式发布了其首款AI智能眼镜,并全面启动了各渠道的预售。如果你是88VIP会员,还能享受早鸟优惠价,仅需3329.1元就能入手这款科技新品。 抛开价格不谈,这款眼镜最引人注目的亮点在于…

    2026年9月8日 用户投稿
    100
  • iPhone 17 Pro使用测评

    iPhone 17 Pro使用测评iPhone 17 Pro使用测评iPhone 17 Pro使用测评iPhone 17 Pro使用测评

    iPhone 17 Pro使用测评 随着科技的不断进步,智能手机的功能和性能也在不断提升。今天,我们将对即将发布的iPhone 17 Pro进行全面测评,从外观设计、摄像头性能、电池续航到硬件配置,全方位解析这款备受期待的新品。 外观设计与材质 iPhone 17 Pro采用了热锻铝金属一体成型机身…

    2026年9月8日 用户投稿
    200
  • 淘宝小时达是快递还是外卖?送货上门吗?揭秘200+城市全城急送,3公里30分钟必达的新零售革命!

    淘宝小时达是快递还是外卖?3公里急速配送背后的新零售革命 当你在淘宝搜索”小时达”服务时,可能产生这样的困惑:这到底是像顺丰一样的快递服务,还是像美团外卖般的即时配送?淘宝小时达既不是传统快递也不是单纯外卖,而是融合仓储、即时配送与大数据的新零售模式。依托智能仓储系统和3公里配送网络,这项服务能实现…

    2026年9月8日
    100
  • 如何在mysql中拼接字符串字段

    使用CONCAT()函数可拼接字符串字段,如SELECT CONCAT(first_name, ‘ ‘, last_name) AS full_name FROM users;若字段可能为NULL,推荐使用CONCAT_WS()或IFNULL()避免结果为NULL,例如CON…

    2026年9月8日
    100
  • Grok 正式推出新虚拟女友角色 “Mika”

    埃隆・马斯克旗下的 xAI 团队最近再次成为焦点,其人工智能聊天平台 Grok 正式上线了一位全新的虚拟女友角色——“Mika”。 Mika 的形象设计融合了多个经典二次元人物的特质,灵感主要来自草薙素子、Lucy 和山田凉。她身穿黑色皮夹克与牛仔裤,拥有一头引人注目的深绿色长发,整体造型散发出强烈…

    2026年9月8日
    100
  • win11怎么查看主板型号_Win11主板型号查看方法

    通过系统信息工具(msinfo32)可查看主板型号和BIOS版本;2. 使用命令提示符执行wmic命令快速获取主板产品、制造商等信息;3. 在设备管理器中查找系统设备相关条目间接识别主板;4. 开机进入BIOS/UEFI界面查看最原始的主板型号信息。 如果您需要了解计算机的核心硬件信息,特别是主板型…

    2026年9月8日
    100
  • 淘宝百亿补贴那么便宜是不是假货?是平台补贴吗?淘宝百亿补贴便宜到离谱?是假货还是真补贴?3招教你识破套路,安心捡漏!

    淘宝百亿补贴的iphone比官网便宜2000元、大牌美妆低至3折,如此诱人的价格让人既心动又忐忑——这到底是平台真金白银的让利,还是暗藏假货猫腻?其实,这些低价并非噱头,而是淘宝联合品牌与商家共同让利的真实体现。通过严格的准入审核、ai智能防伪系统以及“假一赔十”的强力售后保障,平台已实现正品率高达…

    2026年9月8日
    100
  • 投喂AI最新官方访问地址 投喂AI平台主页直达链接入口

    投喂AI最新官方访问地址为https://www.p2hp.com,该平台集成多种AI工具,支持自然语言指令、快速文本生成与多格式内容输出,页面简洁且无需注册即可使用基础功能。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 投喂AI最新官方…

    2026年9月8日
    100
  • 云计算会最终取代本地高性能计算机吗?

    云计算不会完全取代本地高性能计算机,两者将互补共存。云计算在灵活性、成本和扩展性方面优势明显,适用于AI训练、大数据分析等场景;而本地HPC在超低延迟、数据安全和持续高强度计算任务中不可替代,如气象模拟、核聚变研究等;当前趋势是融合发展,混合云、边缘计算与HPC即服务等模式兼顾弹性与性能,选择取决于…

    2026年9月8日
    800
  • 在Java中如何使用Maven自动下载依赖

    确保已安装Maven并配置JDK,通过mvn -v验证;2. 在pom.xml的中添加依赖坐标;3. 执行mvn compile、test或package自动下载依赖至本地仓库;4. 推荐使用IDE导入pom.xml实现依赖自动管理。 在Java项目中使用Maven自动下载依赖非常简单,只需要正确配…

    2026年9月8日
    000
  • Linux命令行中环境变量配置与管理

    环境变量是Linux中键值对形式的配置信息,用于控制程序行为。常见的PATH、HOME、SHELL等变量可通过export查看,临时设置使用export VAR=value,仅在当前会话有效;永久配置需写入~/.bashrc、/etc/environment等文件,并用source生效。管理时应避免…

    2026年9月8日
    100
  • VS Code任务系统实战:自动化构建与部署流程剖析

    VS Code任务系统通过tasks.json实现本地自动化,支持编译、测试、部署等流程。配置label、command、args等字段可定义任务,利用dependsOn串联步骤,结合problemMatcher解析错误,配合rsync或scp脚本完成服务器推送,提升开发效率。 在现代开发流程中,自…

    2026年9月8日
    300

发表回复

登录后才能评论
关注微信