CSS基本布局——grid布局

news2024/11/18 19:29:18

grid布局简介:

Grid布局是将容器划分成“行”和“列”,产生单元格,然后指定“项目所在”的单元格,可以看作是二维布局。

基本概念:

  1. 容器(container)——有容器属性
  2. 项目(items)——有项目属性
  3. 行(row)
  4. 列(column)
  5. 间距(gap) ——单元格之间的距离
  6. 区域(area)—— 自己划分每个单元格占据的区域
  7. 内容(content)
    在这里插入图片描述

容器属性

  1. grid-template-columns:设置每一列的宽度,可以是具体值,也可以是百分比
    grid-template-rows:设置每一行的宽度,可以是具体值,也可以是百分比
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    *{
        padding: 0;
        border: 0;
    }
    .container{
    	margin-top:100px;
        border: solid 10px red;
        height: 600px;
        width: 600px;
        margin: auto;
        /* 设置容器布局为grid布局 */
        display: grid;
         /* 指定每一行的宽度 每个宽度中间用空格隔开 */
        grid-template-rows:150px 150px 150px;
        /* 指定每一列的宽度 每个宽度中间用空格隔开 */
        grid-template-columns: 100px 100px 100px;
    }
    .item1{
        background-color: powderblue;
    }
    .item2{
        background-color: plum;
    }
    .item3{
        background-color: palevioletred;
    }
    .item4{
        background-color: peru;
    }
    .item5{
        background-color: sandybrown;
    }
    .item6{
        background-color: springgreen;
    }
    .item7{
        background-color: turquoise;
    }
    .item8{
        background-color: yellowgreen;
    }
    .item9{
        background-color: yellow;
    }
    div{
        font-size: 100px;
    }    
</style>
<body>
    <div class="container"> 
        <!-- 选项 item -->
        <div class="item1">1</div>
        <div class="item2">2</div>
        <div class="item3">3</div>
        <div class="item4">4</div>
        <div class="item5">5</div>
        <div class="item6">6</div>
        <div class="item7">7</div>
        <div class="item8">8</div>
        <div class="item9">9</div>
    </div>
</body>
</html>

结果如图,此时共有三行三列,每行为150px,每列为100px在这里插入图片描述
repeat():第一个参数是重复的次数,第二个参数是所要重复的值

/* grid-template-columns: 100px 100px 100px;也可写成 grid-template-columns:repeat(3,100px) */
/* grid-template-rows: 150px 150px 150px;也可写成 grid-template-rows:repeat(3,150px) */

auto-fill:有时单元格的大小是固定的,但是容器的大小不确定,这个属性就会自动填充

 .container{
       /*未定义容器的宽高*/
        margin-top: 100px;
        border: solid 10px red;
        margin: auto;
        display: grid;
        grid-template-columns: repeat(auto-fill,100px);
    }

结果如图,会随着浏览器的大小的改变自动填充在这里插入图片描述
fr:为了方便表示比例关系,网格布局提供了fr关键字(fraction的缩写,意为片段)

.container{
        margin-top: 100px;
        border: solid 10px red;
        height: 600px;
        width: 600px;
        margin: auto;
        display: grid;
        /* 宽度平均分成4份 */
        grid-template-columns: repeat(4,1fr);
        /* 高度平均分成3份 */
        grid-template-rows: repeat(3,1fr);
    }

结果如图,宽度平均分成4份,高度平均分成3份在这里插入图片描述
minmax():函数产生一个长度范围,表示长度就在这个范围之中,它接受两个参数,分别为最小值和最大值

.container{
        margin-top: 100px;
        border: solid 10px red;
        height: 600px;
        width: 600px;
        margin: auto;
        display: grid;
        /*共有3列,第一列150px,第二列400px,第三列宽度最小为20px,最大为90px*/
        grid-template-columns:  150px 400px minmax(20px,90px);
    }

此时3的宽度为50px,位于20px~90px之间在这里插入图片描述
auto:表示由浏览器自己决定长度

.container{
        margin-top: 100px;
        border: solid 10px red;
        height: 600px;
        width: 600px;
        margin: auto;
        display: grid;
        /* 中间的宽度由浏览器自己决定 */
        grid-template-columns:  100px auto 100px;
    }

