让前端飞JavaScript 进阶营

CSS Grid布局入门

2018-08-16  本文已影响0人  TaoLandd

相信大家都比较熟悉flex布局了,最近有空研究了波grid布局,感觉虽然兼容性还不是太高,应用不是太普遍,但是功能非常强大。未来应该是grid+flex为主流,grid是二维布局,很灵活,适合整体构架,而flex是一维布局,适合处理局部细节。

介绍

  <div class="grid_box">
    <div class="grid_item">1</div>
    <div class="grid_item">2</div>
    <div class="grid_item" id="item3">3</div>
    <div class="grid_item" id="item4">4</div>
    <div class="grid_item">5</div>
    <div class="grid_item">6</div>
    <div class="grid_item">7</div>
    <div class="grid_item">8</div>
    <div class="grid_item">9</div>
    <div class="grid_item">10</div>
    <div class="grid_item">11</div>
  </div>
  <span>邻居元素</span>

容器属性

display

    .grid_box {
      background: #054154;
      display: inline-grid;    //行级网络,和span处于一行
    }

    .grid_item {
      background: #0490db;
      border: 1px solid #fff;
    }
2.png
    .grid_box {
      background: #054154;
      display: grid;    //块级网络,将span挤入下一行
    }

    .grid_item {
      background: #0490db;
      border: 1px solid #fff;
    }
3.png

grid-template-columns / grid-template-rows

    .grid_box {
      background: #054154;
      width: 500px;
      height: 300px;
      display: grid;
      grid-template-rows: 60px auto 40px;
    }

    .grid_item {
      background: #0490db;
      border: 1px solid #fff;
    }

代表第一行高60px,第三行高40px,其他的所有行(不设置或者auto的行)平分剩余高度

4.png
    .grid_box {
      background: #054154;
      width: 500px;
      height: 300px;
      display: grid;
      grid-template-rows: 60px auto 40px;
      grid-template-columns: 30px 20px auto auto;
    }

    .grid_item {
      background: #0490db;
      border: 1px solid #fff;
    }

和行高类似,这个代表第一列宽30px,第二列宽20px,第三列第四列平分剩余宽度(和行高不同的是列宽是你设置了多少就会有多少列,列数量和你设置的是相同的)

5.png

grid-gap

    .grid_box {
      background: #054154;
      width: 500px;
      height: 300px;
      display: grid;
      grid-template-rows: 60px auto 40px;
      grid-template-columns: 30px 20px repeat(2,1fr);
      grid-gap: 2px 4px;   //行间距2px,列间距4px
    }

    .grid_item {
      background: #0490db;
      border: 1px solid #fff;
    }
6.png

一些语法糖

repeat

.grid_box {
    grid-template-columns: 30px 20px auto auto;
    grid-template-columns: 30px 20px repeat(2,auto);//等价于
}

fr

.grid_box {
    grid-template-columns: 30px 20px auto auto;
    grid-template-columns: 30px 20px 1fr 1fr;//等价于
    grid-template-columns: 30px 20px repeat(2,1fr);//也等价于
}

minmax

项目属性

grid-area

    .grid_box {
      background: #054154;
      width: 500px;
      height: 300px;
      display: grid;
      grid-template-rows: 60px auto 40px;
      grid-template-columns: 30px 20px repeat(2,1fr);
      grid-gap: 2px 4px;
    }

    .grid_item {
      background: #0490db;
      border: 1px solid #fff;
    }
    #item3{
      grid-area: 1 /1/ 2/ 4;
    }

grid-area: 1 /1/ 2/ 4;代表item3的位置是,行线1到2,列线1到4,这四条线组成的区域即是item3的位置,是不是很强大,太叼了这个

7.png

span,负数

    #item3{
      grid-area: 1 /1/ 2/ 4; 
      grid-area: 1 /1/ 2/ span 3;//等价
      grid-area: 1 /1/ 2/ -2;//等价
    }

order

    .grid_box {
      background: #054154;
      width: 500px;
      height: 300px;
      display: grid;
      grid-template-rows: 60px auto 40px;
      grid-template-columns: 30px 20px repeat(2,1fr);
      grid-gap: 2px 4px;
    }

    .grid_item {
      background: #0490db;
      border: 1px solid #fff;
    }
    #item3{
      grid-area: 1 /1/ 2/ 4;
      order: 1;
    }
    #item4{
      grid-area: 1 /1/ 2/ 4;
    }

因为item3有order,所以item3盖住了item4

8.png

命名

  <div class="grid_box">
    <div class="grid_item" id="header">header</div>
    <div class="grid_item" id="aside">aside</div>
    <div class="grid_item" id="content">content</div>
    <div class="grid_item" id="footer">footer</div>
  </div>
  <span>邻居元素</span>
    .grid_box {
      background: #054154;
      width: 500px;
      height: 300px;
      display: grid;
      grid-template-rows: 60px auto 40px;
      grid-template-columns: 30px 20px repeat(2,1fr);
      grid-gap: 2px 4px;
      grid-template-areas: "header header header header" "aside . content content" "footer footer footer footer";
    }

    .grid_item {
      background: #0490db;
      border: 1px solid #fff;
    }
    #header{
      grid-area: header;
    }
    #aside{
      grid-area: aside;
    }
    #content{
      grid-area: content;
    }
    #footer{
      grid-area: footer;
    }
9.png

是不是很强大

测试

最后

大家好,这里是「 TaoLand 」,这个博客主要用于记录一个菜鸟程序猿的Growth之路。这也是自己第一次做博客,希望和大家多多交流,一起成长!文章将会在下列地址同步更新……
个人博客:www.yangyuetao.cn
小程序:TaoLand

上一篇 下一篇

猜你喜欢

热点阅读