搜索
首页web前端css教程引入CSS网格布局

CSS Grid 布局:构建强大且灵活的网站布局

核心要点

  • CSS Grid 布局提供了一种更强大、更灵活的方式来创建复杂的网站布局,无需使用诸如 inlinefloat 之类的属性或单独的网格系统样式表。
  • 目前,只有 IE 10 和 Edge 支持 CSS Grid 布局,但可以通过 Chrome 和 Firefox 中的特定标志或使用 polyfill 来启用它。
  • CSS Grid 布局使用称为 “fr” 的度量单位、线条、轨道、单元格和区域来定义网页上元素的布局。
  • CSS Grid 布局允许完全分离标记和布局,使 CSS 更易于维护,并为设计提供了无限的可能性。

Introducing the CSS Grid Layout

图片来自 SitePoint/Natalia Balska。

在创建复杂的网站时,网格至关重要。现代网页设计中网格的重要性从众多实现网格系统以加快开发速度的框架数量中可见一斑。

随着 CSS Grid 布局规范的引入,您无需再包含单独的样式表即可使用网格系统。另一个优点是,您无需再依赖 inlinefloat 等属性来布置网页上的元素。在本教程中,我们将介绍网格系统的基础知识,并创建一个基本的博客布局。

浏览器支持

目前,只有 IE 10 和 Edge 支持 Grid 布局——您还不能在商业网站上使用它。

它可以通过 chrome://flags 中的 “实验性 Web 平台功能” 标志在 Chrome 中启用。您可以使用 layout.css.grid.enabled 标志在 Firefox 中启用它。

另一种选择是使用 polyfill。确实存在 CSS Grid Polyfill!使用上述各种选项,您可以在 Grid 布局仍处于起步阶段时开始试验并尽可能多地了解它。

注意:Internet Explorer 目前已实现旧版本的规范。不幸的是,这意味着它与最新规范并不完全兼容。在学习本教程中的示例时,建议您使用启用了相应标志的 Chrome 或 Firefox。

网格系统术语

在布置元素方面,CSS 网格系统类似于表格。但是,它更加强大和灵活。在本节中,我将讨论一些在使用网格时需要注意的术语:

fr 单位:此单位用于指定可用空间的一部分。它旨在与 grid-rowsgrid-columns 一起使用。根据规范——

分配分数空间发生在所有“长度”或基于内容的行和列大小达到其最大值之后。

线条:线条定义其他元素的边界。它们垂直和水平运行。在下图中,有四条垂直线和四条水平线。

轨道:轨道是平行线之间的空间。在下图中,有三条垂直轨道和三条水平轨道。

单元格:单元格是网格的基本构建块。在下图中,共有九个单元格。

区域:区域是一个矩形形状,具有任意数量的单元格。因此,轨道 是一个 区域单元格 也是一个 区域

Introducing the CSS Grid Layout

在网格中定位元素

让我们从基础开始。在本节中,我将教您如何使用网格将元素定位到特定位置。要使用 CSS Grid 布局,您需要一个父元素和一个或多个子元素。为了演示,我们将使用以下标记作为我们的网格系统:

<div class="grid-container">
  <div class="grid-element item-a">A</div>
  <div class="grid-element item-b">B</div>
  <div class="grid-element item-c">C</div>
  <div class="grid-element item-d">D</div>
  <div class="grid-element item-e">E</div>
  <div class="grid-element item-f">F</div>
</div>

完成标记后,您需要在父元素上应用 display: griddisplay: inline-grid 以及其他样式,如下所示:

.grid-container {
  display: grid;
  grid-template-columns: 200px 10px 0.3fr 10px 0.7fr;
  grid-template-rows: auto 20px auto;
}

grid-template-columnsgrid-template-rows 属性用于指定各种行和列的宽度。在上面的示例中,我定义了五列。10px 列充当槽,用于在元素之间提供所需的间距。第一列宽度为 200px。第三列占据剩余空间的 0.3 部分。类似地,第五列占据剩余空间的 0.7 部分。

对于 grid-template-rows 中的第一行使用 auto 允许该行根据其内部的内容进行扩展。20px 行充当槽。

此时,元素紧密地排列在一起,如下面的演示所示。(此处省略CodePen演示链接)

观察到元素 B 位于我们计划用作槽的第二列中。如果您没有指定网格内子元素的位置,浏览器会将一个元素放在每个单元格中,直到第一行完全填充,其余元素然后进入下一行。这就是我们在第二行剩下四个备用列的原因。

