CSS Grid 网格布局-容器属性

代码地址

一. display: grid

<span>foo</span>
<div class="box">
  <div class="item"><p>1</p></div>
  <div class="item"><p>2</p></div>
  <div class="item"><p>3</p></div>
</div>
<span>bar</span>

指定一个容器(box)采用网格布局。容器的直接子元素(item)为项目

.box {
  display: grid;
}

在这里插入图片描述
也可以使用grid的同时将元素设置为行内元素

.box {
  display: inline-grid;
}

在这里插入图片描述

二. grid-template-columns、grid-template-rows

容器指定了网格布局以后,接着就要划分行和列。

grid-template-columns属性定义每一列的列宽。

grid-template-rows属性定义每一行的行高。

它的值以及详细用法如下:

<div class="box">
    <div class="item">
      <p>1</p>
    </div>
    <div class="item">
      <p>2</p>
    </div>
    <div class="item">
      <p>3</p>
    </div>
    <div class="item">
      <p>4</p>
    </div>
    <div class="item">
      <p>5</p>
    </div>
    <div class="item">
      <p>6</p>
    </div>
    <div class="item">
      <p>7</p>
    </div>
    <div class="item">
      <p>8</p>
    </div>
    <div class="item">
      <p>9</p>
    </div>
    <div class="item">
      <p>10</p>
    </div>
    <div class="item">
      <p>11</p>
    </div>
    <div class="item">
      <p>12</p>
    </div>
    <div class="item">
      <p>13</p>
    </div>
    <div class="item">
      <p>14</p>
    </div>
    <div class="item">
      <p>15</p>
    </div>
    <div class="item">
      <p>16</p>
    </div>
    <div class="item">
      <p>17</p>
    </div>
    <div class="item">
      <p>18</p>
    </div>
    <div class="item">
      <p>19</p>
    </div>
    <div class="item">
      <p>20</p>
    </div>
    <div class="item">
      <p>21</p>
    </div>
    <div class="item">
      <p>22</p>
    </div>
    <div class="item">
      <p>23</p>
    </div>
    <div class="item">
      <p>24</p>
    </div>
  </div>
.box {
  display: grid;
  /* 绝对单位 */
  grid-template-columns: 100px 100px 100px;
  grid-template-rows: 100px;

  /* 百分比 */
  grid-template-columns: 33.333% 33.333% 33.333%;
  grid-template-rows: 100px;

  /* repeat(重复的次数, 重复的值) */
  grid-template-columns: repeat(3, 100px);
  grid-template-rows: repeat(1, 100px);

  /* repeat(重复的次数, 重复的模式) */
  grid-template-columns: repeat(3, 100px 120px);
  grid-template-rows: repeat(2, 50px 100px);

  /* auto-fill 关键字, 自动填充, 实现N个相同的正方形填满容器 */
  height: 500px;
  grid-template-columns: repeat(auto-fill, 100px);
  grid-template-rows: repeat(auto-fill, 100px);

  /* fr 关键字, 比例关系, 实现双飞翼布局 */
  grid-template-columns: 200px 1fr;
  grid-template-rows: 100px;

  /* minmax(最小值, 最大值) */
  grid-template-columns: 1fr 1fr minmax(100px, 1fr);
  grid-template-rows: 100px;

  /* auto 关键字 表示由浏览器自己决定长度。圣杯布局 */
  grid-template-columns: 100px auto 100px;
  grid-template-rows: 100px;

  /* 网格线的名称 */
  /* 上面代码指定网格布局为3行 x 3列,因此有4根垂直网格线和4根水平网格线。*/
  /* 方括号里面依次是这八根线的名字。网格布局允许同一根线有多个名字,比如[fifth-line row-5]。 */
  grid-template-columns: [c1] 100px [c2] 100px [c3] auto [c4 列4];
  grid-template-rows: [r1] 100px [r2] 100px [r3] auto [r4];
}

.box > .item:nth-of-type(1) {
  background-color: aqua;
}
.box > .item:nth-of-type(2) {
  background-color: salmon;
}
.box > .item:nth-of-type(6) {
  background-color: brown;
}
.box > .item:nth-of-type(9) {
  background-color: blueviolet;
}
.box > .item:nth-of-type(16) {
  background-color:tomato;
}
.box > .item:nth-of-type(19) {
  background-color:yellowgreen;
}

三. grid-gap

<div class="box">
 <div class="item">1</div>
 <div class="item">2</div>
 <div class="item">3</div>
 <div class="item">4</div>
 <div class="item">5</div>
 <div class="item">6</div>
 <div class="item">7</div>
 <div class="item">8</div>
 <div class="item">9</div>
</div>
.box {
  background-color: #daa520;
  
  display: grid;
  grid-template-columns: repeat(3, 100px);
  grid-template-rows: repeat(3, 100px);
  /* 列间距 */
  /* grid-column-gap: 12px; */
  /* 行间距 */
  /* grid-row-gap: 12px; */
  /* 简写 grid-gap: <grid-row-gap> <grid-column-gap>; */
  /* 根据最新标准,上面三个属性名的grid-前缀已经删除 */
  /* grid-column-gap和grid-row-gap写成column-gap和row-gap,grid-gap写成gap */
  grid-gap: 12px 24px;
}

.box .item {
  background-color: #ccc;
}

在这里插入图片描述

四. grid-template-areas

<div class="box">
	<div class="item">1</div>
	<div class="item">2</div>
	<div class="item">3</div>
	<div class="item">4</div>
	<div class="item">5</div>
	<div class="item">6</div>
	<div class="item">7</div>
	<div class="item">8</div>
	<div class="item">9</div>
