返回顶部
首页 > 资讯 > 前端开发 > JavaScript >羊了个羊的中强大的Grid布局
  • 291
分享到

羊了个羊的中强大的Grid布局

2024-04-02 19:04:59 291人浏览 薄情痞子
摘要

目录Grid布局中的概念几个函数、单位auto-fill 与 auto-fit的区别Grid布局和其他布局的区别网格线编号布局网格线名称布局网格区域名称布局Grid布局轴线对齐对齐元

Grid布局中的概念

Grid 布局则是将容器划分成“行"和“列”,产生单元格,然后指定"项目所在”的单元格,可以看作是二维布局,Flex布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局,Grid布局远比Flex布局强大。

学习grid布局首先要了解一些名词概念的含义

  • 网格容器: 把一个元素设为网格容器的方法,添加属性 display: grid/inline-grid;容器上有它专门的属性;
  • 网格线:或称为网格轨道,把网格容器内的网格单元分割开,用浏览器的Grid Inspector 功能可看到网格线;
  • 网格项目:或称网格元素,就是放在网格容器内的内容;
  • 网格单元/网格区域:网格元素中的最小单位,多个网格单元可称为网格区域;
  • 网格间距:网格线/网格轨道的宽度称为成网格间距;
  • 嵌套网格:网格容器内可嵌套另一个或几个网格;
  • Grid Inspector:浏览器提供的方便查看grid布局的工具

几个函数、单位

有几个grid布局中特有的单位/函数

  • fr:网格容器中可用空间的一等分
  • repeat():标识多个重复部分,例如repeat(3, 100px),表示3个100px;
  • minmax():函数产生一个长度范围,表示长度就在这个范围之中,它接受两个参数,分别为最小值和最大值,比如minmax(100px, 200px)表示长度范围是最小值100px,最大值200px;
  • span:跨度,网格线布局时,表示网格项目跨几个网格单元;
  • auto-fill:有时网格单元的大小是固定的,但是容器的大小不确定,这个属性会根据容器大小尽可能多的分配网格,剩余的均分给网格单元;空白的网格单元留空;
  • auto-fit:有时网格单元的大小是固定的,但是容器的大小不确定,这个属性会根据容器大小尽可能多的分配网格,剩余的均分给网格单元;空白的网格单元不留空,再次均分给网格单元;

auto-fill 与 auto-fit的区别

ul {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  // grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}

其中核心为:grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));意思每个子元素至少需要200px的宽度,如果视口宽度足够就平均分配剩余空间给每个子元素,至于换行问题需要看分配的所有的轨道空间够不够200,如果不够200就换一行,把多的元素换行,比如有580px(不考虑gap),不足以容纳3*200=600,3个子元素,那么就换行,一行两个子元素,那么剩余的80px呢,这就属于剩余空间 ,将(1fr)平均分配给两个轨道。

这里涉及填充模式中的auto-fitauto-fill的区别,auto-fitauto-fill只有在容器宽度大于子元素的最小宽度总和时才有显示区别,例如容器随着窗口现在有1500px宽度,子元素在一行排列总共需要600px(不考虑gap)。

auto-fitauto-fill首先会尽可能多的创建基于min的200px的轨道宽度,例如创建1500/200=7.5。那么会有7个轨道的200px还剩余了100px的剩余空间,接着会把这100px再次分配到这7个轨道中,100/7=14.28。所以每个轨道的宽度现在为214.28px。到这里auto-fillauto-fit做的事情是一样的:

1.首先尽可能的以最小宽度创建轨道;

2.不足一个轨道的空间,等分给已有的轨道;

接下来:auto-fil auto-fill对空白轨道的处理不同

3.auto-fill 不占用空白轨道,auto-fit把空白轨道均分给有内容轨道;

值得注意的是这种区别是在容器中元素数量元素的最小宽度<容器的总宽度时才会显示看到的差异,如果元素数量最小宽度>容器宽度,那么auto-fillauto-fit展现的效果是一样的

