玩转subgrid

本文中我们将了解如何使用 CSS Grid 的 subgrid 功能来对齐并排放置框的内容。

注意:在深入学习 subgrid 之前,了解 Grid 布局的基础知识很重要。可以参考MDN

1. 问题

如下图显示一行中的三个框。它们的内容不同,但由于 Grid 布局,它们的高度都相同。

每个盒子中的子组件不对齐,看起来非常不协调,但是Grid 是无法实现子组件对齐。对于 Grid 而言,只有一行框,它没有提供将它们包含的内容对齐到行中的方法。但是通过使用 subgrid,我们可以得到如下所示的结果。

下面让我们看看如何使用 subgrid 来实现这个效果。

2. 实现

2.1 搭建基本骨架

以下是我们演示的基本 HTML:

css 复制代码
<article>
  <section></section>
  <section></section>
  <section></section>
</article>

我们有 3个<article> ,每个包含三个 <section> 元素。<article> CSS设置为:

css 复制代码
article {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-column-gap: 10px;
}

这样<section> 元素排列在三列中。

每个 <section> 都包含一个 <h1>一个 <ul> 和一个 <div>

css 复制代码
<section>
    <h1>CSS 基础</h1>
    <ul>
        <li>flex</li>
        <li>grid</li>
    </ul>
    <div>CSS(层叠样式表)用于为网页添加样式</div>
</section>
<section>
    <h1>HTML基础:这是基本骨架</h1>
    <ul>
        <li>div</li>
        <li>span</li>
        <li>h1</li>
    </ul>
    <div>这个模块为学习 HTML 奠定了基础,让你熟悉重要的概念和语法</div>
</section>
<section>
    <h1>JavaScript 基础:一份全面的 JavaScript 指南,面向从初级到高级的学习者</h1>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
    <div>我们首先回答一些基本问题,例如"什么是 JavaScript?"、"它看起来是什么样的?"和"它能做什么?"</div>
</section>

此时,网格中的每一列其实都是一样的,但并不是每一列都充满了内容。如下图所示:

每列中的内容量不同,因此它们的高度不同。如何使它们高度一致,下面接着看:

2.2 section设置display:grid

只能在设置为 display: grid 的元素上使用 subgrid 值。由于我们想使用 subgrid 来对齐 <section> 元素的内容,因此我们需要将section设置为 display: grid

css 复制代码
section {
  display: grid;
}

内容现在填充我们的每个列,如下图所示:

注意:内容被拉伸到全高,因为列的默认设置是 align-content: stretch

2.3 使用子网格对齐内容

最后一步是让每列中的三个元素在行中对齐。首先,我们将 grid-template-rows 属性设置为 subgrid

css 复制代码
section {
  display: grid;
  grid-template-rows: subgrid;
}

如下图所示:

这里会很奇怪?为什么我们只能看到每列的最后一个元素。

问题在于我们的 <article> 元素只有一行,因此每个部分中的元素在那一行中彼此堆叠在一起。

我们需要告诉子网格内容跨越三行:

css 复制代码
section {
  display: grid;
  grid-template-rows: subgrid;
  grid-row: span 3;
}

我们的内容现在跨越子网格的三行,如下所示。

3. 浏览器支持

自 2023 年底以来,subgrid 已在所有主流浏览器中运行,可查看 caniuse 站点。所以现在开始使用 subgrid 是没有问题的。

4. 总结

最后总结一下:在 CSS Grid 中,通过 subgrid,可以解决多个子元素对齐不一致的问题,尤其是在不同列高度不一致时,使用 subgrid 可以让子元素在各列中对齐。

如有错误,请指正O^O!

相关推荐
weixin_3823952342 分钟前
为小工厂量身打造:本地部署的物料管理系统带缺料计算
前端·制造
__zRainy__1 小时前
解决pnpm v10+不自动构建
前端·pnpm·工程化
猫猫不是喵喵.1 小时前
Vue3 Props 属性
前端·javascript·vue.js
醉城夜风~2 小时前
CSS元素显示模式(display)
前端·css
AI大模型-小华3 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
做前端的娜娜子5 小时前
同一链接实现 PC Web 与移动 H5 自适应
前端·掘金·金石计划
小帅不太帅6 小时前
架构没变、规模没变,DeepSeek V4 Flash 正式版凭什么暴涨 47 分?
前端·aigc·deepseek
jarvisuni6 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
卷福同学7 小时前
AI编程出海第二步:验证关键词能否做站
前端·人工智能·后端