div css页面布局 模板_前端 CSS Grid 网格布局指南「上」

引言

CSS Grid 非常强大,它相比传统的布局方式非常灵活,允许在 Web 上创建二维布局。CSS Grid 的出现,使 Web 页面的设计更加容易,您不必再使用浮动和定位处理页面上的元素。

c4a91228619cbab6370ce680bd514f6c.png

认识 CSS Grid

CSS Grid 布局,译为 “网格布局” ,顾名思义,它将容器划分为 “行”“列” ,行和列交叉部分形成单元格,这些单元格就是在页面上显示的主要目标。

HTML 中实现 CSS Grid 布局,需要一个父级元素包含 N 个子级元素,然后分别在它们的 CSS 代码中设置相应属性。

所以可以把父级元素叫做 “容器” ,子级元素叫做 “项” ,例如下面的 HTML 包含了 1 个 container 容器和 6 个 item 项:

1
2
3
4
5
6

为练习方便,将 CSS 独立成文件,然后在 HTML 页面中引用它:

新建一个 style-01.css 文件,添加 CSS 代码,让页面元素看起来更明显:

.item { /*  * 内部文字居中的作用  * 不是本篇文章的 grid  * 注意区分  */  display: flex;  align-items: center;  justify-content: center;  border: 1px solid #ddd;  font-size: 2em;}.item-1 {  background-color: #BFEFFF;}.item-2 {  background-color: #BFEFFF;}.item-3 {  background-color: #FFDFBF;}.item-4 {  background-color: #FFDFBF;}.item-5 {  background-color: #FFDFBF;}.item-6 {  background-color: #FFDFBF;}

正如您无所见,没有什么特别的样式,显示效果是这样的:

7ee86d6a93d8bc96a4c8e9e3592d8f5b.png

要实现下图的布局,就可以采用 CSS Grid

f36150c8d5a8629731933071e770bc73.png

首先可以将整体分隔成一个网格模型来思考,就像下面这样:

ff4c474a36da6367e39e348992e70a82.png

这个网格共有 2 行 6 列,一个 12 个单元格,“列” 由垂直网格线分隔,标记为 M , “行” 由水平网格线分隔,标记为 N 。由水平和垂直网格线交叉形成的区域叫单元格,例如 c 图,是一个单元格,a 图和 b 图则分别由 4 个单元格合并组成。

数一数,水平和垂直网格线的条数分别为 M + 1 和 N + 1 条

关于网格的概念,您可以暂时就了解这么多。

上面的图例,可以先根据网格的特性,将布局想象成一个对应的模板

a a b b c da a b b e f

有了这个模板就方便了,直接将它放到 CSS 代码中是个不错的想法,现在继续修改 CSS 代码:

.container {  display: grid;  grid-template-columns: 50px 50px 50px 50px 50px 50px;  grid-template-rows: 50px 50px;  gap: 5px 5px;  grid-template-areas: "a a b b c d"                       "a a b b e f";}.item {  display: flex;  align-items: center;  justify-content: center;  /*   * 让内部文字居中作用   * 不是本篇文章的 grid   * 注意区分   */  border: 1px solid #ddd;  font-size: 2em;}.item-1 {  grid-area: a;  background-color: #BFEFFF;}.item-2 {  grid-area: b;  background-color: #BFEFFF;}.item-3 {  grid-area: c;  background-color: #FFDFBF;}.item-4 {  grid-area: d;  background-color: #FFDFBF;}.item-5 {  grid-area: e;  background-color: #FFDFBF;}.item-6 {  grid-area: f;  background-color: #FFDFBF;}

上面的 CSS 代码,只关注 .container.item-1 -- .item-6

.container 中,模板被放置到了一个 CSS 属性中 。这非常棒。

e4b0675fe3f6c7651104c76952890993.png

来看一下现在的效果:

98e60668a7d45452b3478f53a608dd8b.png

通过示例,可以看到 Grid 布局真的很强大。

现在遇到了点新东西,使一个容器呈现网格布局,首先要做的是将容器的 display 属性设置为 grid ,或 inline-grid

display: grid | inline-grid
  • grid :生成一个块级网格布局。
  • inline-grid :生成一个行内网格布局。

inline-grid ,对外部的行内元素有影响。容器是一个 div ,宽度默认是浏览器的宽度,它占据整个一行,如果在容器外放置一个行内元素,行内元素也不会紧跟在容器后面,例如在 container 容器前后分别加上一个 span ,页面是这样的:

7a56de50b2c1a9399bdfda2f90c9c45a.png

CSS 代码的 display 属性设置成 inline-grid

// CSS 代码.container {  display: inline-grid;  ...}// html 代码Before
...
After

现在容器变成了行内元素:

4c7a3f2e58c87cecd6586dad535b039b.png

.container.item-x 中还有几个属性:

// 应用于容器grid-template-columns: 50px 50px 50px 50px 50px 50px;grid-template-rows: 50px 50px;gap: 5px 5px;grid-template-areas: "a a b b c d"                     "a a b b e f";

用于容器的属性:

  • grid-template-columns :定义了每一列的 “列宽” ,上面的示例一共有 6 列,每列宽度为 50 像素
  • grid-template-rows :定义了每一行的 “行高”,上面的示例一共有 2 行,每行高度为 50 像素
  • gap :设置行和列间距,行间距在前,列间距在后,如果省略了第 2 个值,列宽和行高都是第 1 个值。
  • grid-template-areas :通过 引用 ‘项’ grid-area 属性指定的网格区域的名称 来定义网格模板。重复网格区域的名称将导致内容横跨这些单元格。就像示例中的 "a a" ,它将两个单元格合并了,而并不是重复显示一个单元格中的内容。grid-template-areas 语法本身提供了网格结构的可视化。

用于项的属性:

/* 应用于项 */grid-area: a;...
  • grid-area :为项指定名称,以便使用 grid-template-areas 属性创建的模板可以引用该项。它还有其它用法,但先暂时了解这么多。

总结

由于需要总结的东西比较多,为了降低读者的阅读时间成本,关于《前端 CSS Grid 网格布局指南》的系列文章将会分期发布。

本文先认识一下 CSS Grid ,看看它到底是何方神圣。

基本概念:

  • CSS Grid 将容器划分为 “列”“行” “列” 由垂直网格线分隔,“行” 由水平网格线分隔。
  • 要是实现 CSS Grid 布局,需要一个包含项的容器,同时分别在它们的 CSS 代码中设置相关的属性。
  • HTML父级元素叫做容器,子级元素叫做项。
  • 使一个容器呈现网格布局,首先要将容器的 display 属性设置为 grid ,或 inline-grid 。

容器属性:

  • grid-template-columns :定义了每一列的 “列宽” 。
  • grid-template-rows :定义了每一行的 “行高”。
  • gap :设置行和列间距。
  • grid-template-areas :通过 引用 ‘项’ grid-area 属性指定的网格区域的名称 来定义网格模板。

项属性:

  • grid-area :为项指定名称,以便使用 grid-template-areas 属性创建的模板可以引用该项。

文章中图片来源于网络,若有侵权行为,请在后台与我联系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值