Grid布局和其他布局的区别

  • 传统布局方式:利用position属性 + display属性 + float属性布局, 兼容性最好, 但是效率低, 麻烦!
  • flex布局方式:有自己的一套属性, 效率高, 学习成本低, 兼容性强!
  • grid布局:网格布局(grid)是最强大的布局方案, 但是知识点比较多, 学习成本相对较高, 目前兼容性不如flex布局!另外grid布局可通过设置属性变为和flex布局一样的效果。

网格线编号布局

当你使用网格布局时,编号线总是存在。这些线从 1 开始按行和列编号。

例如:我们定义一个三行三列的布局如下,行和列方向上我们有 4 条线。

  .wrapper {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(3, 100px);
  }

现需要一个网格区域是从最左上角开始,横向占一列,纵向占三行,可以如下写:

  grid-column-start: 1;
  grid-column-end: 2;
  grid-row-start: 1;
  grid-row-end: 4;

grid-columngrid-row可简写如下:

  grid-column: 1/2;
  grid-row: 1/4;

可用默认跨度为1简写如下:

  grid-column-start: 1;
  grid-row-start: 1;
  grid-row-end: 4;

可用默认跨度为1加上grid-columngrid-row可简写:

  grid-column: 1;
  grid-row: 1/4;

可使用grid-area简写为:

  grid-area: 1/1/4/2;

可使用span表示跨度简写为:

  grid-column: 1;
  grid-row: 1 / span 3;

网格线名称布局

grid-template-rowsgrid-template-columns属性定义网格时,可命名网格线;

.wrap {
  display: grid;
  grid-template-columns: [main-start] 1fr [content-start] 1fr [content-end] 1fr [main-end];
  grid-template-rows: [main-start] 100px [content-start] 100px [content-end] 100px [content-end];
}

grid-area命名网格区域,则隐式的创建行列网格线;

例如:

  grid-area: hd;

则隐式的命名网格线: hd-start hd-end

[sidebar-start main-start]可定义网格线的多个名字;

有了网格线名称则可以用来定位布局项目:

.box1 {
  grid-column-start: main-start;
  grid-column-end: main-end;
  grid-row-start: main-start;
  grid-row-end: main-end;
}

网格区域名称布局

使用grid-area命名网格区域,在网格容器内用grid-template-areas指定区域位置:

  .header { grid-area: hd }
  .footer { grid-area: ft }
  .sidebar { grid-area: sb }
  .content { grid-area: main }
  .wrap {
    display: grid;
    grid-template-rows: minmax(100px, auto);
    grid-template-columns: repeat(3 1fr);
    grid-template-areas: 
      "hd hd hd"
      "sb main main"
      "ft ft ft"
  }

使用grid-template可同时设置属性:grid-template-rowsgrid-template-columnsgrid-template-areas

上例可简写:

  .header { grid-area: hd }
  .footer { grid-area: ft }
  .sidebar { grid-area: sb }
  .content { grid-area: main }
  .wrap {
    display: grid;
    grid-template: 
      "hd hd hd" minmax(100px auto)
      "sb main main" minmax(100px auto)
      "ft ft ft" minmax(100px auto)
      / 1fr 1fr 1fr
  }

使用grid可同时设置属性:grid-template-rowsgrid-template-columnsgrid-template-areasgrid-auto-rowsgrid-auto-columnsgrid-auto-flow;注:此属性会把 grid-gap值重置为0;

上例可简写:

  .header { grid-area: hd }
  .footer { grid-area: ft }
  .sidebar { grid-area: sb }
  .content { grid-area: main }
  .wrap {
    display: grid;
    grid: 
      "hd hd hd" minmax(100px auto)
      "sb main main" minmax(100px auto)
      "ft ft ft" minmax(100px auto)
      / 1fr 1fr 1fr
  }

grid-template-areas中留空的单元用句点符'.'占位;

Grid布局轴线对齐

网格布局方式下共有两条轴线用于对齐——块轴(一般垂直方向的)和行轴(内联轴)。块方向的轴是采用块布局时块的排列方向。行轴与块方向的轴垂直,它的方向和常规内联流中的文本方向一致。

对齐元素到块轴的属性是align-items align-self

作用在网格容器上的属性 align-items 的取值有:

  • auto
  • nORMal
  • start
  • end
  • center
  • stretch
  • baseline
  • first baseline
  • last baseline

