css网格布局

# CSS Grid(网格) 布局

CSS Grid 网格布局可以将网格元素放置在与这些行和列相关的位置上,进而快速、便捷的对页面结构进行布局,提高工作效率

“flexbox” 是一维的布局,是因为一个 “flexbox container” 一次只能处理一个维度上的元素布局,一行或者一列。

相比较 “Grid网格布局”,则是二维布局可以同时处理行和列上的布局

通常适用于布局页面主要的区域布局或小型组件

![](Dimage-20210409104705206.png)

## 兼容

ie10、ie11支持带前缀-ms-

![image-20210414092338875](image-20210414092338875.png)

## 基本概念

### 容器与项目

采用网格布局的区域,称为"容器"(container)。

容器内部采用网格定位的子元素,称为"项目"(item)。

![](容器与项目.png)

### 行和列

容器里面的水平区域称为"行"(row),垂直区域称为"列"(column)。

![](行.png)

### 单元格

行和列的交叉区域,称为"单元格"(cell)

正常情况下,n行和m列会产生n x m个单元格。比如,3行3列会产生9个单元格。

![](单元格-1617932586281.png)

```

正常情况下,n行和m列会产生n x m个单元格。比如,3行3列会产生9个单元格。

```

### 网格线

划分网格的线,称为"网格线"(grid line)。

水平网格线划分出行,垂直网格线划分出列。

![](网格线.png)

```

正常情况下,n行有n + 1根水平网格线,m列有m + 1根垂直网格线,

比如三行就有四根水平网格线。

```

## 网格属性

Grid 布局的属性分成两类。

一类定义在容器上面,称为容器属性;

另一类定义在项目上面,称为项目属性。

## 容器属性

### 设置为网格布局

- 设置为块级网格

```

div {

display: grid;

}

```

- 设置为行级网格

```

div {

display: inline-grid;

}

```

注意

- 不是网格的直接子元素,不参与网格布局

- 设为网格布局以后,容器子元素(项目)的float、display: inline-block、vertical-align和column-*等设置都将失效。

### 列宽与行高

grid-template-columns网格布局中列的数量(和宽度)

grid-template-rows网格布局中行的数量(和高度)

#### 语法

- 空格隔开的一组值列表

- 其中每个值指定相应列的宽度/行的高度。

#### 取值

- 默认值 none

- 绝对单位px

```

grid-template-columns: 100px 100px 100px;

grid-template-rows: 100px 100px 100px;

```

- 百分比

```

.container {

display: grid;

grid-template-columns: 33.33% 33.33% 33.33%;

grid-template-rows: 33.33% 33.33% 33.33%;

}

```

- fr 关键字

```

fraction 的缩写,意为部分

```

- 弹性系数,按比例分配剩余空间(如果两列的宽度分别为1fr和2fr,就表示后者是前者的两倍)

- 可以与绝对长度的单位结合使用

- auto 关键字

关键字表示由浏览器自己决定长度

```

grid-template-columns: 100px auto 100px;

```

- minmax()

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

即空间不足时以最小以min显示,空间有剩余时最大按max显示

- 注意:如果max值小于min值,则该值会被视为min值。最大值可以设置为fr但最小值则不行

```

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

minmax(100px, 1fr)表示列宽不小于100px,不大于1fr。

```

- repeat( )函数

- 作用:简化重复的值

- 接受两个参数,第一个参数是重复的次数,第二个参数是所要重复的值

```

repeat(重复的次数,一个或空格隔开的多个值 )

grid-template-columns: repeat(2, 100px);表示共两列,每列各100px

```

- 第二个参数为空格隔开的多个值 时表示,重复某种模式。

```

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

定义了6列,第一列和第四列的宽度为100px,第二列和第五列为20px,第三列和第六列为80px。

```

- auto-fill 关键字

【单元格的大小是固定的,但是容器的大小不确定。如果希望每一行(或每一列)容纳尽可能多的单元格时使用】

```

grid-template-columns:repeat(auto-fill,100px);

表示每列宽度100px,然后自动填充,直到容器不能放置更多的列。

```

### 设置行与行的间隔(行间距)

column-gap属性设置列与列的间隔(列间距)

row-gap属性设置行与行的间隔(行间距)

#### 取值

- 默认值 0

- px

- 百分比(相对于容器)

#### 简写grid-gap

- gap: 行间距 列间距; 【空格】隔开

- 省略了第二个值,浏览器认为第二个值等于第一个值