结果如图,容器总宽600px,第一列和第三列宽100px,浏览器自动将剩余的400px分配为第二列的宽度。在这里插入图片描述

  1. grid-column-gap
    grid-row-gap
    grid-gap(前两个的缩写)
    表示项目相互之间的距离,新版本grid-前缀已经删除。
.container{
        margin-top: 100px;
        border: solid 10px red;
        height: 600px;
        width: 600px;
        margin: auto;
        display: grid;
        grid-template-columns:  repeat(3,150px);
        grid-template-rows:  repeat(3,150px);
        column-gap:20px ;
        row-gap: 40px;
    }

结果如图,每个项目列与列之间的距离为20px,行与行之间的距离为40px在这里插入图片描述

/* row-gap: 40px;column-gap:20px;可缩写成 gap: 40px 20px;
        第一个数值表示row之间的距离,第二个数值表示column之间距离,中间用空格隔开*/
/*当row-gap和column-gap值相同时,例如都为20px时,可写成gap:20px;*/

运行结果同上

  1. grid-template-areas
    一个区域由单个或多个单元格组成,由自己决定(具体使用,需要在项目属性中设置)
    区域不需要利用时,则使用“.”表示
    区域的命名会影响到网络线,会自动命名为区域名-start,终止网格线自动命名为-end
 grid-template-areas: 'a b c'
                             'd e f'
                             'g h i';
        grid-template-areas: 'a a a'
                             'b b b'
                             'c c c';                                        
        grid-template-areas: 'a . c'
                             'd . f'
                             'g . i';  
  1. grid-auto-flow:划分网格以后,容器的子元素会按照顺序,自动放置在每一个网格。默认的放置顺序是“先行后列”,即先填满第一行,再开始放入第二行(就是子元素的排放顺序)
    grid-auto-flow:row;(先行后列)
    在这里插入图片描述
    grid-auto-flow:column;(先列后行)
    在这里插入图片描述
    单元格较大时,用grid-auto-flow:row;时效果如图,空间利用率不高。
 .container{
        margin-top: 100px;
        border: solid 10px red;
        height: 700px;
        width: 600px;
        margin: auto;
        display: grid;
        grid-template-columns:  repeat(3,150px);
        grid-template-rows:  repeat(3,150px);
        gap:20px;
        grid-auto-flow: row;                                    
    }

在这里插入图片描述
利用dense属性可提高空间利用率。grid-auto-flow:row dense;

.container{
        margin-top: 100px;
        border: solid 10px red;
        height: 700px;
        width: 600px;
        margin: auto;
        display: grid;
        grid-template-columns:  repeat(3,150px);
        grid-template-rows:  repeat(3,150px);
        gap:20px;
        grid-auto-flow: row dense;                                    
    }

在这里插入图片描述

  1. justify-items(水平方向)/ align-items(垂直方向)
    设置单元格内容的水平和垂直对齐方式。

    水平方向上:
    justify-items:start|end|center|stretch;
    justify-items:start; 起始方向对齐
    在这里插入图片描述
    justify-items:center; 居中对齐
    在这里插入图片描述
    justify-items:end; 末尾对齐
    在这里插入图片描述
    justify-items:stretch; 延伸,以填满整个单元格
    在这里插入图片描述
    竖直方向上:
    align-items:start|center|end|stretch;
    align-items:start; 起始对齐
    在这里插入图片描述
    align-items:center; 竖直方向居中对齐
    在这里插入图片描述
    align-items:end; 末尾对齐
    在这里插入图片描述
    align-items:stretch; 延伸,以填满整个单元格
    在这里插入图片描述
    place-items属性是align-items和justify-items属性的合并简写形式。
    place-items:justify-items align-items;
    先水平再竖直,中间用空格隔开。

  2. justify-content(水平方向)/ align-content(垂直方向)
    设置整个内容区域的水平和垂直的对齐方式

不设置容器的宽高,让我们来看看这些属性的区别。

首先,水平方向上:justify-content: start | end | center | stretch | space-around | space-between | space-evenly ;

