css初入门:网页布局之网格布局-grid

文章目录

  • 网格布局-grid
    • 1、设置网格布局
    • 2、网格布局介绍
    • 3、网格容器
      • grid-template-columns属性
      • grid-template-rows 属性
      • justify-content 属性
      • justify-items属性
      • align-content 属性
    • 4、网格项目
      • grid-column-start、grid-column-start、grid-column属性
      • grid-row-start、grid-row-end、grid-row属性
      • grid-area 属性
      • justify-self 属性
      • 通过媒体查询改变表格项目的位置
    • 5、对比flex

网格布局-grid

CSS 网格布局模块(CSS Grid Layout Module)提供了带有行和列的基于网格的布局系统,它使网页设计变得更加容易,而无需使用浮动和定位。

1、设置网格布局

.container{
	display:grid;
}

或者

.container{
	display:inline-grid;
}

这两者的区别是:
一个是块级;一个是行内块级

2、网格布局介绍

网格列(Grid Columns)
在这里插入图片描述
网格行(Grid Rows)
在这里插入图片描述
网格间隙(Grid Gaps)
在这里插入图片描述

通过以下属性来调整网格间隙。

column-gap:10px;  // 竖直间隙
row-gap:10px;  // 水平间隙
gap:10px 10px;  // 是 row-gap 和column-gap 属性的简写属性

列线与竖线
列之间的线称为列线(column lines)
行之间的线称为行线(row lines)
在这里插入图片描述

3、网格容器

grid-template-columns属性

grid-template-columns:定义网格布局中的列数,并可定义每列的宽度。

* {
  margin: 0px;
}
.container {
  /* 设置为网格布局,并且占据页面一整行 */
  display: grid;
  /* 设置网格列数 这里设置为4列,每一列宽度为100px */
  grid-template-columns: 100px 100px 100px 100px;
  /* 设置网格项目间间隙 */
  gap: 10px 10px;
  background-color: #7bddf6;
  padding: 10px;
}

.container > div {
  border: 1px solid white;
  text-align: center;
  font-size: 20px;
  background-color: #b5f1f7;
}
<div class="container">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
</div>

在这里插入图片描述
通过设置grid-template-columns: auto auto auto auto;可以让每一列自动分配宽度来填满表格容器。
在这里插入图片描述

grid-template-rows 属性

grid-template-rows 属性定义每列的高度。

<div class="container">
   <div>1</div>
   <div>2</div>
   <div>3</div>
   <div>4</div>
   <div>5</div>
   <div>6</div>
   <div>7</div>
   <div>8</div>
 </div>
* {
  margin: 0px;
}
.container {
  /* 设置为网格布局,并且占据一行 */
  display: grid;
  /* 设置网格列数 这里设置为4行,宽度自动 */
  grid-template-columns: auto auto auto auto;
  /* 设置第一行和第二行中每一列的高度 */
  grid-template-rows: 100px 200px;
  /* TODO:把高度设为100%或者auto试试 */
  /* 设置网格项目间间隙 */
  gap: 10px 10px;
  background-color: #7bddf6;
  padding: 10px;
}

.container > div {
  border: 1px solid white;
  text-align: center;
  font-size: 20px;
  background-color: #b5f1f7;
}

justify-content 属性

justify-content 属性用于在容器内对齐整个网格。网格的总宽度必须小于容器的宽度,这样 justify-content 属性才能生效。

<div class="container">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
</div>
* {
  margin: 0;
}
.container {
  display: grid;
  grid-template-columns: auto auto auto auto;
  gap: 10px 10px;
  /* justify-content: space-evenly; */
  /* justify-content: space-between; */
  /* justify-content: space-around; */
  /* justify-content: center; */
  /* justify-content: start; */
  justify-content: end;
  background-color: #99deef;
}

.container > div {
  padding: 10px;
  text-align: center;
  font-size: 20px;
  border: 1px solid white;
  background-color: #d1f3f5;
}

该属性下常用的取值有:

justify-content: space-evenly;
该取值会在列之间以及列周围留出相等的空间。
在这里插入图片描述
justify-content: space-around;
在列周围留出相等的空间
在这里插入图片描述

