css--栅格系统

什么是栅格?

CSS 网格布局(Grid Layout) 是CSS中最强大的布局系统。 这是一个二维系统,这意味着它可以同时处理列和行。

兼容性:参考 https://caniuse.com/

1.声明容器

块级容器

display:grid;

行级容器

display:inline-grid;

2.划分行列

grid-template-columns  划分列数
grid-template-rows    划分行数

固定宽度

使用固定宽度划分时,当容器宽度过大时将漏白。

grid-template-rows: 100px 100px;     两行,每行高100px
grid-template-columns: 100px 100px 100px;  三列,每行宽100px

百分比划分

使用百分比自动适就容器。

grid-template-rows: 50% 50%;   两行,每行占容器高的50%
grid-template-columns: 25% 25% 25% 25%;     四列,每行占容器的25%

重复设置

使用 repeat 统一设置值,第一个参数为重复数量,第二个参数是重复值

grid-template-rows: repeat(2, 50%);        两行,每行占容器的一半
grid-template-columns: repeat(2, 50%);     两列,每列占容器的一半

可以设置多个值来定义重复

grid-template-rows: repeat(2, 50%);
grid-template-columns: repeat(2, 100px 50px); 四列,分别宽  100px 50px 100px 50px

自动填充

自动填充是根据容器尺寸,自动设置元素尺寸,auto-fill只能设置在第一个,根据后面给的尺寸,自动分配有多少个。

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

比例划分

使用 fr 单位设置元素在空间中所占的比例,1fr 2fr (总空间/总份数)* 当前元素份数 = 当前元素所占空间

grid-template-rows:1fr 2fr;
grid-template-columns:100px 1fr 2fr;    (总空间-100px)/总份数*当前份数
重复定义
grid-template-rows:repeat(2,1fr);
grid-template-columns:repeat(2,1fr,2fr);

自动空间

容器内其他元素有固定宽or高时候,设置一个为auto将自动撑满容器。

组合定义

grid-template:grid-template-rows / grid-template-columns;

minmax

在不同设备上,我们不希望一个元素过小或者过大,就设置一个minmax让他在一个范围内自适应大小。


间距定义

行间距

row-gap   顾名思义,设置行与行之间的间距

列间距

column-gap

组合定义

gap:row-gap column-gap;

栅格命名

栅格线可以使用命名与编号找到,方便控制指定栅格,或将内容添加到指定栅格中。

独立命名

可以为每个栅格独立命名来进行调用。

eg.
grid-template-rows: [r1-start] 100px [r1-end r2-start] 100px [r2-end r3-start] 100px [r3-end];
三行三列
grid-template-columns: [c1-start] 100px [c1-end c2-start] 100px [c2-start c3-start] 100px [c3-end];

自动命名

对于重复设置的栅格系统会自动命名,使用时使用 c1、c2 的方式定位栅格。

eg.   三行三列,会自动命名
grid-template-rows: repeat(3, [r-start] 100px [r-end]);
grid-template-columns: repeat(3, [c-start] 100px [c-end]);

使用的时候
 grid-row-start: r-start 2;
 grid-column-start: c-start 2;
 grid-row-end: r-start 2;
 grid-column-end: c-end 2;

元素定位

样式属性说明
grid-row-start行开始栅格线
grid-row-end行结束栅格线
grid-column-start列开始栅格线
grid-column-end列结束栅格线

上面的每个样式可以使用下列属性

属性值说明
Line栅格络
span 数值栅格包含的栅格数量
span 区域名称栅格包含到指定的区域名称
auto自动设置,默认为一个网格宽度和高度

根据栅格线确定区域

通过设置具体的第几条栅格线来设置区域位置,设置的数值可以是正数和负数。

eg.
 grid-row-start: 2;
 grid-row-end: 4;
 grid-column-start: 2;
 grid-column-end: 4;

根据栅格命名确定区域

eg.
grid-template-rows: [r1-start] 100px [r1-end r2-start] 100px [r2-end r3-start] 100px [r3-end];
grid-template-columns: [c1-start] 100px [c1-end c2-start] 100px [c2-start c3-start] 100px [c3-end];

grid-row-start: r1-end;
grid-column-start: c2-start;
grid-row-end: r3-start;
grid-column-end: c3-start;

根据自动命名确定区域

对于重复设置的栅格系统会自动命名,使用时使用 c 1、c 2 的方式定位栅格。

eg.
 grid-template-rows: repeat(3, [r-start] 100px [r-end]);
 grid-template-columns: repeat(3, [c-start] 100px [c-end]);

 grid-row-start: r-start 2;
 grid-column-start: c-start 2;
 grid-row-end: r-start 2;
 grid-column-end: c-end 2;

