Grid
布局Grid
布局Grid
布局
容器属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 display : grid ;#行列 grid-template-columns 属性定义每一列的列宽grid-template-rows 属性定义每一行的行高#行列间距 grid-row-gap 属性设置行与行的间隔(行间距)grid-column-gap 属性属性设置列与列的间隔(列间距)grid-gap 属性是grid-column-gap 和grid-row-gap 的合并简写形式#区域 grid-template-areas 属性用于定义区域#网格顺序 grid-auto-flow 属性决定:先行后列 还是 先列后行#单元格顺序 justify-items 属性设置单元格内容的水平位置(左中右)align-items 属性设置单元格内容的垂直位置(上中下)place-items 属性是align-items 属性和justify-items 属性的合并简写形式。#内容区域在容器顺序 justify-content 属性是整个内容区域在容器里面的水平位置(左中右)align-content 属性是整个内容区域的垂直位置(上中下)place-content 属性是align-content 属性和justify-content 属性的合并简写形式#多余的网格 grid-auto-columns 属性用来设置,浏览器自动创建的多余网格的列宽grid-auto-rows 属性用来设置,浏览器自动创建的多余网格的行高#简写属性 grid-template 属性,grid 属性简写属性,不方便阅读,不在详细介绍
项目属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #项目的位置(四个边框) grid-column-start 属性:左边框所在的垂直网格线grid-column-end 属性:右边框所在的垂直网格线grid-row-start 属性:上边框所在的水平网格线grid-row-end 属性:下边框所在的水平网格线#xxx grid-column 属性是grid-column-start 和grid-column-end 的合并简写形式grid-row 属性是grid-row-start 属性和grid-row-end 的合并简写形式。#项目放在哪一个区域 grid-area 属性指定项目放在哪一个区域#单元格顺序 justify-self 属性设置单元格内容的水平位置(左中右),跟justify-items 属性的用法完全一致,但只作用于单个项目。align-self 属性设置单元格内容的垂直位置(上中下),跟align-items 属性的用法完全一致,也是只作用于单个项目。place-self 属性是align-self 属性和justify-self 属性的合并简写形式。
Grid 布局与Flex 布局有一定的相似性,都可以指定容器内部多个项目的位置。但是,它们也存在重大区别。
Flex 布局是轴线布局,只能指定”项目”针对轴线的位置,可以看作是一维布局 。Grid 布局则是将容器划分成”行”和”列”,产生单元格,然后指定”项目所在”的单元格,可以看作是二维布局 。Grid 布局远比 Flex 布局强大。
容器属性 列行 1 2 3 4 5 6 .container { display : grid; grid-template-columns : 100px 100px 100px ; grid-template-rows : 100px 100px 100px ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 .container { display : grid; grid-template-columns : 33.33% 33.33% 33.33% ; grid-template-rows : 33.33% 33.33% 33.33% ; } .container { display : grid; grid-template-columns : repeat (3, 33.33%); grid-template-rows : repeat (3, 33.33%); }
1 2 3 4 5 6 7 8 9 10 11 12 13 .container { display : grid; grid-template-columns : repeat (auto-fill, 100px); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .container { display : grid; grid-template-columns : 1 fr 2 fr; } .container { display : grid; grid-template-columns : 150px 1 fr 2 fr; }
1 2 3 4 grid-template-columns : 1fr 1fr minmax (100px , 1fr );
1 2 3 4 5 grid-template-columns : 100px auto 100px ;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 grid-template-columns 属性对于网页布局非常有用。两栏式布局只需要一行代码。.wrapper { display : grid; grid-template-columns : 70% 30% ; } .wrapper { display : grid; grid-template-columns : repeat (12, 1fr); }
列行间距 1 2 3 4 5 6 7 8 9 .container { grid-row-gap : 20px ; grid-column-gap : 20px ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 grid-gap : <grid-row-gap > <grid-column-gap >;.container { grid-gap : 20px 20px ; }
区域 1 2 3 4 5 6 7 8 9 .container { display : grid; grid-template-columns : 100px 100px 100px ; grid-template-rows : 100px 100px 100px ; grid-template-areas : 'a b c' 'd e f' 'g h i' ; }
1 2 3 4 5 grid-template-areas: 'a . c' 'd . f' 'g . i';
网格顺序 1 2 3 4 5 6 7 8 9 10 11 grid-auto-flow : column ;
单元格顺序 1 2 3 4 5 6 7 8 9 10 11 12 13 .container { justify-items : start | end | center | stretch; align-items : start | end | center | stretch; } #取值如下: start :对齐单元格的起始边缘。end :对齐单元格的结束边缘。center :单元格内部居中。stretch :拉伸,占满单元格的整个宽度(默认值)。
1 2 3 4 5 place-items : start end ;
内容区域在容器顺序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .container { justify-content : start | end | center | stretch | space-around | space-between | space-evenly; align-content : start | end | center | stretch | space-around | space-between | space-evenly; } #取值如下: start - 对齐容器的起始边框。end - 对齐容器的结束边框。center - 容器内部居中。stretch - 项目大小没有指定时,拉伸占据整个网格容器。space-around - 每个项目两侧的间隔相等。所以,项目之间的间隔比项目与容器边框的间隔大一倍。space-between - 项目与项目的间隔相等,项目与容器边框之间没有间隔。space-evenly - 项目与项目的间隔相等,项目与容器边框之间也是同样长度的间隔。
1 2 3 4 place-content : space-around space-evenly ;
多余的网格
项目属性 项目的位置(四个边框) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 <style > #container { display : grid; grid-template-columns : 100px 100px 100px ; grid-template-rows : 100px 100px 100px ; } .item { font-size : 4em ; text-align : center; border : 1px solid #e5e4e9 ; } .item-1 { background-color : #ef342a ; grid-column-start : 2 ; grid-column-end : 4 ; } </style> <h3>1号项目的左边框是第二根垂直网格线,右边框是第四根垂直网格线</h3> <div id="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 class="item item-7">7</div> <div class="item item-8">8</div> <div class="item item-9">9</div> </div>
项目放在哪一个区域 1 2 3 4 .item-1 { grid-area : e; }
本章实例demo 公用样式
1 2 3 4 5 6 7 8 9 10 11 <style > .item-1 {background-color : #ef342a ;} .item-2 {background-color : #f68f26 ;} .item-3 {background-color : #4ba946 ;} .item-4 {background-color : #0376c2 ;} .item-5 {background-color : #c077af ;} .item-6 {background-color : #f8d29d ;} .item-7 {background-color : #b5a87f ;} .item-8 {background-color : #d0e4a9 ;} .item-9 {background-color : #4dc7ec ;} </style>
demo1-1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <style > #container { display: grid; grid-template-columns: 100px 100px 100px; grid-template-rows: 100px 100px 100px; } .item { font-size: 4em; text-align: center; border : 1px solid #e5e4e9 ; } </style > <h3 > 三行三列的网格,列宽和行高都是100px</h3 > <div id ="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 class ="item item-7" > 7</div > <div class ="item item-8" > 8</div > <div class ="item item-9" > 9</div > </div >
demo1-2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <style > #container { display: grid; grid-template-columns: repeat(auto-fit, 100px); grid-template-rows: repeat(3, 100px); } .item { font-size: 4em; text-align: center; border : 1px solid #e5e4e9 ; } </style > <h3 > 每列宽度100px,然后自动填充,直到容器不能放置更多的列</h3 > <div id ="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 class ="item item-7" > 7</div > <div class ="item item-8" > 8</div > <div class ="item item-9" > 9</div > </div >
demo1-3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <style > #container { display: grid; grid-template-columns: 1fr 2fr; } .item { font-size: 4em; text-align: center; border : 1px solid #e5e4e9 ; } </style > <h3 > 就表示后者是前者的两倍</h3 > <div id ="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 class ="item item-7" > 7</div > <div class ="item item-8" > 8</div > <div class ="item item-9" > 9</div > </div >
demo2-1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <style > #container { display: grid; grid-template-columns: 100px 100px 100px; grid-template-rows: 100px 100px 100px; grid-row-gap: 20px; grid-column-gap: 20px; } .item { font-size: 4em; text-align: center; border : 1px solid #e5e4e9 ; } </style > <h3 > 行间距 和 列间距</h3 > <div id ="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 class ="item item-7" > 7</div > <div class ="item item-8" > 8</div > <div class ="item item-9" > 9</div > </div >
demo3-1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 <style > #container { display: grid; grid-template-columns: 100px 100px 100px; grid-template-rows: 100px 100px 100px; grid-auto-rows : 50px ; } .item { font-size: 2em; text-align: center; border : 1px solid #e5e4e9 ; } .item-8 { background-color : #d0e4a9 ; grid-row-start: 4; grid-column-start: 2; } .item-9 { background-color : #4dc7ec ; grid-row-start: 5; grid-column-start: 3; } </style > <h3 > 划分好的网格是3行 x 3列,但是,8号项目指定在第4行,9号项目指定在第5行</h3 > <div id ="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 class ="item item-7" > 7</div > <div class ="item item-8" > 8</div > <div class ="item item-9" > 9</div > </div >
demo4-1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 <style > #container { display: grid; grid-template-columns: 100px 100px 100px; grid-template-rows: 100px 100px 100px; grid-template-areas: 'a b c' 'd e f' 'g h i'; } .item { font-size: 4em; text-align: center; border : 1px solid #e5e4e9 ; } .item-1 { grid-area : e ; } </style > <h3 > 项目放在哪一个区域</h3 > <div id ="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 class ="item item-7" > 7</div > <div class ="item item-8" > 8</div > <div class ="item item-9" > 9</div > </div >
日历demo 日历: 显示的效果为: 四周12月份,中间显示信息内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 <div id ="container" > <div class ="item i-01" > 1</div > <div class ="item i-02" > 2</div > <div class ="item i-03" > 3</div > <div class ="item i-04" > 4</div > <div class ="item i-05" > 5</div > <div class ="item i-06" > 6</div > <div class ="item i-07" > 7</div > <div class ="item i-08" > 8</div > <div class ="item i-09" > 9</div > <div class ="item i-10" > 10</div > <div class ="item i-11" > 11</div > <div class ="item i-12" > 12</div > <div class ="item-body" > <div class ="center-title" > 日历:正月初一:春节</div > </div > </div > <style > #container { display: grid; grid-template-columns: repeat(4,100px); grid-auto-rows: 100px; /*grid-template-areas: "i-03 i-04 i-05 i-06" "i-02 ct-x ct-x i-07" "i-01 ct-x ct-x i-08" "i-00 i-11 i-10 i-09";*/ grid-template-areas: "fei-03 fei-04 fei-05 fei-06" "fei-02 ct-x ct-x fei-07" "fei-01 ct-x ct-x fei-08" "fei-00 fei-11 fei-10 fei-09"; } .item-body { font-size: 1em; text-align: center; border : 1px solid #e5e4e9 ; background-color : #ff6b81 ; grid-area : ct-x ; } </style > <style > .item { font-size: 2em; text-align: center; border : 1px solid #e5e4e9 ; } .i-01 {background-color : #ef342a ;} .i-02 {background-color : #f68f26 ;} .i-03 {background-color : #4ba946 ;} .i-04 {background-color : #0376c2 ;} .i-05 {background-color : #c077af ;} .i-06 {background-color : #f8d29d ;} .i-07 {background-color : #b5a87f ;} .i-08 {background-color : #d0e4a9 ;} .i-09 {background-color : #4dc7ec ;} .i-10 {background-color : #00ffff ;} .i-11 {background-color : #90ee90 ;} .i-12 {background-color : #dda0dd ;} </style >
其他 峰: Grid 网格布局教程