作用在网格元素上的属性 align-self 的取值同 align-items

对齐元素到行轴的属性是justify-items justify-self

justify-items作用在网格容器上,justify-self作用在网格元素上,取指同以上两个属性。

place-items 属性是对 align-itemsjustify-items 的简写。

place-self 属性是对 align-selfjustify-self 的简写。

对齐网格轨道到块轴的属性是 align-content

作用在网格容器上,其值有:

  • normal
  • start
  • end
  • center
  • stretch
  • space-around
  • space-between
  • space-evenly
  • baseline
  • first baseline
  • last baseline

对齐网格轨道到行轴的属性是 justify-content

其属性值同align-contentspace-content是对 align-content justify-content的缩写。

布局示例

  • 使元素内容水平、垂直居中
.wrapper {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-auto-rows: 200px;
}
.item1 {
  align-self: center;
  justify-self: center;
}
  • 使元素在网格容器内水平、垂直居中
.wrapper {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: repeat(3, 200px);
  grid-template-areas:
    ". . . "
    ". a . "
    ". . . ";
}
.item1 {
  grid-area: a;
}
  • 自动填充网格轨道
.wrapper {
  display: grid;
  grid-template-columns: repeat(auto-fill, 200px);
}
  • 灵活的轨道数量
.wrapper {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}

以上就是羊了个羊的中强大的Grid布局的详细内容,更多关于羊了个羊 Grid布局的资料请关注编程网其它相关文章!

--结束END--

本文标题: 羊了个羊的中强大的Grid布局

