概念篇
学完了概念好像没啥用。今天咱们来使用Grid完成两个简单布局。css
display: grid;
或display: inline-grid;
或display: subgrid;
。grid 和 inline-grid 很好理解就是块级网格及行内块级网格。subgrid 是用来定义子网格,子网格会继承父网格的一系列规格。html
定义横、纵网格轨道。此处咱们尝试定义一个4 * 4的网格。codesegmentfault
<div class="grid"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div>
.grid { display: grid; grid-template-columns: 60px 60px 60px 60px; grid-template-rows: 60px 60px 60px 60px; grid-gap: 5px; } .grid > div { background: grey; /*你们不要被下面的代码迷惑,只是为了好看,哈哈*/ display: flex; color: #fff; font-size: 150%; justify-content: center; align-items: center; }
grid-template-columns用来定义网格列的宽度既轨道宽度,代码表示将容器划分为4列,列的宽度都为60px,宽度能够随意的更改。布局
grid-template-rows用来定义网格行的高度,代码表示将容器划分4个行。经过以上两行代码就实现了4 * 4的网格划分了。不信,增长几个div数试一下。flex
grid-gap
用来控制网格的间距的,准确地说是用来控制网格区域的间距。flexbox
到目前为止,咱们的 css 好像都做用在了容器上,那么如何来点儿高级的东西呢?codespa
<div class="grid"> <div class="item1">1</div> <div class="item2">2</div> <div class="item3">3</div> <div class="item4">4</div> <div class="item5">5</div> <div class="item6">6</div> </div>
.grid { display: grid; grid-template-columns: 60px 60px 60px 60px; grid-template-rows: 60px 60px 60px 60px; grid-gap: 5px; } .grid > div { background: grey; /*你们不要被下面的代码迷惑,只是为了好看,哈哈*/ display: flex; color: #fff; font-size: 150%; justify-content: center; align-items: center; } .item1 { grid-column-start: 4; grid-row-start: 2; } .item2 { grid-column-start: 1; grid-column-end: 4; grid-row-start: 1; grid-row-end: 3; } .item3 { grid-column: -1 / -2; grid-row: 1 / 2; } .item4 { grid-column: 1 / span 2; grid-row: -1 / -3; } .item5 { grid-area: -1 / 3 / -3 / 4; } .item6 { grid-area: -1 / 5 / -3 / 4; }
咱们在概念篇中讨论过,网格线是有编号的一、二、三、4...。要控制网格区域的位置就须要依赖于这这些网格线。下面经过5个例子讲解如何经过控制网格线来实现区域的定位及单元格合并。code
grid-column-start
& grid-row-start
grid-column-start
grid-row-start
用来控制区域的列开始和行开始的位置,请注意这里咱们并无给出 grid-column-end
和grid-row-end
的值,他们的默认值能够简单理解为 start 的值加一。其实这里有个span
的概念。htm
.item1 { grid-column-start: 4; grid-row-start: 2; }
grid-column-end
& grid-row-end
有开始确定就有结束,grid-column-end
,grid-row-end
是用来控制区域结束位置。这里有个知识点须要你们记住,✍️end 的值是能够小余 start 的值的,不信你试试。还有grid-column-start
、grid-column-end
、grid-row-start
、grid-row-end
的值均可以取负数的,负数意味着从后往前数✍️。blog
.item2 { grid-column-start: 1; grid-column-end: 4; grid-row-start: 1; grid-row-end: 3; }
grid-column
& grid-row
grid 的相关属性这么多,确定会有简写。grid-column
是grid-column-start
和grid-column-end
的简写。grid-row
同理。
.item3 { grid-column: -1 / -2; grid-row: 1 / 2; } // 等价于 .item3 { grid-column-start: -1; grid-column-end: -2; grid-row-start: 1; grid-row-end: 2; }
span
表示横跨几个单元格。功能就是当你你不肯意一直数数时,就可使用span。下面向你们展现区域定义的4种写法。
.item4 { /* 1 */ grid-column: 1 / span 2; /* 2 */ grid-column: span 2 / 3; /* 3 */ grid-column-start: 1; grid-column-end: span 2; /* 4 */ grid-column-start: span 2; grid-column-end: 3; /*row 也同样的*/ grid-row: -1 / -3; }
grid-area
grid-area
是grid-row
和grid-column
的简写。顺序是grid-row-start
,grid-column-start
,grid-row-end
,grid-column-end
。
.item5 { grid-area: -1 / 3 / -3 / 4; } // 等同于 .item { grid-row-start: -1; grid-row-end: -3; grid-column-start: 3; grid-column-end: 4; }
此处留一个思考题:grid-area
里面可使用 span
吗??
本文但愿你们能够掌握定义容器和轨道的方法和划分网格区域的n种写法。
推荐你们到cssgridgarden上练习一下,加深对 grid属性的记忆。grid概念理解完以后就是考验你们的记忆功力了。
欢迎你们指正批评、或留言。QQ群:538631558