justify-content: space-between;
该取值会在列之间留出相等的空间。
在这里插入图片描述
justify-content: center;
该取值在容器中间对齐网格。
在这里插入图片描述
justify-content: start;
该取值会在容器开头对齐网格。
在这里插入图片描述
justify-content: end;
该取值会在容器末尾对齐网格。
在这里插入图片描述

justify-items属性

该属性规定网格项在行内方向的对齐方式。在网格容器上设置
在这里插入图片描述

justify-items: start;效果如下:
在这里插入图片描述

justify-items: center效果如下:
在这里插入图片描述
其他的就不写了…

align-content 属性

align-content 属性用于垂直方向上对齐容器内的整个网格。网格的总高度必须小于容器的高度,这样 align-content 属性才能生效。

<div class="container">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
</div>
* {
  margin: 0;
}
.container {
  display: grid;
  grid-template-columns: auto auto auto auto;
  gap: 10px 10px;
  /* 设置容器高度 */
  height: 300px;
  /* align-content: space-evenly; */
  /* align-content: space-between; */
  /* align-content: space-around; */
  /* align-content: center; */
  /* align-content: start; */
  align-content: end;
  background-color: #99deef;
}

.container > div {
  padding: 10px;
  text-align: center;
  font-size: 20px;
  border: 1px solid white;
  background-color: #d1f3f5;
}

align-content:start
对齐容器开头的行。
在这里插入图片描述
align-content:end
对齐容器末尾的行。
在这里插入图片描述

align-content: center;
该取值会让所有子元素在容器水平居中对齐。
在这里插入图片描述
align-content: space-evenly;
该取值使行之间以及行周围具有相等的空间
在这里插入图片描述
align-content: space-around;
将使行周围具有相等的空间
在这里插入图片描述
align-content: space-between;
该取值使行之间具有相等的空间。
在这里插入图片描述
align-content:stretch;
将行拉伸以占据剩余空间。
在这里插入图片描述
align-content:inherit;
从其父元素继承此属性。

4、网格项目

容器中的子元素也叫做项目
通常容器在每一行的每一列都有一个网格项目,但是可以通过设置网格项目的样式,让它们跨越多个列或多个行。

grid-column-start、grid-column-start、grid-column属性

这三个属性用来控制列的合并(应该可以这么理解)

* {
  margin: 0;
}
.container {
  display: grid;
  /* 设置列数,每行6列 */
  grid-template-columns: auto auto auto auto auto auto;
  /* grid-template-rows: ; */
  /* 设置项目间隙 */
  gap: 10px 10px;
  background-color: #abd9f4;
}
.container > div {
  background-color: #cce7f0;
  text-align: center;
  font-size: 20px;
}
/* 表示网格项目放在列线 1,并在 列线 5 结束它,注意是列线,不是第一个表格*/
.item1 {
  grid-column-start: 1;
  grid-column-end: 5;
}
<div class="container">
    <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 class="item10">10</div>
    <div class="item11">11</div>
    <div class="item12">12</div>
    <div class="item13">13</div>
    <div class="item14">14</div>
    <div class="item15">15</div>
  </div>

在这里插入图片描述

grid-column属性
该属性是 grid-column-start,grid-column-end的结合。

grid-column-start: 1; /*从第1个列线开始*/
grid-column-end: 5; /*到第5个列线之前的列*/

可以用grid-column代替为:
grid-column:1 / 5;

或者:
/* 表示从第一列开始,跨越 4 列*/
grid-column: 1 / span 4;
/* 从第 2 列开始,并跨越 3 列 */
grid-column: 2 / span 3;

grid-row-start、grid-row-end、grid-row属性

这几个属性用来控制行的合并。

* {
  margin: 0;
}
.container {
  display: grid;
  /* 设置列数,每行6列 */
  grid-template-columns: auto auto auto auto auto auto;
  /* grid-template-rows: ; */
  /* 设置项目间隙 */
  gap: 10px 10px;
  background-color: #abd9f4;
}
.container > div {
  background-color: #cce7f0;
  text-align: center;
  font-size: 20px;
}
/* 合并行第1列(item1)中第1行线到第4行线之间的值 */
.item1 {
  grid-row-start: 1;
  grid-row-end: 4;
}

