玩转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!

相关推荐
木子七9 分钟前
Js Dom
前端·javascript
谢小飞41 分钟前
我做了三把椅子原来纹理这样加载切换
前端·three.js
圈圈的熊42 分钟前
HTTP 和 HTTPS 的区别
前端·网络协议·http·https
GIS程序媛—椰子1 小时前
【Vue 全家桶】2、Vue 组件化编程
前端·javascript·vue.js
Beamon__1 小时前
element-plus按需引入报错IconsResolver is not a function
前端
努力奔波的程序猿1 小时前
HBuilderx修改主题色-改变编辑器背景颜色等
前端
正小安1 小时前
Vue 3 性能提升与 Vue 2 的比较 - 2024最新版前端秋招面试短期突击面试题【100道】
前端·vue.js·面试
yqcoder1 小时前
electron 中 ipcRenderer 的常用方法有哪些?
前端·javascript·electron
T0uken1 小时前
【Python】Bottle:轻量Web框架
开发语言·前端·python