本文链接: https://lsjlt.com/news/167967.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 羊了个羊的中强大的Grid布局
    目录Grid布局中的概念几个函数、单位auto-fill 与 auto-fit的区别Grid布局和其他布局的区别网格线编号布局网格线名称布局网格区域名称布局Grid布局轴线对齐对齐元...
    99+
    2024-04-02
  • 使用Vue3实现羊了个羊的算法
    目录前言大纲在线演示初始化的随机位置算法检查是否被覆算法碰撞检测覆盖算法实现三连匹配算法队列区排序算法总结前言 这两天社区很多羊了个羊的web实现,虽然各种实现花里花哨,然而,并没有...
    99+
    2024-04-02
  • 效果最接近《羊了个羊》(卡牌堆叠游戏)的开源代码
    ⭐零、教程概述 效果最接近《羊了个羊》(卡牌堆叠游戏)的开源代码,有数据库和关卡。 我写的程序是指 卡牌堆叠游戏 ,效果与羊了个羊一致。本教程有两个版本 PHP 使用 PHP + H5 + CSS +...
    99+
    2023-09-06
    游戏 开源 c++ html5 php
  • 如何理解CSS Grid布局中的网格布局
    本篇内容主要讲解“如何理解CSS Grid布局中的网格布局”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解CSS Grid布局中的网格布局”吧!为什么我们...
    99+
    2024-04-02
  • css3中dispaly的Grid布局与Flex布局有什么不同
    这篇“css3中dispaly的Grid布局与Flex布局有什么不同”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“css3中dispaly的Grid布局与Flex布局有什么不同”,给大家总结了以下内容,具有一定借鉴价值,内容...
    99+
    2023-06-08
  • Python中Tkinter布局管理grid的使用
    目录何时使用 grid 管理器?用法方法pack、grid 和 place 均用于管理同在一个父组件下的所有组件的布局,其中: pack 是按添加顺序排列组件grid 是按行/列形式...
    99+
    2024-04-02
  • CSS中Grid网格布局的示例分析
    这篇文章主要介绍CSS中Grid网格布局的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!介绍CSS Grid(网格) 布局使我们能够比以往任何时候都可以更灵活构建和控制自定义...
    99+
    2024-04-02
  • 强大的CSS:实现平行四边形布局效果
    如何实现下图所示的平行四边形布局效果?...
    99+
    2023-06-03
  • 了解五个常用的CSS布局框架
    CSS布局框架:探索常用的五大布局框架 引言:在网页设计中,布局是至关重要的一环。而CSS布局框架可以帮助我们快速地搭建出具有不同布局风格的网页。本文将介绍其中的五个常用的CSS布局框架,并提供具体的代码示例,以帮助读者更好地理...
    99+
    2024-01-16
    Grid FLEXBOX
  • 6款强大的创建和加强网站布局的jQuery插件分别是哪些
    本篇文章给大家分享的是有关6款强大的创建和加强网站布局的jQuery插件分别是哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。下面介绍了6款...
    99+
    2024-04-02
  • Yii框架的锋利之刃:揭秘视图、小部件和布局的强大功能
    视图 视图是包含应用程序呈现给用户的标记、内容和逻辑的PHP脚本。Yii视图从控制器接收数据,然后使用模板引擎(例如Smarty或Twig)呈现该数据。模板引擎允许开发者使用逻辑和控制语句轻松地从视图中创建复杂的标记结构。 小部件 小部件...
    99+
    2024-04-02
  • SiteMapPath 揭秘:了解其在 ASP.NET 中的强大功能
    工作原理 SiteMapPath基于ASP.NET站点地图文件(.sitemap)。该文件定义了网站的层次结构,指定每个页面相对于根节点的位置。SiteMapPath控件从站点地图中提取当前页面的路径信息,并将其显示为一个分层列表。 用法...
    99+
    2024-04-02
  • 微软宣布在 Excel 中使用 Python:结合了 Python 的强大功能和 Excel 的灵活性。
    文章目录 Excel 中的 Python 有何独特之处?1. Excel 中的 Python 是为分析师构建的。高级可视化机器学习、预测分析和预测数据清理 2. Excel 中的 Pyt...
    99+
    2023-08-31
    microsoft excel python Windows 运维
  • 了解 ASP 存储 日志的分布式架构,让你的应用更加强大!
    在现代应用程序开发中,跟踪和存储日志信息是非常重要的。ASP.NET 是一种常见的 Web 开发框架,它提供了丰富的日志记录功能,可以帮助开发人员追踪应用程序中的问题并诊断故障。然而,当应用程序规模变大时,单一的日志存储可能会变得不够用。...
    99+
    2023-06-30
    存储 日志 分布式
  • Android App中的多个LinearLayout嵌套布局实例解析
    在做android  UI布局时,用了LinearLayout嵌套,发现效果并不如我预料一般 查了下资料,说是要设置layout_weight属性 资料说得不是很清楚...
    99+
    2022-06-06
    布局 app Android
  • FlexBuilder2.0中怎么创建一个基于约束的布局
    FlexBuilder2.0中怎么创建一个基于约束的布局,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。FlexBuilder2.0中创建基于约束的布局这个速学教...
    99+
    2023-06-17
  • 学习Python中的Numpy:如何使用这个强大的容器?
    Python是一种非常流行的编程语言,因为它易于学习、易于阅读和编写,同时也具有很强的可扩展性。然而,Python的默认数据结构并不适合数值计算。在这种情况下,Numpy就是一个非常有用的工具。Numpy是一个Python库,用于处理大量...
    99+
    2023-09-08
    容器 numpy 日志
  • VUE Nuxt.js布局高级进阶技巧:解锁更多可能性,构建更强大的应用
    深入理解 Nuxt.js 布局系统 Nuxt.js 是一个基于 Vue.js 的通用框架,提供了一系列开箱即用的功能,帮助您快速开发单页应用(SPA)。布局系统是 Nuxt.js 的核心功能之一,它允许您轻松创建和管理应用的布局。 Nu...
    99+
    2024-02-23
    Nuxt.js 布局 进阶技巧 组件 布局系统
  • DIV居中布局的三大实现方法分别是什么
    这篇文章给大家介绍DIV居中布局的三大实现方法分别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。你对DIV居中布局的方法是否了解,这里和大家分享一下,因为现在DIV+CSS布局越...
    99+
    2024-04-02
  • 掌握numpy:从入门到应用,深入了解这个强大的数学库
    numpy解析:从基础到应用,全方位了解这个强大的数学库 导语:在数据科学和机器学习领域,处理和分析大量数据是至关重要的。而numpy作为Python的一个强大的数学库,在数据处理和科学计算方面发挥着重要作用。本文将以numpy...
    99+
    2024-01-26
    应用 Numpy 解析
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作