Skip to content

你给我这辆车没方向盘 我可控制不了方向

栅格流动方向

默认我们的流动方向是 从左到右 从上到下

我们可以使用一个属性 改变它的流动方向

css
.row {
            height: 100%;
            display: grid;
            grid-template-columns: repeat(5,1fr);
            grid-template-rows: repeat(5,1fr);
            grid-auto-flow: column;
        }
.row > div:nth-child(1){
           
            grid-column: 2/span 2; 
      }

我们可以使用 grid-auto-flow 把grid修改为纵向流动

image-20240430090421559

可以看到 2和3不再向右流动 开始向下流动

空间自动填满

css
.row {
            height: 100%;
            display: grid;
            grid-template-columns: repeat(5,1fr);
            grid-template-rows: repeat(5,1fr);
            grid-auto-flow: row ;
        }
      .row > div:nth-child(2){
           
            grid-column: 1/span 5; 
      }

image-20240430090726594

因为 第二个元素需要span5个网格 但是第一行放不下 直接跑到了第二行 导致第一个格子右边出现了未使用的空网格 这时候我可以使用 dense填满没使用的网格

css
.row {
            height: 100%;
            display: grid;
            grid-template-columns: repeat(5,1fr);
            grid-template-rows: repeat(5,1fr);
            grid-auto-flow: row dense;
        }
      .row > div:nth-child(2){
           
            grid-column: 1/span 5; 
      }

image-20240430091016857

可以看到3自动跑到上面去了

栅格整体的对齐方式

当网格的宽度和高度都小于整个容器 可以使用 justify-content 或者 align-content 来控制容器内网格的位置

css
  .header{
            height: 500px;
            width: 500px;
            margin: 0 auto;
            background: pink;
        }
        .row {
            height: 100%;
            display: grid;
            grid-template-columns: repeat(3,100px);
            align-content: center;
           justify-content: center;
            /* grid-template-rows: repeat(5,1fr);
            grid-auto-flow: row dense; */
        }

外边容器宽度为 宽高都为 500px 但是我只有三列 每列100px

image-20240430095956656

栅格内网格的对齐方式

在我们正常使用栅格布局的时候 网格里面的元素不给宽高 默认是撑满的

image-20240430100501966

如图所示 我并没有给网格里面的元素设置宽高

我们可以使用justify-items 设置水平轴的位置

垂直使用 align-items设置

css
 .header{
            height: 500px;
            width: 500px;
            margin: 0 auto;
            background: pink;
        }
        .row {
            height: 100%;
            display: grid;
            grid-template-columns: repeat(4,1fr);
            justify-items: center;
            align-items: center;
            /* grid-template-rows: repeat(5,1fr);
            grid-auto-flow: row dense; */
        }

image-20240430102335572

设置网格内的元素全部居中显示

单独对某个网格进行控制

假如我并不想对所有网格进行控制 只是想控制某1个格子 可以使用 align-self 或者justify-self来进行控制

css
      .row {
            height: 100%;
            display: grid;
            grid-template-columns: repeat(4,1fr);
            /* justify-items: center;
            align-items: center; */
            /* grid-template-rows: repeat(5,1fr);
            grid-auto-flow: row dense; */
        }
      .row > div:nth-child(2){
           align-self: center;
           justify-self: center;
         
      }

image-20240430102924566

在上面的例子中 我们仅仅对第二个格子做了对齐的操作