grid布局教程

开启布局

.grid {
    display: grid;
}

特点:grid布局的直接子元素默认是grid元素

行列控制

指定列

死宽度

.grid {
  display: grid;
  grid-template-columns: 100px 100px 100px; /*设定排列和大小*/
}

浮动宽度

.grid {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr; /*设定排列和大小*/
}

fr是grid特有的浮动宽度,会自动占满剩余空间

多行列指定

.grid {
    /*相当于输入12个50px 即12列*/
	grid-template-columns: repeat(12, 50px);
}

指定行

.grid {
    /*相当于输入12个50px 即12列 原理和行列相同*/ 
	grid-template-rows: repeat(12, 50px);
}

默认指定

grid-auto-rows: 100px; // 没有指定会默认100px行高 
grid-auto-rows: auto; //auto是根据元素大小自动分配

关键词

grid-template-rows: repeat(auto-fill, 50px); // 内容会自动填充,空间小于50px自动换行

设置最小最大值

grid-template-rows: repeat(auto-fill, minmax(150px, 1fr); //最小列150px 最大1fr浮动

元素间距

设定元素间距

.grid {
  display: grid;
  /*设定排列和大小*/
  grid-template-columns: 1fr 1fr 1fr;
  /*设定列间距*/
  column-gap: 24px;
  /*设定行间距*/
  row-gap: 24px;
  /*统一设置行列间距*/
  gap: 24px
}

排列元素

手动定义网格

image-20230309165838840

如设置这样的布局可以用 grid-template-areas属性

.layout {
    grid-template-areas:
        "header header header"
        "sidebar content content"
        "footer footer footer";
}

各个元素分别指定对应区域

例子

<template>
    <div class="grid">
        <div class="header">
            这是头部这是头部这是头部这是头部这是头部这是头部
        </div>

        <div class="aside">
            这是侧边栏<br>
            这是侧边栏<br>
            这是侧边栏<br>
            这是侧边栏<br>
        </div>

        <div class="main">
            这是主要内容这是主要内容这是主要内容这是主要内容这是主要内容<br>
            这是主要内容这是主要内容这是主要内容这是主要内容这是主要内容<br>
            这是主要内容这是主要内容这是主要内容这是主要内容这是主要内容<br>
            这是主要内容这是主要内容这是主要内容这是主要内容这是主要内容<br>
            这是主要内容这是主要内容这是主要内容这是主要内容这是主要内容<br>
            这是主要内容这是主要内容这是主要内容这是主要内容这是主要内容<br>
        </div>

        <div class="footer">
            这是页脚这是页脚这是页脚这是页脚这是页脚这是页脚
        </div>
    </div>
</template>
  
<script setup lang='ts'>
import { ref, reactive } from 'vue'

</script>
<style scoped lang="less">
.grid {
    display: grid;
    height: 100%;
    width: 100%;
    grid-template-areas:/*需在父元素指定*/
        "header header header"
        "sidebar content content"
        "footer footer ."; /*.可以当做占位符*/
}

.header {
    grid-area: header;
}

.aside {
    grid-area: sidebar;
}

.main {
    grid-area: content;
}

.footer {
    grid-area: footer;
}
</style>

上面相同另一种指定内容需要用指定标签包裹

例子: <header>这是头部</header>

header {
    grid-area: header;
}

aside {
    grid-area: sidebar;
}

main {
    grid-area: content;
}

footer {
    grid-area: footer;
}

直接使用网格

image-20230309174350396

grid是网格布局,可以通过线来描述布局位置

image-20230309174616798

header{
    grid-column-start: 1;
    grid-column-end: 3;
    grid-row-start: 1;
    grid-row-end: 2;
}

占用结果为上图

**简写 ** 效果同上方代码

header {
    grid-columnn: 1 / 3;
    grid-row: 1 / 2;
}

简写2

要求 : 跨度为1

1 / 2 可简写为 1  
2 / 3 可简写为 2
3 / 4 可简写为 3
nekopara
我是一个全栈网络工程师,对一切新鲜事物充满好奇,希望我的文章能给你带来思考和帮助
👋我是nekopara
分享作者『nekopara』发表的文章『grid布局』https://blog.cmao.me/post/20230401a/
© 请您在需要时著名本文内容来源信息,若在文末注明“参考、扩展”等字样涉及转载第三方内容,请您一同复制
vue2快速入门
vue2快速入门
vue2快速入门
Astro中的Markdown基本语法
Astro中的Markdown基本语法
常用的Markdown语法示例:标题、引用、图片、粗体、斜体、超链接等