grid 布局
grid布局和flex布局类似,不过grid是最强大的css布局方式
grid布局是网格布局
display: grid; // 定义grid布局,默认为块级元素
display: inline-grid // 设置为行内元素
设置为grid布局后,容器的子元素的float(浮动),display: inlne-block(行内块级元素),display: table-cell(表格单元格),vertical-align(垂直对齐方式)之类的全部都会失效
列宽和行高的设置
grid-template-columns: 100px; // 列宽
grid-template-rows: 100px; // 行高
数值也支持百分比
grid-template-columns: repeat(3, 100px); // 列宽,重复次数为3,重复的值为100px,和下面效果是一样的
grid-template-columns: 100px 100px 100px;
grid-template-rows: repeat(auto-fill, 100px); // 行高,自动填充容器,行高为100px
grid-template-rows: 1fr 2fr; // 行高,第二个的行高是第一的2倍
grid-template-rows: minmax(100px, 300px); // 生成一个长度范围,长度在这个范围内,两个参数分别代表最小值和最大值,这里表示的是行高不小于100px,不大于300px
grid-template-rows: auto; // 由浏览器决定行高
grid-template-columns: [a1] 100px [a2] 100px [a3] auto; // 方括号[]内的的值是用于指定网格的名称
grid-template-columns: 20% 60% 20%; // 左栏20%,中间60%,右栏20%,如果是重复的值搭配repeat使用更佳
grid-row-gap: 10px; // 行间距(行与行的距离)
grid-column-gap: 10px; // 列间距(列与列的距离)
可以简写为grid-gap: 10px 20px; // 行间距,列间距,如果只提供一个值,那么行间距,列间距都为那个值
grid-row-start: 2; // 指定从哪条行开始,这里指定在第二行上
grid-column-start: 2; // 指定从哪条列开始,这里指定在第二列上
grid-row-end: 2; // 指定横跨第几行,这里指定的是第二行
grid-column-end: 2; // 指定横跨第几列,这里指定的是第二列
上面的属性默认为auto,可以简写为下面的
指定项目放在哪个区域
grid-area: b; // 指定该项目放在b区域
grid-area:2 / 2 / span 2 / span 2; // 在第二行第2列开始,横跨两行两列
span关键字是跨域的意思,指的是跨域多少个网格
grid-template-areas: “a b c”; // 指定区域中对应的单元格,如果区域中不需要用到则用点.来表示
grid-auto-flow: column; // 设置为先放满列再放行,网格布局,容器的元素会根据顺序进行排列,默认是先放满第一行,再放第二行,而该属性设置为先放满第一列,再放第二列表,默认值为row
如果有一些元素的大小是不一致,浏览器认为这个位置放不下,会另外起一行放
grid-auto-flow: row dense; // 先填满行,而且是尽可能的填满,不留下空隙
grid-auto-flow: column dense; // 先填满列,而且是尽可能的填满,不留下空隙
设置单元格内容的位置
justify-items: centet; // 水平位置,内容居中
align-items: centet; // 垂直位置,内容居中
stretch:拉伸,占满整个单元格的宽度(默认值) start:对齐单元格的起始位置 end:对齐单元格的结束位置 center:单元格内容居中
可以简写为place-items: centet centet; // 水平居中,垂直居中,如果只提供一个值,那么水平和垂直都是这个值
设置单个项目的位置
justify-self: center; // 设置单个项目在网格中的水平方向位置,居中
align-self: center; // 设置单个项目在网格中的垂直方向位置,居中
和justify-items,align-items类似,只是作用于单个项目
可简写为place-self: center; // 如果不提供第二个值,那么垂直方向和水平方向都是那个值
设置网格在容器的位置
justify-content: center; // 网格在容器水平方向为居中
align-content: center; // 网格在容器垂直方向为居中
属性值和上面的类似
space-around // 网格的项目的两侧的距离相等,a项目和b项目的距离是相等,所以实质上项目与项目之间的距离是和容器之间的距离的2倍
space-between // 项目和项目之间距离相等,项目和容器没有间隔
space-evenly // 项目和项目之间距离相等,项目和容器之间也是相等间隔
可以简写为place-content: center center; // 水平居中,垂直居中,如果只提供一个值,那么水平和垂直都是这个值
如果浏览器自动生成一些多余网格,而要设置这些多余网格的行高和列宽
grid-auto-columns: 100px; // 多余网格的行高为100px
grid-auto-rows: 100px; // 多余网格的列宽为100px
项目属性定位
grid-column-start: 2; // 左边框在第二个项目的垂直线上
grid-column-end: 3; // 右边框在第三个项目的垂直线上
grid-row-start: 2; // 上边距在第二个项目的水平线上
grid-row-end: 3; // 下边距在第三个项目的水平线上
除了设置项目的定位外,还可以设置网格线的名称
grid-column-start: main-start;
可以简写为
grid-column: 2 / 3;
grid-row: 2 / 3;
效果和上面一样