根据偏移量确定区域

使用 span 可以设置包含栅格的数量或包含到的区域名称。

示例说明
grid-row-start:2 grid-row-end:span 2从第二行起向下包含2行
grid-column-start:2 grid-column-end:span 2从第二列起向右包含2行
grid-column-end:span 2从默认位置开始向下包含2 ,其余同理

简写模式

可以使用 grid-row 设置行栅格线,使用 grid-column 设置列栅格线。

grid-row: 2/4;            2行开始,4行结束
grid-column: 2/4;        同理

grid-area

grid-area更加简洁是同时对 grid-row 与 grid-column 属性的组合声明。

grid-area: grid-row-start/grid-column-start/grid-row-end/grid-column-end。

命名定位

可以使用栅格线命名来附加元素。

eg.
grid-template-rows: repeat(auto-fill, [r] 100px);
grid-template-columns: repeat(auto-fill, [l] 100px);

grid-area: r 2/l 2/r 4/l 4;

区域声明

区域是由多个单元格构成,使用 grid-template-areas可以定义栅格区域,并且栅格区域必须是矩形的。

eg.
grid-template-rows: 80px 1fr 50px;
grid-template-columns: 100px 1fr 50px 60px;
grid-template-areas: 
        "header header header header"
        "nav main main aside"
        "footer footer footer footer";
在划分好栅格后,给栅格命名分区,上述例子划分成了3行4列共12个栅格,所以给每个栅格打上标签。
html代码

<header></header>
<nav></nav>
<main></main>
<aside></aside>
<footer></footer>

给每个标签自己的区域
 main {
        /* 完整的写法*/
    /* grid-area: main-start/main-start/main-end/main-end; */
    grid-area: main;        /*简写*/
    background: #E9EEEF;
}

header {
    background: #2EC56C;
    grid-area: header;
}

nav {
    background: #E1732C;
    grid-area: nav;
}

aside {
    grid-area: aside;
    background: #EEBC31;
}

footer {
    grid-area: footer;
    background: #904FA9;
}

简写形式

使用grid-template进行栅格划分会更简洁。

语法格式
grid-template:
  '栅格名称 栅格名称 栅格名称 栅格名称' 行高
  '栅格名称 栅格名称 栅格名称 栅格名称' 行高
  '栅格名称 栅格名称 栅格名称 栅格名称' 行高/列宽 列宽 列宽 列宽;

区域命名

系统会为区域自动命名,譬如上述例子中的栅格线会被命名为 header-start / header-end 之类的,此时栅格线的使用方法与之前命名使用方法相同。

区域占位

要是使用同一名字,该区域将被打通,用 ... ... 进行占位的时候不会被打通,栅格位置本来就够用,就可以使用占位优化代码,不用每个区域都声明。

grid-template-areas:
        "header .  ."
        "top .  ."
        "bottom bottom bottom";

   ps:使用几个... 都无所谓,解释得不清楚的地方    https://www.bilibili.com/video/BV1tJ411Y7fB?p=146

栅格流动

在容器中设置grid-auto-flow 属性可以改变单元格排列方式。

选项说明
column按列排序
row按行排列
dense元素使用前面空余栅格(下面有示例说明)

对齐管理

类似flex布局的方式

选项说明对象
justify-content所有栅格在容器中的水平对齐方式,容器有额外空间时栅格容器
align-content所有栅格在容器中的垂直对齐方式,容器有额外空间时栅格容器
align-items栅格内所有元素的垂直排列方式栅格容器
justify-items栅格内所有元素的横向排列方式栅格容器
align-self元素在栅格中垂直对齐方式栅格元素
justify-self元素在栅格中水平对齐方式栅格元素

justify-content、align-content等属性的值与flex布局类似,这里不再赘述。


自动排列

当栅格无法放置内容时,系统会自动添加栅格用于放置溢出的元素,我们需要使用以下属性控制自动添加栅格的尺寸。

选项说明对象
grid-auto-rowsgrid-auto-rows容器
grid-auto-columns控制自动增加的栅格列的尺寸,grid-auto-flow: column;容器

终级简写

grid是简写属性,可以用来设置:

  • 显式网格属性 grid-template-rows、grid-template-columns和 grid-template-areas,
  • 隐式网格属性 grid-auto-rows、grid-auto-columns 和 grid-auto-flow,
  • 间距属性 grid-column-gap和 grid-row-gap
    grid:<'grid-template'> | <'grid-template-rows'> / [ auto-flow && dense? ] <'grid-auto-columns'>? | [ auto-flow && dense? ] <'grid-auto-rows'>? / <'grid-template-columns'>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值