CSS基本布局——grid布局

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://xiahunao.cn/news/1618499.html

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

相关文章

【CSS布局】—— flex(弹性)布局

赶快悄悄的努力起来吧&#xff0c;不苒在这里衷心祝愿各位大佬都能顺利通过面试。 面试专栏分享&#xff0c;感觉有用的小伙伴可以点个订阅&#xff0c;不定时更新相关面试题&#xff1a;面试专栏 。 文章目录 &#x1f33c;前言&#x1f33b;正文1、弹性盒子模型是什么&#x…

火列星屯--最强大的CSS布局方案

一、总论 首先给出结论&#xff1a;网格布局&#xff08;Grid&#xff09;是最强大的 CSS 布局方案。 虽说如此&#xff0c;但是仍要重视具体的应用场景&#xff0c;如果有其他写法可以提高代码的简洁和可读性&#xff0c;未必非要选择Gird不可。 网格布局就如同它的字面意思…

常见的布局方式

1.弹性布局---flex布局 弹性布局是一种常见且好用的布局方式&#xff0c;它可以让结构中的内容自适应不同的分辨率&#xff0c;简化的代码的书写。 使用方法 给父盒子加上display:flex;默认子元素不换行&#xff0c;如果装不开&#xff0c;子元素会缩小元素的宽度。 父级元…

前端开发常见的几种布局方式

作为前端开发工程师&#xff0c;布局方式有多种&#xff0c;对于不同的场景可以使用不同的布局方式&#xff0c;那么我们就先来简单的来了解一下&#xff0c;那些前端开发必须了解的布局。 一. 静态布局&#xff08;static layout&#xff09; 即传统的Web布局&#xff0c;网页…

android系统启动流程之zygote(Native)启动分析

zygote有一部分运行在native,有一部分运行在java层&#xff0c;它是第一个进入java层的进程 zygote在启动时&#xff0c;在init.${ro.zygote}.rc脚本中&#xff0c;里面描述了zygote是如何被启动的&#xff0c; 当init进程解析到zygote.rc文件时&#xff0c;将根据解析出来的命…

No117.精选前端面试题,享受每天的挑战和学习

文章目录 断点续传怎么做的秒传怎么实现var let const 块级作用域ts Partial Omit 怎么实现的箭头函数有哪些限制箭头函数为什么不能作为构造函数promise常用apiMap和Object的区别vue怎么实现双向绑定 断点续传怎么做的 断点续传是指在文件下载或上传过程中&#xff0c;当连接…

【微信小程序遇到的坑】实现跨行跨列的表格

由于微信小程序组件中不带table标签&#xff0c;所以只能自己制作一个table表格&#xff0c;并且是实现跨行跨列的复杂表格。 直接上代码&#xff0c;即可预览效果 wxml <view class"table"><view class"tr tr_title">上午8:30-11:45</vi…

50.服务程序SERVICE_STATUS、SERVICE_STATUS_HANDLE、RegisterServiceCtrlHandler、SetServiceStatus、SERVICE_TABL

我得先总结一下步骤&#xff1a; 一、在main函数中的操作 1.先创建一个main主函数&#xff0c;在main主函数中创建创建一个服务程序入口函数列的结构体并将其初始化 机构体SERVICE_TABLE_ENTRY DispatchTable[2]; 假设定义的服务入口函数是(LPSERVICE_MAIN_FUNCTION)ServiceMa…

使用 SAP WebIDE 将 SAP UI5 应用部署到 ABAP 系统时遇到的关于传输请求的错误

有朋友遇到一个在 webide 里部署 SAP UI5 应用到 ABAP Repository 里时出错的问题&#xff1a; 错误消息&#xff1a; Failed to get transports for the selected package. Request POST /webidedispatcher/destinations/LND500/sap/bc/adt/cts/transportchecks failed: Forbi…

【操作记录】CLion 中引入 Gurobi 并使用 C++ 编程

文章目录 一、前言二、具体操作2.1 创建项目2.2 修改编译工具2.3 修改 CMakeLists.txt2.4 修改 main.cpp2.5 运行测试 一、前言 虽然C编程大部分人都会选择使用VS&#xff0c;但是作为 IDEA 的长期用户&#xff0c;我还是比较习惯 JetBrains 风格的编译器&#xff0c;所以就选…

