一些关于 grid 的笔记

声明栅格系统的容器

.box {
    /* 如果想作为块级元素 */
    display: grid;
    /* 如果想作为行内块元素 */
    display: inline-grid;
    /* 设置每列 */
    grid-template-rows:
        /* 第一种写法: 10px 10px 10px 10px //设置每个块占多大 */
        /* 第二种写法: 25% 25% 25% 25% */
        /* 第三种写法: repeat(4, 25%) */
        /* 第三种写法延伸:repeat(2, 100px 50px) //将100px和50px重复两遍 */
        /* 第三种写法延伸:repeat(auto-fill, 100px) //以100px自动填充 */
        /* 第四种写法:repeat(3,1fr) //填充3块,平均分配 */
     /* 设置每行 */
    grid-template-columns: 写法同上
}
.content {
    background: blueviolet;
    background-clip: content-box;
    box-sizing: border-box;
    border: solid 1px blueviolet;
    padding: 10px;
}

控制栅格尺寸范围

.box {
    ...
    grid-template-rows: repeat(2,minmax(50px,100px))
}

用栅格间距控制留白

.box {
    ...
    row-gap: 10px;
    column-gap: 10px;
    /* 简写 */
    gap: 20px 10px;
}

根据栅格线编号放置元素

div:first-child {
  grid-row-start: 1;
  grid-column-start: 1;
  grid-column-end: 4;
  grid-row-end: 4;
}

栅格固定命名放置元素

.box {
  grid-template-rows: [r1-start] 100px [r1-end r2-start] 100px [r2-end r3-start] 100px [r3-end];
}
.content {
  grid-row-start: r1-start; /* 以此类推 */
}

更简洁的 repeat 写法:

.box {
  grid-template-rows: repeat(3, [r-start] 1fr [r-end]);
}
.content {
  grid-row-start: r-start 1; /* 第一行的开始 */
  grid-column-start: c-start 2; /* 以此类推 */
}

偏移量控制元素定位

div:first-child {
  grid-column-end: span 3; /* 相对start偏移3个格子 */
}

偏移量简写

div:first-child {
  grid-row: 3/4;
  /* 相当于start是3,end是4 */
  grid-column: 1 / span 3;
}

用栅格区域

div:first-child {
  grid-area: 2/2/3/3; /* 上左下右 */
}

栅格区域命名

.box {
  width: 100vw;
  height: 100vh;
  display: grid;
  grid-template-rows: 60px 1fr 60px; /* 三行 */
  grid-template-columns: 60px 1fr; /* 两列 */
  grid-template-areas:
    'header header' /* 第一行两个区域名字 */
    'nav main' /* 以此类推 */
    'footer footer';
}
.content {
  grid-area: header; /* 用命名的栅格区域 */
}

使用区域占位符,简化栅格区域命名

.box {
  width: 100vw;
  height: 100vh;
  display: grid;
  grid-template-rows: 60px 1fr 60px; /* 三行 */
  grid-template-columns: 60px 1fr; /* 两列 */
  grid-template-areas:
    '. .' /*用两个点占位 */
    '. .'
    'footer footer'; /*在想要合并的区域命名 */
}
.content {
  grid-area: header; /*用命名的栅格区域 */
}

栅格流动处理机制

栅格排布顺序

.box {
    ..
    grid-auto-flow: column; /* 一列一列地排列元素。默认为row */
}

让后面的元素填补前面元素因为定位留出的空白

.box {
  grid-auto-flow: dense; /* 不填,默认是不会补全 */
}

栅格对齐布局

栅格整体对齐

分开

用 justify-content 和 align-content

组合

place-content:center space-evently
第一个是 align,第二个是 justify

栅格内部所有元素的对齐

分开

justify-items 和 align-items

组合

place-items

栅格内部单个元素对齐

在要控制的单个元素的 css 样式里设置

分开

justify-self 和 align-self

组合

place-self