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

目录
  • Grid布局中的概念
  • 几个函数、单位
  • auto-fill 与 auto-fit的区别
  • Grid布局和其他布局的区别
  • 网格线编号布局
  • 网格线名称布局
  • 网格区域名称布局
  • Grid布局轴线对齐
    • 对齐元素到块轴的属性是align-items align-self
    • 对齐元素到行轴的属性是justify-items justify-self
    • 对齐网格轨道到块轴的属性是 align-content
    • 对齐网格轨道到行轴的属性是 justify-content
  • 布局示例

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布局的资料请关注我们其它相关文章!

(0)

相关推荐

  • 羊了个羊通关脚本Vue node实现版本

    目录 vue-sheep 特性 使用 预览截图 vue-sheep 本项目使用 vue2 + nodejs实现羊了个羊快速通关,仅为学习使用,请勿使用本程序恶意对游戏服务器持续造成压力,一切后果自负!!!t 参数包含个人信息,任何情况请勿泄漏 工具推荐: Fiddler/HTTPDebugger/Charles[PC].HttpCarry[Android].Stream[iphone] github地址 vue-sheep 特性 支持在线填写抓包参数 支持随机生成时间和自定义时间 最大支持10次

  • 在echarts中图例legend和坐标系grid实现左右布局实例

    1.效果图 2.实现方法 将图例legend纵向排列(orient: 'vertical'),宽度给150(width: 150),坐标系grid左侧距离200(left: 200),中间有50的边距 3.代码展示 grid: { left: 200 }, legend: { x: 'left', data: ['送风温度', '混风温度', '冷冻水送水温度', '冷冻水回水温度', '热水送水温度', '热水回水温度', '送风温度设定点', '风机速度','风机速度反馈','风阀开度'],

  • Vue3.0利用vue-grid-layout插件实现拖拽布局

    目录 1.插件 2.插曲 3.实现 4.校验函数 1.插件 首先,我们选择的插件是vue-grid-layout npm i vue-grid-layout --save 官网:https://jbaysolutions.github.... 2.插曲 安装完依赖,发现项目能启动起来,按照官网demo发现页面空白,控制台提示没有找到子组件 改变思路,不使用局部引入组件,使用全局引入组件. 3.实现 const layout = ref<LayoutItem[]>([ { x: 0, y: 0,

  • python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例

    PyQt5布局控件QGridLayout简介 QGridLayout(网格布局)是将窗口分割成行和列的网格来进行排列,通常可以使用函数addWidget()将被管理的控件(Widget)添加到窗口中,或者使用addLayout()函数将布局(layout)添加到窗口中,也可以通过addWIdget()函数对所添加的控件设置行数与列数的跨越,最后实现网格占据多个窗格 QGridLayout类中常用的方法 方法 描述 addWidget(QWidget Widget,int row,int col,

  • QT布局管理详解QVBoxLayout与QHBoxLayout及QGridLayout的使用

    目录 main.cpp mainwindow.h mainwindow.cpp ui界面设计 登录界面为例 总结 main.cpp #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; return a.exec(); } mainwindow.h #ifndef MAINWIND

  • Python中Tkinter布局管理grid的使用

    目录 何时使用 grid 管理器? 用法 方法 pack.grid 和 place 均用于管理同在一个父组件下的所有组件的布局,其中: pack 是按添加顺序排列组件grid 是按行/列形式排列组件place 则允许程序员指定组件的大小和位置 何时使用 grid 管理器? grid 管理器可以说是 Tkinter 这三个布局管理器中最灵活多变的.如果你只希望学习使用一个布局管理器,那么 grid 绝对是首选.当你在设计对话框的时候,使用 gird 尤其便捷.如果你此前一直在用 pack 构造窗口

  • WPF使用Grid网格面板布局

    Grid:网格面板 Grid顾名思义就是“网格”,以表格形式布局元素,对于整个面板上的元素进行布局,它的子控件被放在一个一个事先定义好的小格子里面,整齐配列. Grid和其他各个Panel比较起来,功能最多也最为复杂.要使用Grid,首先要向RowDefinitions和ColumnDefinitions属性中添加一定数量的RowDefinitions和 ColumnDefinitions元素,从而定义行数和列数.而放置在Grid面板中的控件元素都必须显示采用Row和Column附加属性定义其放

  • JS实现羊了个羊小游戏实例

    目录 引言 rem布局方案 popbox.js使用原理 html代码 样式代码 javascript代码 导入图片素材列表 startHandler函数实现 randomList 工具方法 clickHandler函数内部 createShadow方法 startHandler后续的逻辑 引言 这两天火爆全场的<羊了个羊>游戏,相信大家都玩过了,那么在玩这个游戏的同时,我想大家都会好奇这个游戏的实现,本文就带大家使用css,html,js来实现一个动物版的游戏. 首先我用到了2个插件,第一个插

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

    目录 Grid布局中的概念 几个函数.单位 auto-fill 与 auto-fit的区别 Grid布局和其他布局的区别 网格线编号布局 网格线名称布局 网格区域名称布局 Grid布局轴线对齐 对齐元素到块轴的属性是align-items align-self 对齐元素到行轴的属性是justify-items justify-self 对齐网格轨道到块轴的属性是 align-content 对齐网格轨道到行轴的属性是 justify-content 布局示例 Grid布局中的概念 Grid 布局

  • 教你给《羊了个羊》配置一套智能客服系统

    目录 ▲ <羊了个羊>游戏界面 ▲<羊了个羊>官方微博通告 几乎是一夜之间,微信小游戏<羊了个羊>火了.​ 这个依靠寻找相同元素消除方块的小游戏,凭借其“变态级别”的游戏难度成功破圈,闯入了无数人的休闲时间,并数次冲上热搜. 当然,很多人在微博.朋友圈对它的评价主要是:连第一关都过不了! ▲ <羊了个羊>游戏界面 对于这样一个规模不大的小游戏开发团队来说,收获超高人气的同时,头疼的事情发生了: ▲<羊了个羊>官方微博通告 是的,突然涌入的大量玩家

  • python中强大的format函数实例详解

    python中format函数用于字符串的格式化 自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数可以快速处理各种字符串. 语法 它通过{}和:来代替%. 请看下面的示例,基本上总结了format函数在python的中所有用法 #通过位置 print '{0},{1}'.format('chuhao',20) print '{},{}'.format('chuhao',20) print '{1},{0},{1}'.format('chuhao',20) #

  • 羊了个羊破解方法(嘎嘎猛已入羊群n次)

    可无限刷新道具 直至通关 嘿嘿 已入羊群 1.pc端微信换成提供的旧版本 2.微信->设置->文件管理->打开文件夹->返回上一级打开WeChat Files目录下的Applet,打开进入其中的wx141bfb9b73c970a9文件夹,里面会有个数字文件夹,把里面的文件用提供的__WITHOUT_MULTI_PLUGINCODE__替换掉即可. !!!经本人测试找到的未修复的bug: 一旦通关一次后,后续入羊群不再需要循环浪费时间淦帝,只需要点换装点击新皮肤,点确定即可嘎嘎增加入

  • 利用Matlab复刻羊了个羊小游戏

    目录 效果 完整代码 今天就是国赛的第一天 直接开摆 打国赛不如玩羊了个羊 玩羊了个羊不如玩MATLAB版 写作不易留个赞叭(比赛之余放松一下也行,反正MATLAB版我设置的是可以无限刷新...早晚能赢) 效果 完整代码 看效果就知道肯定用来相关素材包,因此只有代码无法运行,需要m文件所在文件夹存在羊了个羊素材包material.mat,素材包放在文末: function sheeeppp % @author : slandarer % gzh : slandarer随笔 clc;clear m

  • Android在代码中设置沉浸式布局的方法

    先导入该包,进行 系统systemBar 管理 compile 'com.readystatesoftware.systembartint:systembartint:1.0.3' 在BaseActivity中添加 该 字段: public class BaseActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { if (Build.VERSION.SDK_INT >=

  • Android 中RecyclerView多种item布局的写法(头布局+脚布局)

    RecyclerView多个item布局的写法(头布局+脚布局) 上图 github 下载源码 Initial commit第一次提交的代码,为本文内容 以下的为主要代码,看注释即可,比较简单 MainActivity 含上拉加载更多 package com.anew.recyclerviewall; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivi

  • 探究Android中ListView复用导致布局错乱的解决方案

    首先来说一下具体的需求是什么样的: 需求如图所示,这里面有ABCD四个选项的题目,当点击A选项,如果A是正确的答案,则变成对勾的图案,如果是错误答案,则变成错误的图案,这里当时在写的时候觉得很简单,只要是在点击的时候判断我点击的选项与正确答案是否一样,是一样就将图片换成正确的样式,如果不一样就换成错误的样式,于是我便写了下面的代码(只贴出了核心Adapter中的代码) package com.fizzer.anbangproject_dahuo_test.Adapter; import andr

随机推荐