</div>
.box {
   display: grid;
   grid-template-columns: repeat(3, 100px);
   grid-template-rows: repeat(3, 100px);

   /* grid-template-areas属性用于定义区域。 */
   /* grid-template-areas: 'tl tc tr''cl cc cr''bl bc br'; */
   /* 多个单元格合并成一个区域的写法如下。 */
   /* grid-template-areas: 'a a a''b b b''c c c'; */
   /* 如果某些区域不需要利用,则使用"点"(.)表示。*/
   grid-template-areas: 'a . c''d . f''g . i';
 }

 .box .item {
   background-color: #ccc;
 }

在这里插入图片描述

五. grid-auto-flow

<div class="box">
  <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>
.box {
  display: grid;
  grid-template-columns: repeat(3, 100px);
  grid-template-rows: repeat(3, 100px);
  
  /* 划分网格以后,容器的子元素会按照顺序,自动放置在每一个网格。*/
  /* 默认的放置顺序是"先行后列",即先填满第一行,再开始放入第二行 */
  /* grid-auto-flow: row; */
  /* 这个顺序由grid-auto-flow属性决定,默认值是row,即"先行后列"。也可以将它设成column,变成"先列后行"。 */
  /* grid-auto-flow: column; */

  /* 某些项目(item-1 item-2)指定位置以后,剩下的项目怎么自动放置 */
  /* 现在修改设置,设为row dense,表示"先行后列",并且尽可能紧密填满,尽量不出现空格。 */
  /* grid-auto-flow: row dense; */

  /* 如果将设置改为column dense,表示"先列后行",并且尽量填满空格。 */
  grid-template-columns: repeat(4, 100px);
  grid-auto-flow: column dense;
}

.item {
  font-size: 4em;
  text-align: center;
  border: 1px solid #e5e4e9;
}

.item-1 {
  background-color: #ef342a;
  grid-column-start: 1;
  grid-column-end: 3;  
}

.item-2 {
  background-color: #f68f26;
  grid-column-start: 1;
  grid-column-end: 3; 
}

.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;
}

在这里插入图片描述

六. place-items

<div class="box">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
  <div class="item">8</div>
  <div class="item">9</div>
</div>

<!-- --------水平垂直居中--------- -->
<div class="aaa">
  <div class="bbb"></div>
</div>
<!-- --------水平垂直居中--------- -->
.box {
  display: grid;
  grid-template-columns: repeat(3, 100px);
  grid-template-rows: repeat(3, 100px);

  /* justify-items属性设置单元格内容的水平位置(左中右) */
  /* align-items属性设置单元格内容的垂直位置(上中下)。 */
  /* 可选值: start | end | center | stretch(默认) */
  justify-items: center;
  align-items: center;
  /* place-items属性是align-items属性和justify-items属性的合并简写形式。 */
  place-items: start end;
  /* 如果省略第二个值,则浏览器认为与第一个值相等。 */
  place-items: center;
}

.box .item {
  width: 40px;
  height: 40px;
  line-height: 40px;
  text-align: center;
  background-color: #ccc;
}
/* 水平垂直居中 */
.aaa {
  width: 100px;
  height: 100px;
  display: grid;
  place-items: center;
  background-color: #999;
}
.bbb {
  width: 50px;
  height: 50px;
  background-color: bisque;
}

在这里插入图片描述

七. place-content

 <div class="box">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
  <div class="item">8</div>
  <div class="item">9</div>
</div>
.box {
 display: grid;
 grid-template-columns: repeat(3, 100px);
 grid-template-rows: repeat(3, 100px);

 /* justify-content属性是整个内容区域在容器里面的水平位置(左中右) */
 /* align-content属性是整个内容区域的垂直位置(上中下) */
 /* 可选值 start | end | center | stretch | space-around | space-between | space-evenly */
 justify-content: center;
 height: 500px;
 background-color: beige;
 align-content: center;

 /* space-around - 每个项目两侧的间隔相等, 所以,项目之间的间隔比项目与容器边框的间隔大一倍。 */
 justify-content: space-around;

 /* space-evenly - 项目与项目的间隔相等,项目与容器边框之间也是同样长度的间隔。 */
 justify-content: space-evenly;

 /* place-content属性是align-content属性和justify-content属性的合并简写形式。 */
 /* 如果省略第二个值,浏览器就会假定第二个值等于第一个值。 */
 place-content: end;
 
}

.box .item {
 width: 40px;
 height: 40px;
 line-height: 40px;
 text-align: center;
 background-color: #ccc;
}

在这里插入图片描述

八. grid-auto-columns、grid-auto-rows

<div class="box">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
  <div class="item">8</div>
  <div class="item">9</div>
  <div class="item">10</div>
  <div class="item">11</div>
  <div class="item">12</div>
  <div class="item">13</div>
</div>
.box {
  display: grid;
  grid-template-columns: repeat(3, 100px);
  grid-template-rows: repeat(3, 100px);

  /* 有时候,一些项目的指定位置,在现有网格的外部。*/
  /* 比如网格只有3列,但是某一个项目指定在第5行。这时,浏览器会自动生成多余的网格,以便放置项目。 */
  /* grid-auto-columns属性和grid-auto-rows属性用来设置,浏览器自动创建的多余网格的列宽和行高 */
  /* 剩余项目的grid-auto-columns、grid-auto-rows与grid-auto-flow有关 */
  grid-auto-flow: column;
  grid-auto-columns: 200px 100px 100px;/* grid-auto-flow: row;时失效 */
  grid-auto-rows: 200px 100px 100px;  /* grid-auto-flow: column;时失效 */
  
}

.box .item {
  background-color: #ccc;
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值