7.11英语学习及笔记

《花木兰》 Based on a Chinese legend, the film follows the story of the titular hero – a young woman who poses as a man in order to take her ailing father’s place in the Imperial army, after the threat of the invading Huns requires a man from every house…

针对韩国开展的一系列韩文类恶意文档定向攻击行动分析 part-1

?点个关注&#xff0c;你的支持是我更新最大的动力? 最近朝鲜APT组织的攻击事件层出不穷&#xff0c;基于看到一篇很好的文章&#xff0c;特此结合文章对朝鲜相关组织进行分析。 Financial Security Institute对近期一系列投放韩文类恶意文档的定向攻击行动命名为“DOKKAEBI…

跨国邮件诈骗团伙案例

如果某天你收到了这样一封邮件&#xff0c;啊&#xff0c;大体意思就是这人身患绝症且有一笔遗产&#xff0c;你是个幸运儿要你继承。 重点来了啊&#xff0c;他会伪造证件然后让你相信并按照对方的思路来&#xff0c;给他你的身份信息&#xff0c;例如身份证照片&#xff0c;你…

springboot+vue+Elementui图书馆自习室座位预约系统

随着学校的人数的扩招,图书馆的座位资源短缺问题日益严重&#xff0c;特别是在临近考试时&#xff0c;座位占座情况尤为明显。起大早、摞书本、放水杯&#xff0c;甚至粘上纸条……宣誓主权&#xff0c;在图书馆里&#xff0c;很多学生办法用尽&#xff0c;只为了能获得“一席之…

SQLite3 极简教程 Go 使用 SQLite 内存模式操作数据结构

SQLite 简介 关键词: RDBMS (embedded), C SQLite is a database engine written in the C language. It is not a standalone app; rather, it is a library that software developers embed in their apps. SQLite是一个开源的、内嵌式的关系型数据库。它最初发布于2000年,…

致--所有努力生活的人们(暑假学习总结与考研宣誓)

致--所有努力生活的人们 确定专业和院校科研任务关于英语的学习退游喜欢的女孩备战数模比赛学习智能算法计算机素养的锻炼basketball对未来的展望 虽然文章写的虽然不是很好&#xff0c;但是很用心有诚意&#xff0c;我保证读完你会充满慢慢能量的&#xff01; 本blog记录了暑假…

有书共读:《穷查理宝典》

1. 写在前面 最近有幸参加了Datawhale举办的一些读书会活动&#xff0c;里面有很多伙伴分享自己读过的一些好书并分享自己的读书心得和感悟&#xff0c;体会非常的深刻&#xff0c; 也学习到了很多的知识&#xff0c; 所以受到了一些伙伴的影响&#xff0c;最近也开始在闲暇的…

以“人民的名义”劝你快去读点书

“我之前看一个调查&#xff0c;说中国人的读书量远低于世界平均水平&#xff1b;而且趋于图片化、碎片化&#xff0c;缺乏深度。这年头&#xff0c;你们还有个读书会&#xff0c;算是难得了”&#xff0c;陆亦可对赵东来说。“而且我们读的还是闲书&#xff0c;没有任何经济利…

第三讲,三维空间刚体运动

一个刚体在三维空间中的运动是如何描述的。我们当然知道这由一次旋转加一次平移组成。平移确实没有太大问题&#xff0c;但旋转的处理是件麻烦事。我们将介绍旋转矩阵、四 元数、欧拉角的意义&#xff0c;以及它们是如何运算和转换的。 1.向量&#xff0c;坐标系和旋转矩阵 点…

两独立样本的非参数检验(Mann-Whitney U 秩和检验)

原文地址&#xff1a;SPSS学习笔记之——两独立样本的非参数检验&#xff08;Mann-Whitney U 秩和检验&#xff09;作者&#xff1a;王江源 一、概述 Mann-Whitney U 检验是用得最广泛的两独立样本秩和检验方法。简单的说&#xff0c;该检验是与独立样本t检验相对应的方法&…