要将元素移动到网格中的特定单元格,您需要在 CSS 中指定它们的位置。在解释如何使用网格系统移动元素之前,请查看下图。(此处省略图片链接)

在本例中,我们将使用“基于线条的放置”。基于线条的放置意味着我们的网格系统中的线条将充当放置和限制元素的指南。让我们以元素 B 为例。在水平方向上,它从第 3 列线开始,到第 4 列线结束。在垂直轴上,它位于第 1 行线和第 2 行线之间。

我们使用 grid-column-start 来指定元素的起始垂直线。在这种情况下,它将设置为 3。grid-column-end 指示元素的结束垂直线。在这种情况下,此属性将等于 4。相应的行值也将类似地设置。

考虑到以上所有内容,要将元素 B 移动到第二个单元格,您将使用以下 CSS:

<div class="grid-container">
  <div class="grid-element item-a">A</div>
  <div class="grid-element item-b">B</div>
  <div class="grid-element item-c">C</div>
  <div class="grid-element item-d">D</div>
  <div class="grid-element item-e">E</div>
  <div class="grid-element item-f">F</div>
</div>

类似地,要将元素 F 移动到第六个单元格,您将使用以下 CSS:

.grid-container {
  display: grid;
  grid-template-columns: 200px 10px 0.3fr 10px 0.7fr;
  grid-template-rows: auto 20px auto;
}

在对 CSS 进行这些更改后,元素应该像此演示中一样正确地间隔开。(此处省略CodePen演示链接)

创建基本布局

现在是时候创建一个基本的博客布局了。该博客将具有页眉、页脚、侧边栏和两个用于实际内容的部分。让我们从标记开始:

.element-b {
  grid-column-start: 3;
  grid-column-end: 4;
  grid-row-start: 1;
  grid-row-end: 2;
}

请记住,标记中元素的顺序不会影响元素在网页上的位置。只要您不更改 CSS,您就可以在标记中将页脚放在页眉上方,而网页上元素的位置不会改变。当然,我不建议这样做。关键是——您的标记将不再决定元素的位置。

我们现在要做的就是确定各种元素的 grid-row-end 等属性的值。就像在最后一个示例中一样,我们将使用网格图来确定所有网格属性的值。(此处省略图片链接)

如上图所示,页眉从第 1 列线到第 4 列线,从第 1 行线到第 2 行线。这应该如下所示:

.element-f {
  grid-column-start: 5;
  grid-column-end: 6;
  grid-row-start: 3;
  grid-row-end: 4;
}

类似地,“额外内容”从第 3 列线到第 4 列线,从第 5 行线到第 6 行线。因此,CSS 将是:

<div class="grid-container">
  <div class="grid-element header">Header</div>
  <div class="grid-element sidebar">Sidebar</div>
  <div class="grid-element main">Main Content</div>
  <div class="grid-element extra">Extra Info</div>
  <div class="grid-element footer">Footer</div>
</div>

现在也可以轻松确定所有其他元素的网格属性。查看 CodePen 演示并试验各种网格值,以更好地了解基于线条的放置。(此处省略CodePen演示链接)

结论

CSS 网格布局规范使我们能够轻松创建复杂的布局。我们需要编写的 CSS 更简单、更易于维护。在设计中创建复杂布局时,我们不再需要使用 float 或其他此类属性。另一个巨大的优势是标记和布局的完全分离。使用 CSS Grid 布局,可能性是无限的。

如果您对本教程有任何疑问,请在评论中告诉我。

关于 CSS Grid 布局的常见问题

CSS Grid 布局与其他 CSS 布局方法有何不同?

CSS Grid 布局是一个二维布局系统,与其他 CSS 布局方法(如 Flexbox,它是一维的)不同。这意味着使用 CSS Grid,您可以同时控制水平和垂直布局,而其他方法则无法做到这一点。它旨在处理更复杂的设计和大型布局。它也更灵活、更强大,允许更具创意和精细的设计。

如何开始使用 CSS Grid 布局?

要开始使用 CSS Grid 布局,您需要将元素的 display 属性设置为 gridinline-grid。这使得元素成为网格容器,其子元素成为网格项目。然后,您可以使用各种网格属性来定义网格的布局和网格项目的位置。

我可以将 CSS Grid 布局与其他 CSS 布局方法一起使用吗?