justify-content:start;
从行首开始排列。每行第一个元素与行首对齐,同时所有后续的元素与前一个对齐。

.container{
        margin-top: 100px;
        border: solid 10px red;
        margin: auto;
        display: grid;
        gap: 20px;
        grid-template-columns:  repeat(3,150px);
        grid-template-rows:  repeat(3,150px);
        justify-content: start;                           
    }

在这里插入图片描述
justify-content:center;
在容器中剧中排列。
在这里插入图片描述
justify-content:end;
从行末开始排列。
在这里插入图片描述
justify-content: stretch; 均匀分布项目,拉伸‘自动’-大小的项目以充满容器
我们不设置项目的大小,看一下运行结果

.container{
        margin-top: 100px;
        border: solid 10px red;
        margin: auto;
        display: grid;
        /* width: 600px;
        height: 1000px; */
        gap: 20px;
        /* grid-template-columns:  repeat(3,150px);
        grid-template-rows:  repeat(3,100px); */
        align-content:stretch;                           
    }

如图,项目被拉伸以填满容器在这里插入图片描述

justify-content:space-around;
在每行上均匀分配弹性元素。相邻元素间距离相同。每行第一个元素到行首的距离和每行最后一个元素到行尾的距离将会是相邻元素之间距离的一半。
在这里插入图片描述
justify-content:space-between;
在每行上均匀分配弹性元素。相邻元素间距离相同。每行第一个元素与行首对齐,每行最后一个元素与行尾对齐。
在这里插入图片描述
justify-content:space-evenly;
项目与项目之间的距离和项目与起始位置的距离都相同。
在这里插入图片描述
接下来,竖直方向上:align-content: start | end | center | stretch | space-around | space-between | space-evenly ;

align-content:start; 最先放置项目

.container{
        margin-top: 100px;
        border: solid 10px red;
        margin: auto;
        display: grid;
        width: 600px;
        height: 1000px;
        gap: 20px;
        grid-template-columns:  repeat(3,150px);
        grid-template-rows:  repeat(3,100px);
        align-content:start;                           
    }

在这里插入图片描述
align-content:center; 将项目放置在中点
在这里插入图片描述
align-content:end; 将项目放在末尾
在这里插入图片描述
align-content:stretch;
均匀分布项目,拉伸‘自动’-大小的项目以充满容器
同样,不设置项目的大小,我们来看一下结果。

.container{
        margin-top: 100px;
        border: solid 10px red;
        margin: auto;
        display: grid;
        width: 600px;
        height: 1000px;
        gap: 20px;
        /* grid-template-columns:  repeat(3,150px);
        grid-template-rows:  repeat(3,100px); */
        align-content:stretch;                           
    }

如图,大小自动的项目都被拉伸以填满容器在这里插入图片描述

align-content:space-around;
均匀分布项目,项目在两端有一半大小的空间
在这里插入图片描述
align-content:space-between;
均匀分布项目,,第一项与起始点齐平,最后一项与终止点齐平
在这里插入图片描述

align-content:space-evenly;
均匀分布项目,项目周围有相等的空间
在这里插入图片描述

  1. grid-auto-columns/grid-auto-rows
    用来设置多出来的项目的宽和高

grid-auto-rows:
未设置时

 .container{
        margin-top: 100px;
        border: solid 10px red;
        margin: auto;
        display: grid;
        width: 600px;
        height: 600px;
        gap: 20px;
        grid-template-columns:  repeat(3,150px);
        grid-template-rows:  repeat(3,120px);
                                
    }

未定义10的高度,浏览器自动将10延伸到容器底部在这里插入图片描述
接下来我们一起设置一下:

 grid-auto-rows: 50px;

结果如图,10的高度为50px在这里插入图片描述
grid-auto-clumns:
先用grid-auto-flow:columns;属性将排列方式改成先列后行
未设置时:

 .container{
        margin-top: 100px;
        border: solid 10px red;
        margin: auto;
        display: grid;
        width: 700px;
        height: 600px;
        gap: 30px;
        grid-template-columns:  repeat(3,150px);
        grid-template-rows:  repeat(3,180px);
        /* 先列后行 */
        grid-auto-flow: column;                     
    }