/*或者:表示合并第1列(item1)中第1行线到第4行线之间的值*/
/*
.item1{
	grid-row:1 / 4;
}
*/
/* 或者:表示从第1行线开始跨越3行*/
/*
.item1{
	grid-row:1 / span3;
}
*/
<div class="container">
  <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 class="item10">10</div>
  <div class="item11">11</div>
  <div class="item12">12</div>
  <div class="item13">13</div>
  <div class="item14">14</div>
  <div class="item15">15</div>
  <div class="item15">16</div>
</div>

在这里插入图片描述

grid-area 属性

该属性可以用作 grid-row-start、grid-column-start、grid-row-end 和 grid-column-end 属性的简写属性。

.item8 {
  grid-area: 1 / 2 / 5 / 6;
}

表示使 “item8” 从 row-line 1 和 column-line 2 开始,在 row-line 5 和 column line 6 结束

.item8 {
  grid-area: 2 / 1 / span 2 / span 3;
}

表示使 “item8” 从 row-line 2 和 column-line 1开始,并跨越 2 行和 3 列

grid-area 属性也可以用于为网格项目分配名称通过网格容器的 grid-template-areas 属性来引用命名的网格项目,使用如下:

<!DOCTYPE html>
<html>
  <head>
    <style>
      /* 命名*/
      .item1 {
        grid-area: header;
      }
      .item2 {
        grid-area: menu;
      }
      .item3 {
        grid-area: main;
      }
      .item4 {
        grid-area: right;
      }
      .item5 {
        grid-area: footer;
      }

      /* 定义容器 */
      .container {
        display: grid;
        grid-template-areas:
          "header header header header header header"
          "menu main main main right right"
          "menu footer footer footer footer footer";
        grid-gap: 10px;
        background-color: #84d7ee;
        padding: 10px;
      }

      /* 定义项目 */
      .container > div {
        background-color: rgba(190, 235, 246, 0.8);
        text-align: center;
        padding: 20px 0;
        font-size: 30px;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="item1">Header</div>
      <div class="item2">Menu</div>
      <div class="item3">Main</div>
      <div class="item4">Right</div>
      <div class="item5">Footer</div>
    </div>
  </body>
</html>

在这里插入图片描述
让命名的项目跨越五列网格布局中的两列(英语句号代表没有名称的项目,与句号数量无关,就是3个句号),如下:

<!DOCTYPE html>
<html>
  <head>
    <style>
      .item1 {
        grid-area: myArea;
      }

      .container {
        display: grid;
        grid-template-areas: "myArea myArea . . .";
        grid-gap: 10px;
        background-color: #9ccdf5;
        padding: 10px;
      }

      .container > div {
        background-color: rgba(176, 235, 245, 0.8);
        text-align: center;
        padding: 20px 0;
        font-size: 30px;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <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>

在这里插入图片描述
“item1” 跨越两列和两行,如下:

.item1 {
  grid-area: myArea;
}

.grid-container {
  grid-template-areas: 'myArea myArea . . .' 'myArea myArea . . .';
  /* 注意这里的引号,空格将引号包裹的值而分开了*/
} 

justify-self 属性

规定网格项在行内方向的对齐方式。在网格项上设置。优先级比justify-items高。
在这里插入图片描述

<div class="container">
    <div class="item1">1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
    <div>6</div>
    <div>7</div>
    <div>8</div>
</div>
* {
  margin: 0;
}
.container {
  display: grid;
  grid-template-columns: auto auto auto auto;
  gap: 10px 10px;
  /* 设置容器高度 */
  height: 300px;
  /* justify-items: center; */
  justify-items: start;
  /* justify-items: end; */
  /* justify-items: left; */
  /* justify-items: right; */
  /* justify-items: end; */
  /* justify-items: stretch; */
  /* justify-items:overflow-alignment; */

  background-color: #99deef;
}

.container > div {
  padding: 10px;
  text-align: center;
  font-size: 20px;
  border: 1px solid white;
  background-color: #d1f3f5;
}

.item1{
  justify-self: end;
}

在这里插入图片描述

通过媒体查询改变表格项目的位置

<!DOCTYPE html>
<html>
  <head>
    <style>
      .container {
        display: grid;
        grid-template-columns: auto auto auto;
        grid-gap: 10px;
        background-color: #2196f3;
        padding: 10px;
      }

      .container > div {
        background-color: rgba(255, 255, 255, 0.8);
        text-align: center;
        padding: 20px 0;
        font-size: 30px;
      }
	/* 当屏幕宽度设置为500px,表格项目位置开始改变*/
      @media only screen and (max-width: 500px) {
        .item1 {
          /* 表示从第1行线开始,到第2行线结束,跨三列,到第4列线*/
          grid-area: 1 / span 3 / 2 / 4;
        }
        .item2 {
          grid-area: 3 / 3 / 4 / 4;
        }
        .item3 {
          grid-area: 2 / 1 / 3 / 2;
        }
        .item4 {
          grid-area: 2 / 2 / span 2 / 3;
        }
        .item5 {
          grid-area: 3 / 1 / 4 / 2;
        }
        .item6 {
          grid-area: 2 / 3 / 3 / 4;
        }
      }
    </style>
  </head>
  <body>
    <div class="container">
      <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>
  </body>
</html>

在这里插入图片描述
当屏幕宽度为500px时,变为如下:
在这里插入图片描述

5、对比flex

1、和flex布局相比之下的区别
Grid网格布局和flexbox的主要区别:flexbox是一维布局(沿横向或者纵向),Grid是二维布局(同时沿着横向和纵向)

举例:当使用flexbox布局,设置了flex-wrap :
nowrap;之后,换行后的元素并不会与上一行的元素对齐,当使用了nowrap之后,每个新行都变成了一个新的弹性容器,空间分布只在行内进行。

2、什么情况下选择grid布局还是flexbox布局?
可参考以下三点:
(1)换行需要与上一行元素对齐?选择Grid
(2)需要同时按行和列控制布局?选择Grid
(3)只需要按行或者列控制布局?选择flexbox

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

4.2.2字符串KMP算法

对朴素模式匹配算法的优化&#xff1a; 当我们匹配最后一个字符才发现匹配失败。 那么前面这些字符一定是与模式串对应的。 通过模式串的部分匹配 朴素模式匹配算法优化思路&#xff1a; 不匹配的字符之前&#xff0c;一定是和模式串一致的。 可以跳过中间好几个没有必要的对比…

如何将项目提交到别人的仓库

大纲&#xff1a; 1、在gitee中克隆(clone)别人仓库的代码。 首先&#xff0c;进入别人的仓库&#xff0c;点击 克隆/下载 2、在你存放项目的文件夹下克隆你刚刚复制的代码 &#xff08;右键点击Git Clone即可&#xff09; 点击OK 就开始克隆了 克隆成功之后&#xff0c;文件上…

Maya英文界面怎么改为中文界面

Maya是一款3D动画和视觉效果软件&#xff0c;用于创建逼真的角色和大片般的效果&#xff0c;也是受到电影、电视和游戏行业的 3D 建模师、动画师、照明艺术家和 VFX 艺术家等多数人喜爱的一款3D软件。我们在使用Maya的过程中&#xff0c;常常会遇到一些小阻碍&#xff0c;比如M…

蓝牙耳机接打电话哪个比较好?接打电话最好的蓝牙耳机

技术已经发展到如此程度&#xff0c;耳机可以淹没嘈杂环境中不断出现的杂音&#xff0c;同时还能让我们在通话、音乐和娱乐方面保持清晰&#xff0c;既然如此&#xff0c;我们就来整理一下2023年适合通话和娱乐的无线耳机清单。 一、南卡小音舱Lite2蓝牙耳机 参考价格&#x…

基于Java+jquery+SpringMVC校园网站平台设计和实现

基于JavajquerySpringMVC校园网站平台设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目…

IDEA22.3.3的三个常用经常遇到的配置问题

1、期待效果&#xff1a;【打开iDEA的时候&#xff0c;让开发者选择需要打开的项目】 设置如下 2、期待效果&#xff1a;配置默认的Maven&#xff0c;避免每次新建项目后&#xff0c;都需要去修改Maven配置 同理&#xff0c;修改默认的java版本和自己本地java环境一致 3、新建…

【C++】哈希的应用——布隆过滤器

哈希的应用——布隆过滤器 文章目录 哈希的应用——布隆过滤器一、布隆过滤器的概念与性质1.布隆过滤器的引出2.布隆过滤器的概念3.布隆过滤器的误判4.布隆过滤器的应用场景5.布隆过滤器优缺点6.如何选择哈希函数个数和布隆过滤器长度 二、布隆过滤器的实现1.布隆过滤器基本框架…

【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

IDEA 用上这款免费 GPT4 插件,生产力爆表了

早前给大家分享过GPT的一些玩法&#xff0c;今天再分享给一款 IDE 插件&#xff1a;Bito-ChatGPT &#xff0c;安装就能直接在IDE中使用 GPT&#xff0c;就算是不会魔法&#xff0c;同样也能使用&#xff1b; 最重要是免费使用&#xff0c;速度也非常可观&#xff0c;今天分享…

看板与 Scrum:有什么区别?

看板和Scrum是项目管理方法论&#xff0c;以小增量完成项目任务并强调持续改进。但是他们用来实现这些目标的过程是不同的。看板以可视化任务和连续流程为中心&#xff0c;而Scrum更多是关于为每个交付周期实施时间表和分配设定角色。 在看板和Scrum之间做出选择并不总是必要…

2022年NOC大赛创客智慧编程赛道图形化scratch复赛题,包含答案解析

目录 2022 年 NOC 大赛创客智慧编程图形化复赛用题 下载文档打印做题:

SpringCache

一、介绍 Spring Cache是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能&#xff0c;大大简化我们在业务中操作缓存的代码。 Spring Cache只是提供了一层抽象&#xff0c;底层可以切换不同的cache实现。具体就…

面试2个月没有一个offer?阿里技术官的800页知识宝典打破你的僵局~

在经历了一波裁员浪潮后&#xff0c;大环境似乎有所好转&#xff0c;但对于面试者来说&#xff0c;面试愈发困难&#xff0c;现在面试官动不动就是底层原理&#xff0c;动不动就是源码分析&#xff0c;面试一定会抓你擅长的地方&#xff0c;一直问&#xff0c;问到你不会为止。…

深入理解Javascript事件处理机制

深入理解javascript事件处理机制 前言 在开发web应用程序时&#xff0c;事件处理机制是javascript中至关重要的一部分。许多高级特性&#xff0c;如事件冒泡、事件捕获和事件委托&#xff0c;都是通过事件处理来实现的。熟练掌握这些技术可以帮助我们更好地组织代码、提高代码…

pwlink用作USB转TTL,进入HC-05的AT模式

不说废话的文章概括&#xff1a; 直接连接PWLINK与HC-05&#xff0c;无法进入AT模式&#xff0c;因为蓝牙模块的VCC只能接5V&#xff0c;不能接3.3V&#xff0c;而且PWLINK有两个VDD引脚&#xff0c;且两个VDD引脚初始默认输出电压都是3.3V&#xff0c;所以需要将3.3V改为5V的…

Centos8编译安装内核

首先下载kernel&#xff0c;5.x版本的内核&#xff0c;下载地址&#xff1a; https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ 系统安装相关包&#xff1a; # yum install -y bc gcc make python3 ncurses-devel flex bison openssl-devel elfutils-libelf-devel将内…

大数据数仓维度建模

目录 维度建模分为三种&#xff1a; 1、星型模型&#xff1a; 2、雪花模型&#xff1a; 3、星座模型&#xff1a; 模型的选择&#xff1a; 维度表和事实表&#xff1a; 维度表&#xff1a; 维度表特性 &#xff1a; 事实表&#xff1a; 事实表特性&#xff1a; 事务型…

2023年定向增发研究报告

第一章 行业概况 定向增发是增发的一种&#xff0c;是指上市公司向符合条件的少数特定投资者非公开发行股份的行为&#xff0c;有时也称“定向募集”或“私募”。定向增发的发行价格由参与增发的投资者竞价决定&#xff0c;发行程序与公开增发相比较为灵活。一般认为&#xff…

亿发软件:中大型仓库进出货管理系统解决方案,定制软件让仓储作业高效便捷

中大型仓库出入库管理是传统厂家供应链管理流程的重要部分&#xff0c;直接关乎货物在仓库当中存储的安全&#xff0c;和员工工作的效率。一旦仓库管理当中出现了疏漏&#xff0c;那么货物的信息数据就会发生变动&#xff0c;导致实际与账目不符。人工带来的低效与不可控是传统…

Dcoekr 部署前后端分离项目SpringBoot +Vue

1.docker 部署vue docker 安装 nginx的镜像 niginx 配置文件 nginx.conf #user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections…