grid布局基本用法

使用grid布局可以实现自定义的页面布局,如下图所示:

接下来就举例简单介绍一下grid布局的用法:

前提:

设置父级容器中添加8个子dom做演示(子dom无需设置宽度):

<div class="outter">
    <div class="box">1</div>
    <div class="box">2</div>
    <div class="box">3</div>
    <div class="box">4</div>
    <div class="box">5</div>
    <div class="box">6</div>
    <div class="box">7</div>
    <div class="box">8</div>
</div>

1.grid基本效果演示:

ps:先介绍一下grid-template-columns,grid-template-columns中可传递多个参数,其参数的数量决定grid表格布局的列数,如设置为1fr 1fr 1fr即将出现等宽的三列(可参考下方示例)。

首先先在父容器中设置display为grid,然后设置grid-template-columns为1fr(fr为其计量单位)

<div class="outter" style="display: grid; grid-template-columns: 1fr">

下面将举三个例子来说明grid-template-columns:

(1)grid-template-columns为1fr时效果如下图:

(2)grid-template-columns为1fr 2fr时,此时将被分为两列,第一列占1份,第二列占2份,即前两列的宽度比为1:2

<div class="outter" style="display: grid; grid-template-columns: 1fr 2fr">

从上图中可看出两列的宽度比为1:2。

(1)grid-template-columns为200px 1fr,此时左侧列宽度固定为200px, 右侧列则为剩余空间的宽度

<div class="outter" style="display: grid; grid-template-columns: 200px 1fr">

2.gap间距:

可以设置各个子dom的间距,由于上面的示例每个子dom我都设置了margin,现将其去掉;之后添加gap观察前后效果:

<div class="outter" style="display: grid;gap:30px; grid-template-columns: 1fr 2fr 1fr;">

gap:30px前后添加效果对比:

3.响应式布局:

举例说明,当用户的设备不同时,其设备的宽度可能会不同,固定的css样式往往不能很好的适配用户的屏幕(如以购物网站为例,用户使用电脑可以一行放下5个商品,而使用手机时一行只能看到2行商品),此时除了使用媒体查询,grid布局也是一个不错的选择:

举例:

<div class="outter" style="display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));gap:30px;">

这里添加了

grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); 解释下:

(1)这里repeat可以重复设置grid-template-columns,auto-fill指代默认重复可重复最大次数

如:

grid-template-columns:repeat(5, 1fr);

等同于:
grid-template-columns:1fr, 1fr, 1fr, 1fr, 1fr;

(2)minmax(300px, 1fr)中的minmax方法接收两个参数,分别为最大宽度和最小宽度;这里指代的每列最小宽度不能小于300px

总体效果对比(左侧屏幕宽度为1000px时,右侧屏幕宽度为750px时):

4.自定义布局:

假设想要实现b站这样的布局效果:

这里需要对第一个子dom进行配置,需指定其宽度占2列,高度占2行,综合位置来看,即:宽度为1-2行,高度1-2列;

这里可以通过grid-column,grid-row与设置所占的行与列:

grid-column1/3:指从第一行开始到第三行结束(不包括第三行)这里的斜杠只是分隔符,并非指代分数。grid-row1/3:同理指代第一列开始到第三列结束,即1~2列(不包括第三列)

<div class="box" style="grid-column: 1/3;grid-row: 1/3;">1</div>

效果:

(ps:grid-column,grid-row 分别是 grid-column-start 、grid-column-end 、grid-row-start 、 grid-row-end 属性的简写)

代码整体参考:

<body>
    <div class="outter" style="display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));gap:30px;">
        <div class="box" style="grid-column: 1/3;grid-row: 1/3;">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
        <div class="box">5</div>
        <div class="box">6</div>
        <div class="box">7</div>
        <div class="box">8</div>
        <div class="box">9</div>
        <div class="box">10</div>
        <div class="box">11</div>
        <div class="box">12</div>
    </div>
</body>
<style>
    .outter {
        width: 50%;
        height: 800px;
        border: 1px solid #000;
    }
    .box {
        background-color: darkseagreen;
        border-radius: 16px;
        align-items: center;
        justify-content: space-around;
        display: flex;
        font-size: larger;
    }
</style>

5.自定义练习

看到这里了,可以通过(grid-column,grid-row)尝试实现下列效果:

参考代码:

<body>
    <div class="outter" style="display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));gap:30px;">
        <div class="box" style="grid-column: 1/3;grid-row: 1/3;">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box" style="grid-column: 5/6;grid-row: 1/3;">4</div>
        <div class="box">5</div>
        <div class="box">6</div>
        <div class="box">7</div>
        <div class="box">8</div>
        <div class="box">9</div>
        <div class="box">10</div>
        <div class="box" style="grid-column: 5/6;grid-row: 5/6;">11</div>
        <div class="box" style="grid-column: 2/3;grid-row: 4/5;">12</div>
    </div>
</body>
<style>
    .outter {
        width: 50%;
        height: 800px;
        border: 1px solid #000;
    }
    .box {
        background-color: darkseagreen;
        border-radius: 16px;
        align-items: center;
        justify-content: space-around;
        display: flex;
        font-size: larger;
    }
</style>

希望本位会对您有所帮助~ ^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值