浏览器默认将10延伸到容器最左边在这里插入图片描述
接下来我们一起设置一下:

grid-auto-columns: 50px; 

结果如图,设置后10的宽度为50px在这里插入图片描述

项目属性:

  1. grid-column-start/grid-column-end
    grid-row-start/grid-row-end
    指定item的具体位置,根据在哪根网络线,在项目里设置

    如图所示:在这里插入图片描述
    设置单元格1宽度,从第一条线开始到第三条线结束
    代码为:

 grid-column-start: 1;grid-column-end: 3;  
   /* 也可简写成grid-column:1 / 3; 
	  或grid-column:span 2;
	  span 2表示跨2个单元格 */
.container{
        margin-top: 100px;
        border: solid 10px red;
        margin: auto;
        display: grid;
        width: 600px;
        height: 800px;
        gap: 30px;
        grid-template-columns:  repeat(3,180px);
        grid-template-rows:  repeat(3,180px);
    }
    .item1{
        background-color: powderblue;
        grid-column-start: 1;
        grid-column-end: 3;  
    }

结果如图:
在这里插入图片描述
设置单元格1的宽度,从第一条线开始到第四条线结束
代码为:

 grid-row-start: 1;grid-row-end: 4;  
  /* 也可简写成grid-row:1 / 4;
  		或grid-row:span 3;
  		span 3表示跨三个单元格 */
 .container{
        margin-top: 100px;
        border: solid 10px red;
        margin: auto;
        display: grid;
        width: 600px;
        height: 800px;
        gap: 30px;
        grid-template-columns:  repeat(3,180px);
        grid-template-rows:  repeat(3,180px);
    }
    .item1{
        background-color: powderblue;
        grid-row-start: 1;
        grid-row-end: 4; 
    }

结果如图:
在这里插入图片描述

  1. grid-area:指定项目放在哪一个区域
    使用时要与容器属性grid-template-areas一起使用
    例如:
.container{
        margin-top: 100px;
        border: solid 10px red;
        margin: auto;
        display: grid;
        width: 600px;
        height: 800px;
        gap: 30px;
        grid-template-columns:  repeat(3,180px);
        grid-template-rows:  repeat(3,180px);
        grid-template-areas:'a a a'
                            'd f b'
                            'h i j';
    }
    .item1{
        background-color: powderblue;
        grid-area: a;
    }

我们可以看到,container中设置了单元格的分布区域,item1中设置了将项目1放在a区域。
运行结果如图:
可见,所有的a的区域都是项目1的区域在这里插入图片描述
grid-area也可用作简写,形式如图在这里插入图片描述

  1. justify-self/align-self
    首先,水平方向上:
    justify-self :设置单元格内容的水平位置(左中右),和 justify-items属性的用法完全一致,但只作用于单个项目(水平方向)
    容器的style
.container{
        margin-top: 100px;
        border: solid 10px red;
        margin: auto;
        display: grid;
        width: 600px;
        height: 800px;
        gap: 30px;
        grid-template-columns:  repeat(3,180px);   
    }

justify-self:start | end | center | stretch;
结果依次为:

 .item1{
        background-color: powderblue;
        justify-self: start; 
    }

在这里插入图片描述

.item1{
        background-color: powderblue;
        justify-self: end; 
    }

在这里插入图片描述

.item1{
        background-color: powderblue;
        justify-self: center; 
    }

在这里插入图片描述

.item1{
        background-color: powderblue;
        justify-self: stretch; 
    }

延伸以填满整个单元格
在这里插入图片描述
垂直方向上:
align-self:设置单元格内容的垂直位置(上中下),和align-items属性的用法完全一致,但只作用于单个项目(垂直方向)
align-self:start | end | center | stretch;
结果依次为:

.item1{
        background-color: powderblue;
        align-self: start; 
    }

在这里插入图片描述

  .item1{
        background-color: powderblue;
        align-self: end; 
    }

在这里插入图片描述

.item1{
        background-color: powderblue;
        align-self: center; 
    }

在这里插入图片描述

.item1{
        background-color: powderblue;
        align-self: stretch; 
    }