### 单元格在容器垂直位置,水平位置

justify-content水平位置 总网格区域相对于容器左右对齐方式(网格内容大小小于容器宽时)

align-content 位置 总网格区域相对于容器上下对齐方式(网格内容大小小于容器高时)

![image-20210414092250261](image-20210414092250261.png)

#### 取值

- start - 对齐容器的起始边框。

- end - 对齐容器的结束边框。

- center - 容器内部居中。

- stretch - 列宽或行高为auto时有效

- space-around - 单元格两侧间隔相等。所以,单元格之间的间隔比单元格与容器边框的间隔大一倍。

- space-between - 剩余空间分布在单元格之间,单元格与容器边框之间没有间隔。

- space-evenly - 剩余空间均等分布在单元格与单元格,单元格与项目之间。单元格与容器边框之间间隔相等

#### 简写

place-content属性是align-content属性和justify-content属性的合并简写形式。

- place-content:垂直 水平 【空格】隔开

- 如果省略第二个值,浏览器就会假定第二个值等于第一个值。

### 项目(内容)在单元格中的垂直、水平位置

justify-items 水平位置:内容相对于单元格左右对齐方式(通常项目内容大小小于单元格宽度时)

align-items 垂直位置:内容相对于单元格上下对齐方式(通常项目内容大小小于单元格高度时)

#### 取值

- start:对齐单元格的起始边缘。

- end:对齐单元格的结束边缘。

- center:单元格内部居中。

- stretch:拉伸,占满单元格的整个宽度(默认值)

- ![D:image-20210409151129030](D:image-20210409151129030.png)

#### 简写

place-items属性是align-items属性和justify-items属性的合并简写形式。

- place-items: 垂直 水平; 【空格隔开】

- 如果省略第二个值,则浏览器认为与第一个值相等。

### 项目放置顺序

划分网格以后,容器的子元素会按照顺序,自动放置在每一个网格。默认的放置顺序是"先行后列",即先填满第一行,再开始放入第二行

grid-auto-flow 属性

- 默认值是row,即"先行后列"。

- column,变成"先列后行"。

- dense 自动稠密补位布局 [尽可能紧密填满,尽量不出现空格]

### 网格项命名(给网格划分区域)

网格布局允许指定"区域"(area),一个区域由单个或多个单元格组成

通过grid-template-areas 属性实现

#### 取值

- 默认值 none

- 一个双引号一行,一个空格一列

```

grid-template-areas:

"种花 养鱼 菠菜"

"西瓜 冬瓜 南瓜";

```

- 多个单元格合并成一个区域的写法

![](image-20210409100314333-1617933829328.png)

```

grid-template-areas: 'a a a'

'b c c'

'd d d';

```

- 某些区域不需要利用,则使用"点"(.)表示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CSS网格布局是一种二维布局系统,它可以让我们更方便地创建复杂的网页布局。下面是一个简单的例子: ```html <div class="container"> <div class="item item-1">1</div> <div class="item item-2">2</div> <div class="item item-3">3</div> <div class="item item-4">4</div> <div class="item item-5">5</div> <div class="item item-6">6</div> </div> ``` ```css .container { display: grid; grid-template-columns: 100px 100px auto; grid-template-rows: 100px 100px auto; grid-gap: 10px; } .item { background-color: #ddd; padding: 20px; font-size: 30px; text-align: center; } ``` 在这个例子中,我们创建了一个包含6个子元素的容器,并使用`display: grid`将其设置网格布局。然后,我们使用`grid-template-columns`和`grid-template-rows`属性来定义网格的列和行。在这个例子中,我们定义了3列和3行,前两列和前两行的宽度和高度都是100像素,最后一列和最后一行的宽度和高度自适应。我们还使用`grid-gap`属性来定义网格之间的间距。 接下来,我们为每个子元素定义了一个类名,并使用`grid-column`和`grid-row`属性来指定它们在网格中的位置。在这个例子中,我们将第一个子元素放在第1列和第1行,跨越了2列;将第二个子元素放在第3列和第1行;将第三个子元素放在第1列和第3行;将第四个子元素放在第3列和第3行;将第五个子元素放在第2列和第2行,跨越了2行;将第六个子元素放在第2列和第3行。 这样,我们就创建了一个简单的网格布局。当然,CSS网格布局还有很多其他的属性和用法,可以用来创建更复杂的布局。如果您想深入了解CSS网格布局,请参考相关文档和教程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小任要y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值