当前位置: 首页 > Web前端 > CSS

CSS基础--快速使用CSSGrid布局实现响应式设计

时间:2023-03-30 14:10:36 CSS

常用Grid布局属性介绍让我们从一个简单的Grid布局例子开始。CSSGrid布局由两个核心组件wrapper(父元素)和items(子元素)组成。wrapper是实际的网格(grid),items是网格(grid)的内容。下面是一个wrapper元素,里面包含6个item:

1
2
3
4
5
6
要将包装元素变成网格(grid),只需将其显示属性设置为grid:.wrapper{display:grid;}列(columns)和行(rows)要使它成为二维网格容器,我们需要定义列和行。让我们创建3列和2行。我们将使用grid-template-row和grid-template-column属性。.wrapper{显示:网格;网格模板列:100px100px100px;grid-template-rows:50px50px;}grid-template-columns的三个值表示三列,对应的值表示列宽为100px。grid-template-rows的2个值代表两行,对应的值代表行高为50px。结果如下:我们可以改变行高和列宽看看效果。代码:.wrapper{显示:网格;网格模板列:200px50px100px;grid-template-rows:100px30px;}效果如图:我们使用和之前一样的HTML标记来放置items(子元素),为了帮助我们更好的理解,我们为每个添加了一个单独的类项目(子元素):1
2
3
456创建一个3×3网格(grid):.wrapper{display:grid;网格模板列:100px100px100px;grid-template-rows:100px100px100px;}得到如下效果:我们在页面上只看到3×2的网格(grid),而我们定义的是3×3的网格(grid)。这是因为我们只有6个项目(孩子)来填充网格。如果我们再添加3个项目(孩子),那么最后一行也将被填充。要定位和调整项目(子元素)的大小,我们将使用grid-column和grid-row属性来设置:.item1{grid-column-start:1;grid-column-end:4;}当然可以简写:.item1{grid-column:1/4;}上面代码的意思是:item1从第一条网格线开始,到第四条网格线结束。显示效果如下:不明白我们只有3列,为什么有4条网格线?看下图,黑色的柱状网格线就可以看懂了:如果你看懂了上面的内容,我们来巩固一下比较复杂的点。.item1{网格列开始:1;grid-column-end:3;}.item3{grid-row-start:2;grid-row-end:4;}.item4{grid-column-start:2;grid-column-end:4;}效果如图:响应式布局实例实现如图效果:structurelayoutHEADERMENUCONTENTFOOTER使用grid-template-columns属性创建一个12列的网格,每列都是一个单位宽(总宽度的1/12)。(愚人码头注:其中repeat(12,1fr)表示重复12个1fr值。fr是网格容器剩余空间的等量单位。)使用grid-template-rows属性创建3行,第一行高50px,第二行高350px,第三行高50px。使用grid-gap属性在网格中的项目之间添加间隙。添加属性grid-template-areas称为网格区域,也称为模板区域,可以方便我们进行布局实验。要将其添加到网格,我们只需将grid-template-areas属性添加到网格容器。语法可能有点奇怪,因为它不像其他CSS语法。例如:.container{显示:网格;网格间隙:5px;网格模板列:重复(12、1fr);网格模板行:50px350px50px;grid-template-areas:"hhhhhhhhhhhh""mmccccccccccc""ffffffffffffff";}上面代码创建了3行12列,上面grid-template-areas属性中的值,每一行代表一行,就是一个gridtrack(GridTrack)在网格方面,每个字符(h,m,c,f)代表一个网格单元。Fool'sWharf注意:其实就是GridArea的名字,可以随便取。您可能已经猜到了,我选择了h、m、c、f字符,因为它们是页眉、菜单、内容和页脚的首字母。当然,我可以随心所欲地称呼它们,但是使用它们所描述内容的第一个字符更容易理解。将网格区域名称分配给网格项现在我们需要将这些字符与网格中的网格项相关联。为此,我们将在网格项上使用grid-area属性:.header{grid-area:h;}.menu{grid-area:m;}.content{grid-area:c;}.footer{grid-area:f;}这样就实现了上面的布局效果。尝试其他布局1.将菜单移动到右侧的网格模板区域:“hhhhhhhhhhhh”“ccccccccccmm”“ffffffffffff”;实现后的效果:2.用点创建空白网格单元格grid-template-areas:".哈哈哈哈哈哈哈哈哈哈。”“cccccccccmm”“。然后你可以简单地这样做:@mediascreenand(max-width:640px){.container{grid-template-areas:"mmmmmhhhhhhh""ccccccccccccc""ffffffffffff";}}可以看到如下效果:注意:所有这些改动都是使用纯CSS完成的,不需要修改HTML。这就是所谓的结构与表现分离,Grid(网格)布局就是真正做到了这一点。BrowserCompatibility如图:参考地址5分钟学会CSSGrid布局如何使用CSSGrid进行快速灵活的布局CSSGrid布局完全指南(图文Grid详细教程)