延伸以填满整个单元格
在这里插入图片描述
place-self:上两个的缩写,先水平再竖直,中间用空格隔开。
例如justify-self:center;align-self:end;可写成:place-self:center end;

完结撒花!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/409427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vite项目优化

首先在讲述vite优化之前&#xff0c;我们先来分析一下和传统的项目管理构建工具的区别&#xff0c;以webpack为例&#xff0c;它是利用plugin插件和loader加载器对项目的所有模块和依赖统一通过入口文件进行编译&#xff0c;从而变成我们html所需要的js格式渲染我们的页面。 随…

Vue项目目录结构介绍(三)

前言 本章我们会对一个 Vue 项目的目录结构进行讲解&#xff0c;解释各子目录以及文件的作用&#xff0c;前端的模块化&#xff0c;Vue 单文件组件规范等。 1、基础目录和文件介绍 在上一章&#xff0c;我们通过 vue-cli 创建了一个新的项目&#xff0c;生成的项目目录里已经包…

tauri+vite+vue3开发环境下创建、启动运行和打包发布

目录 1.创建项目 2.安装依赖 3.启动项目 4.打包生成windows安装包 5.安装打包生成的安装包 1.创建项目 运行下面命令创建一个tauri项目 pnpm create tauri-app 我创建该项目时的node版本为16.15.0 兼容性注意 Vite 需要 Node.js 版本 14.18&#xff0c;16。然而&#x…

【玩转CSS】这些高级技巧,你都会吗

&#x1f525;一个人走得远了&#xff0c;就会忘记自己为了什么而出发&#xff0c;希望你可以不忘初心&#xff0c;不要随波逐流&#xff0c;一直走下去&#x1f3b6; &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; &#x1f984; …

js去掉两个数组相同的元素、js删除数组中某一个对象、js快速查找数组中重复项下标

一、js去掉两个数组相同的元素 注意&#xff1a;这里并非是数组去重&#xff0c;数组去重是去掉一个数组中相同的元素&#xff0c;这里是比较两个数组&#xff0c;过滤掉二者相同的&#xff0c;留下不同的。 通过 some() 在对方数组里面查找相同元素&#xff0c;再利用filter…

老老实实的程序员该如何描述自己的缺点

答辩的时候&#xff0c;晋升的时候&#xff0c;面试的时候&#xff0c;你有没有经常遇到一个问题&#xff0c;那就是你觉得自己有什么缺点吗&#xff1f; 目录 1. 每个人都有缺点 2. 这道题在考什么&#xff1f; 3. 我之前是怎么回答的 4. 你可以这样回答试一试 5. 总结 …

浅析<router-view> v-slot事例

官方关于<router-link> 的 v-slot的相关介绍: https://router.vuejs.org/zh/api/#router-view-%E7%9A%84-v-slot 并给出了一个例子&#xff1a; <router-view v-slot"{ Component, route }"><transition :name"route.meta.transition || fade&q…

selenium驱动Firefox安装和环境配置

目录 一、前言 二、版本 三、配置环境 四、在pycharm中添加selenium 五、测试代码&#xff0c;成功打开百度&#xff0c;则配置成功 一、前言 根据多篇文章总结了一下自己操作过程&#xff0c;主要是想记录一下。 二、版本 1.查看自己的Firefox的版本&#xff0c;在浏览器…

Web视频video自动播放(移动端及PC端)

做了个关于视频播放的活动&#xff0c;被各种问题折腾得精疲力竭。为了日后能够轻松点&#xff0c;特记录下出现的各种问题及解决方法。 活动要适配移动端&#xff08;IPhone、Android&#xff09;和PC端&#xff08;Chrome&#xff09; 需要解决的问题&#xff1a;移动端禁止全…

vue echarts饼图环形 (随着legend动态显示数据总数)

目录 1.安装echarts 2.引入echarts 3.创建要放入echarts实例的一个盒子 4.创建echarts实例 5.随着legend动态显示数据总数 效果视频 1.安装echarts npm install echarts --save 2.引入echarts 在 当前vue文件中引入 echarts 如下图所示&#xff1a; 3.创建要放入echa…

Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(搭建开发环境)