是的,CSS Grid 布局可以与其他 CSS 布局方法结合使用。例如,您可以将 Flexbox 用于网站的组件,将 CSS Grid 用于整体布局。这使您可以利用每种布局方法的优势。

如何使用 CSS Grid 布局创建网格?

要使用 CSS Grid 布局创建网格,您首先需要通过将元素的 display 属性设置为 gridinline-grid 来定义网格容器。然后,您可以使用 grid-template-columnsgrid-template-rows 属性来定义网格中列和行的数量和大小。

如何将项目放置在网格上?

您可以使用 grid-columngrid-row 属性将项目放置在网格上。这些属性允许您指定项目的起始线和结束线,从而有效地将其放置在网格的特定单元格或单元格中。

什么是网格线和网格轨道?

在 CSS Grid 布局中,网格线是构成网格结构的分隔线。它们的编号从 1 开始,行号从上到下、从左到右递增。网格轨道是两条相邻网格线之间的空间,可以是列或行。

CSS Grid 布局中的 fr 单位是什么?

CSS Grid 布局中的 fr 单位代表“分数”。它表示网格容器中可用空间的一部分。例如,如果您有一个包含三列的网格,并将一列的宽度设置为 1fr,而另外两列设置为 2fr,则第一列将占据可用空间的三分之一,而另外两列将各占据三分之一。

如何使网格具有响应性?

要使网格具有响应性,您可以将媒体查询与 grid-template-columnsgrid-template-rows 属性结合使用。您还可以将 auto-fillauto-fit 关键字与 repeat 函数一起使用,以根据视口的尺寸自动调整列和行的数量和大小。

我可以在网格中嵌套网格吗?

是的,您可以在 CSS Grid 布局中嵌套网格。这意味着您可以使网格项目本身成为网格容器,从而创建复杂的嵌套布局。

所有浏览器都支持 CSS Grid 布局吗?

所有现代浏览器(包括 Chrome、Firefox、Safari 和 Edge)都支持 CSS Grid 布局。但是,Internet Explorer 不支持它。因此,务必为使用不受支持浏览器的用户提供备用布局。

请注意,由于我无法访问外部网站和图片,我无法直接显示图片。 请确保将图片链接正确地添加到你的最终输出中。

以上是引入CSS网格布局的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
什么是CSS网格?什么是CSS网格?Apr 30, 2025 pm 03:21 PM

CSS网格是创建复杂,响应式Web布局的强大工具。它简化了设计,提高可访问性并提供了比旧方法更多的控制权。

什么是CSS Flexbox?什么是CSS Flexbox?Apr 30, 2025 pm 03:20 PM

文章讨论了CSS FlexBox,这是一种布局方法,用于有效地对齐和分布响应设计中的空间。它说明了FlexBox用法,将其与CSS网格进行了比较,并详细浏览了浏览器支持。

我们如何使用CSS使网站迅速响应?我们如何使用CSS使网站迅速响应?Apr 30, 2025 pm 03:19 PM

本文讨论了使用CSS创建响应网站的技术,包括视口元标签,灵活的网格,流体媒体,媒体查询和相对单元。它还涵盖了使用CSS网格和Flexbox一起使用,并推荐CSS框架

CSS盒装属性有什么作用?CSS盒装属性有什么作用?Apr 30, 2025 pm 03:18 PM

本文讨论了CSS盒装属性,该属性控制了元素维度的计算方式。它解释了诸如Content-Box,Border-Box和Padding-Box之类的值,以及它们对布局设计和形式对齐的影响。

我们如何使用CSS动画?我们如何使用CSS动画?Apr 30, 2025 pm 03:17 PM

文章讨论使用CSS,关键属性并与JavaScript结合创建动画。主要问题是浏览器兼容性。

我们可以使用CSS向我们的项目添加3D转换吗?我们可以使用CSS向我们的项目添加3D转换吗?Apr 30, 2025 pm 03:16 PM

文章讨论了Web项目的3D转换,关键属性,浏览器兼容性和性能注意事项的讨论。(角色计数:159)

我们如何在CSS中添加梯度?我们如何在CSS中添加梯度?Apr 30, 2025 pm 03:15 PM

文章讨论了使用CSS梯度(线性,径向,重复)来增强网站视觉效果,添加深度,焦点和现代美学。

CSS中的伪元素是什么?CSS中的伪元素是什么?Apr 30, 2025 pm 03:14 PM

文章讨论了CSS中的伪元素,它们在增强HTML样式方面的使用以及与伪级的差异。提供实用的例子。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器