首页 前端知识 CSS 详解grid布局(网格布局)与应用

CSS 详解grid布局(网格布局)与应用

2024-06-18 09:06:03 前端知识 前端哥 376 153 我要收藏

CSS Grid 布局 是一种强大的布局系统,它允许你轻松创建复杂且响应式的布局。它使用网格系统,其中元素被放置在列和行中。

基本概念:

  • 网格容器:包含网格布局的元素。
  • 网格线:将网格容器划分为列和行的垂直和水平线。
  • 网格单元格:网格线形成的区域。
  • 网格项:放置在网格单元格中的元素。

创建网格布局:

要创建网格布局,请使用 display: grid; 属性:

.container {
  display: grid;
}

定义列和行:

使用 grid-template-columnsgrid-template-rows 属性定义网格的列和行:

.container {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr;
  grid-template-rows: 1fr 2fr;
}

上面的代码定义了三列和两行。1fr 表示列或行的宽度或高度将根据可用空间按比例分配,其中列的比例为1:2:1,行的比例为1:2,具体效果可参考最下方示例。

也可根据固定值与百分比等形式进行分配:

.container {
  display: grid;
  grid-template-columns: 100px 20% 1fr 2fr;
  grid-template-rows: 1fr 2fr;
}

上面的代码定义了四列和两行,其中第一列宽100px;第二列占总宽度的20%;第三列和第四列按照剩余宽度的1:2进行平均分配。

minmax()函数值:

minmax()函数产生一个长度范围,表示长度就在这个范围之中。它接受两个参数,分别为最小值和最大值。

grid-template-columns: 1fr 1fr minmax(100px, 1fr);

上面的代码定义了三列,若平均分配宽度小于100px,则最后一列占100px,剩余宽度前两列平均分配,若平均分配宽度大于100px,则平均分配。

repeat()函数值:

repeat()接受两个参数,第一个参数是重复的次数,第二个参数是要重复的值。

grid-template-columns: repeat(2, 100px 20% 50px);

上面的代码定义了6列,第一列和第四列的宽度为100px,第二列和第五列为总宽度的20%,第三列和第六列为50px。
等同于以下写法:

grid-template-columns: 100px 20% 50px 100px 20% 50px;

在无法确认要重复几列时,重复次数使用关键字:auto-fill 或 auto-fit。如下所示:

.container {
    grid-template-columns: repeat(auto-fill, 100px);
}
.container {
    grid-template-columns: repeat(auto-fit, 100px);
}

其中auto-fill 会自动创建网格线以填充未分配的空间,而 auto-fit 不会(一般使用auto-fit)。

放置网格项:

使用 grid-column-start, grid-column-end, grid-row-start, 和 grid-row-end 属性放置网格项:

.item1 {
  grid-column-start: 1;
  grid-column-end: 3;
  grid-row-start: 1;
  grid-row-end: 2;
}

上面的代码将 .item1 放置在从第一列到第三列、从第一行到第二行的区域中(会将gap区域一同覆盖)(参考最下方示例)。

其他属性:

CSS Grid 布局还提供了许多其他属性,用于控制网格项的对齐、间距和外观:

  • justify-contentalign-items:控制网格项在列和行中的对齐方式。
  • gap:设置网格项之间的间距,第一个参数为不同行之间的间距,第二个为不同列之间的间距,也可只传一个参数,将同时设置行和列之间的间距。
  • grid-area:使用一个简短的字符串(例如,“1 / 2 / 3 / 4”)指定网格项的区域,其中参数分别为< row-start > / < column-start > / < row-end > / < column-end >。

优点:

  • 灵活性和响应性:网格布局非常灵活,可以根据可用空间轻松创建响应式布局。
  • 易于使用:与其他布局方法相比,网格布局的语法相对简单易懂。
  • 强大的功能:网格布局提供了广泛的功能,使你可以创建复杂且多样的布局。

示例:

这是一个简单的网格布局示例,其中容器被划分为三列和两行:

<div class="container">
  <div class="item1">项目 1</div>
  <div class="item2">项目 2</div>
  <div class="item3">项目 3</div>
  <div class="item4">项目 4</div>
</div>
.container {
  height: 300px;
  display: grid;
  grid-template-columns: 1fr 2fr 1fr; // 列按1:2:1自动分配
  grid-template-rows: 1fr 2fr; // 行按1:2自动分配
  gap: 10px 50px; // 第一个参数为不同行之间的间距,第二个为不同列之间的间距,也可只传一个参数,将同时设置行和列之间的间距
}

.item1 {
  grid-column-start: 1;
  grid-column-end: 3; // 项目1的列为索引1-3之间的区域
  grid-row-start: 1;
  grid-row-end: 2;// 项目1的行为索引1-2之间的区域
  background: red;
}

.item2 {
  grid-column-start: 2;
  grid-column-end: 3;
  grid-row-start: 2;
  grid-row-end: 3;
  background: green;
}

.item3 {
  grid-column-start: 1;
  grid-row-start: 2;
  grid-row-end: 3;
  background: blue;
}

.item4 {
  grid-column-start: 3;
  grid-row-start: -1;
  grid-row-end: -2;
  background: yellow;
}

效果:

上面代码将创建以下布局:

在这里插入图片描述
其中各模块的行和列的索引值如下图所示:
在这里插入图片描述

一般掌握以上内容就可应对绝大部分情况。你可以根据需要调整网格布局,以创建各种不同的设计。

grid布局自动生成网站

转载请注明出处或者链接地址:https://www.qianduange.cn//article/12596.html
标签
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!