Grid布局

grid基础

grid布局将页面以行(row)和列(column)为坐标将页面划分成任意以块为单位的布局。可实现如下图所示布局。

该布局的设计思路:

<head>
  <title>Using CSS Grid</title>
  <style>
    body {
      color: #fff;
      font-family: 'Nunito Semibold';
      text-align: center;
    }

    #content {
      display: grid;  //将元素设置为grid布局的容器
      /* grid-template-columns: 30% 20% 50%; */  //将列划分为三个长度分别位元素宽度的30%,20%,50%的区域
      /* grid-template-columns: repeat(3, 1fr); */  //将列划分为三个长度相等的区域
      grid-template-columns: 1fr 2fr; //将列划分为两个长度比为1:2的区域
      grid-auto-rows: minmax(150px, auto);  //设置每行的宽度最小值为150px,最大值为auto
      max-width: 960px;
      margin: 0 auto;
    }

    #content>* {
      padding: 10px;
    }

    header {
    	//将header设置为列横跨两个区域的子元素(此时的长度为最小值150px)
      grid-column: span 2;
      background: #3bbced;
    }

    main {
    	//在设置容器的列划分为两块时,相当于有三条线将容器分割,即以分割线为基准出现了三个对应列位置
      grid-column: 2 / 3; //将main元素的开始位置和结束位置分别设置为2和3
      grid-row: 2 / 4;  //header的上下边界分别为容器行位置的1和2,将main的行的开始和结束位置放在2和4(即表示main跨越了两个行区域)
      background: #e82b69;
    }

    aside {
      grid-column: 1 / 2;  //将aside元素的开始结束位置分别设置为1和2则会自动填充到main左侧的第一行位置
      background: #fac24a;
    }

    nav {
      grid-column: 1 / 2;  //将nav元素的开始结束位置分别设置为1和2则会自动填充到main左侧的第二行位置
      background: #8ae348;
    }

    footer {
      grid-column: span 2;
      background: #a56dda;
    }
  </style>
</head>

<body>

  <div id="content">

    <header>Header</header>

    <main>Main</main>

    <aside>Aside</aside>

    <nav>Nav</nav>

    <footer>Footer</footer>

  </div>

</body>

该布局将id为content的div设置成容器划分成如下网格:

grid-template-columns/rows:

设置容器的行、列的分布形式

grid-template-columns: 30% 20% 50%;
grid-template-columns: repeat(3, 1fr);
grid-template-columns: 1fr 2fr;

grid-template-areas:

1.给每个区域命名

grid-template-areas: 
      "header header header header"  //第一行的四个网格都被命名为header
      "aside aside main main"
      "nav nav main main"
      "section section section section"
      "section section section section"
      "footer footer footer footer";

2.给对应的元素设置所在的网格区域

header{
  grid-area: header;
}
main {
  grid-area: main;
}
section {
  grid-area: section;
}

grid-auto-rows/columns

自动创建的空网格的长宽

grid-auto-rows: minmax(150px, auto);
grid-auto-rows: 150px;

grid-column/row (grid-column-start/end):

设置该元素在网格中的开始与结束位置(以列为例,1即为从构成列的所有竖线中从作数第一根,行为从上到下)

grid-column-start: 2;
grid-column-end: 3;
grid-column: 2 / 3; //(sart/end)

grid-gap:

设置元素间的空隙

grid-row-gap: 10px;
grid-column-gap: 10px;
grid-gap: 10px;

可在grid布局里嵌套grid布局

水平、垂直对齐

justify/align-self

设置网格内容的位置

 justify-self: end; //水平
 align-self: end;  //垂直
 //place-self: center (justify,align)

(start | end | center | stretch )

justify/align-content

整个表格内容在容器里的位置

justify-content: start;
align-content: start;
//place-content: center; (align,justify)

(start | end | center | stretch | space-around | space-between | space-evenly)

马赛克布局(mosaic-layout)

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    body{
    color: #fff;
    font-family: 'Nunito Semibold';
    text-align: center;
    background: #3bbced;
    }
    #content{
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    grid-auto-rows: minmax(150px, auto);
    grid-gap: 10px;
    max-width: 960px;
    margin: 0 auto;
    }
    #content div{
    background: #333;
    padding: 30px;
    }
    .one {
      grid-column: 1 / 3;
      grid-row: 1 / 5;
    }
    .two {
      grid-column: 3 / 7;
      grid-row: 1 / 3;
    }
    .three {
      grid-column: 3 /5;
      grid-row: 3 / 5;
    }
    .four {
      grid-column: 5 /7;
      grid-row: 3 / 7;
    }
    .five {
      grid-column: 1 / 5;
      grid-row: 5 / 7;
    }
    #content {
      transform: rotateZ(45deg) scale(0.7);
    }
  </style>
</head>
<body>
  <div id="content">
    <div class="one">1</div>
    <div class="two">2</div>
    <div class="three">3</div>
    <div class="four">4</div>
    <div class="five">5</div>
  </div>
</body>

posted @ 2020-09-05 17:25  心血来潮做点吃的  阅读(246)  评论(0编辑  收藏  举报