基于 Vue3.x Vant UI 的多功能记账本&#xff08;二&#xff09; 文章目录基于 Vue3.x Vant UI 的多功能记账本&#xff08;二&#xff09;搭建开发环境项目演示1、创建项目2、配置路由3、添加 Vant UI 组件库4、移动端 rem 配置5、添加 iconfont 文字图标库6、二次封装 Axio…

Vue实现鼠标悬浮隐藏与显示图片效果 @mouseenter 和 @mouseleave事件

前言 前端vue 有个功能是鼠标移动到指定item上显示出来一个编辑和删除的图标 鼠标悬停在列表那么需要有悬浮显示的列表编辑和删除icon 文字不好描述&#xff0c;因为是web端录屏也比较麻烦 这里用截图说明 图片说明 功能实现 之前没做过这种效果&#xff0c;问了一下我的组长…

echarts 地图和柱状图结合(在地图上显示柱状图)

如图&#xff0c;需求要做一个在地图上显示柱状图的echarts图&#xff0c;但是百度了半天&#xff0c;发现很少有人发这种例子。这个代码也是借鉴的别人的文章&#xff0c;但需求肯定不完全一致&#xff0c;那我会根据我的需求把代码和注意事项发出来并解释。&#xff08;如果有…

ant-design-vue:基础使用

一、环境介绍 vue3tsant-design-vue 二、安装使用 2.1、安装脚手架工具 $ npm install -g vue/cli # OR $ yarn global add vue/cli 2.2、创建一个demo项目 2.2.1、创建项目 $ vue create antd-demo 2.2.2、 安装成功&#xff1a; 2.2.3、 项目目录及启动项目&#xff1a…

前端常见的几种布局方式,2分钟即可看完,全是干货。

前端常见的几种布局方式 提示&#xff1a;本篇文章不包含具体知识点&#xff0c;但是可以帮助小白了解到什么是布局 文章目录前端常见的几种布局方式前言参考文档一、前端常见的几种布局方式是什么&#xff1f;二、几大布局介绍1.浮动布局2.定位布局3.弹性布局4.栅格布局5.响应…

scss安装入门到使用高级语法

一.sass的基本概念 sass是css的"预处理器", 一门专门的css编程语言 增加了变量, 函数, 计算, 嵌套关系等用法,让css编写更简洁, 清晰. 二. scss的安装步骤 首先查询一下是否已经安装过sass, 在cmd中输入sass -v 或者 sass --version sass -vsass --version使用上…

【前端修炼之路】第一话 · 初识前端领域

写在前面 夏日炎炎&#xff0c;现在屋外的鸟儿叫的很欢&#xff0c;屋内刚刚组装完的主机风扇在轰轰作响&#xff0c;呜呜呜&#xff0c;怎么闻怎么看都不像是矿卡的显卡现在竟散发出阵阵甜味~哈哈哈哈开个玩笑&#xff0c;写个文章看个视频&#xff0c;这显卡的风扇应该都不带…

申请百度地图开发者AK和基本使用

前言 有需求就会有市场&#xff0c;百度地图也会开放一些免费的Api。来提供一些基本的地图服务。 今天我们讲解的是百度地图申请AK过程&#xff0c;和申请完之后基本的使用&#xff0c;方便大家日后有需要浏览。 AK-申请 1.首先我们学习一个技术最直接的是去看官方文档&…

ES6中新语法:解构

目录 解构 1.解构初了解 2.解构详细解析 2.1对象属性赋值形式 2.2变量的声明 2.3怎么解构 3.实践 3.1数组的解构 3.2对象的解构 3.3解构参数 4.总结 ☀️作者简介&#xff1a;大家好我是言不及行yyds &#x1f40b;个人主页&#xff1a;言不及行yyds的CSDN博客 &#…

Element-UI--<el-switch>的@change回调函数的参数用法

原文网址&#xff1a;Element-UI--&#xff1c;el-switch&#xff1e;的change回调函数的参数用法_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Element-UI的<el-switch>的change回调函数的参数用法。 需求 2个switch组件&#xff0c;用同一个回调函数switch组件状…