网格布局之网格元素放置算法

接下来的网格元素放置算法将网格元素的自动位置解析为确定位置,确保每个网格元素具有布局明确的网格区域。(Grid spans 不需要特别的解析;如果没有明确指定,默认是1)

注意:当显式网格中没有位置放置自动放置的网格元素的时候该算法可以在隐式网格中创建新的行或列。

每个网格单元(无论是在显式还是隐式网格中)都可以是 占用 或者 未占用。一个被网格元素的网格区域覆盖的单元是占用的,否则这个单元是未占用。在算法执行期间单元的占用/未占用状态是可以改变的。

为了明晰起见,该算法是在假设grid-auto-flow已指定row的情况下编写的。如果将其设置为’column’,则需要交换算法中提到的row为column,内联和块等。

注意:自动放置算法工作于网格元素的order-modified document顺序,不是它们出现在元文档中的顺序。

  1. 为网格容器内没有元素包裹的连续的非空白字符文字生成匿名网格元素 。(因为匿名网格元素不能指定任何 grid-placement 属性,所以它们总是自动放置的)

  2. 放置所有不能自动定位的元素。【元素显式指定了grid area则不能自动定位。grid area的指定可以通过grid-row grid-columns和grid-area】

  3. 处理指定了行的元素。

    对于每个指定了行位置的网格元素(grid-row-start和grid-row-end属性定义了明确的网格位置),按照order-modified document的顺序做如下处理:

    “稀疏“ 模式(默认行为,值是sparse)

    放置位置的列起始线为最早的(最小的正索引)线索引,同时要确保该元素的网格区域不会与任何已占用的网格单元重叠,并且元素的列其实线需要超过之前通过当前步骤放置在当前行中的任何网格元素的列起始线。

    “紧凑” 模式 (值是dense)

    放置位置的列起始线为最早的(最小的正索引)线索引,同时要确保该元素的网格区域不会与任何已占用的网格单元重叠。

  4. 确定隐式网格中的列。

    在隐式网格中创建列:

    1. 从显式网格中的列开始
    2. 在所有具有确定的列位置的元素(明确定位的元素,在上一步中定位的元素以及尚未定位但具有确定列的元素)中,根据需要将列添加到隐式网格的开始和结尾以容纳这些元素。
    3. 如果在没有确定的列位置的所有元素中最大的列跨度大于隐式网格的宽度,在隐式网格的末尾添加列以容纳该元素。

    例如,在下面的样式片段中:
    #grid {
    display: grid;
    grid-template-columns: repeat(5, 100px);
    grid-auto-flow: row;
    }
    #grid-item {
    grid-column: 4 / span 3;
    }
    需要6列。显式网格线从1到6共有5列(来自grid-template-columns),但是#grid-item列的位置意味结束的线是第7根,需要在隐式网格后面添加额外的列。

  5. 放置剩下的网格元素。

    自动放置光标定义了网格中“当前插入点”,被指定为一对行和列网格线。初始的自动放置光标被设置为隐式网格的初始行和列。

    grid-auto-flow值用来确定如何定位网格元素:

    “稀疏“ 模式(默认行为,值是sparse)

    每个之前步骤没有放置的网格元素,按照order-modified document顺序:

    如果元素定义了column位置:

    1. 将光标的列设置为网格元素的起始列。如果该值小于光标之前列的值,则将光标行位置加1。
    2. 增加光标的行,直到找到一个值让网格元素不与任何已占用的网格单元重叠(根据需要在隐式网格中创建新行)。
    3. 将元素的起始行设置为光标的行,并根据元素从当前位置的跨度设置元素的结束行。

    如果元素在两个轴上都具有自动网格位置:

    1. 递增自动放置光标的列位置,直到该元素的网格区域不与任何已占用的网格单元重叠,或者光标的列位置加上该元素的列跨度超出了之前在此算法中确定的隐式网格的列。
    2. 如果在上一步中找到了不重叠的位置,将元素的行首和列首行设置为光标的行和列。否则,增加自动放置光标的行(根据需要在隐式网格中创建新行),将其列设置为隐式网格中起始列,然后返回上一步。

    “紧凑” 模式 (值是dense)

    每个之前步骤没有放置的网格元素,按照order-modified document顺序:

    如果元素定义了column位置:

    1. 将光标的行设置为隐式网格中的起始行。将光标的列设置为网格元素的起始列。
    2. 增加自动放置光标的行,直到找到一个值让网格元素不与任何已占用的网格单元格重叠(根据需要在隐式网格中创建新行)。
    3. 将元素的起始行索引设置为光标的行。(也可以根据其跨度来隐式设置元素的行尾。)

    如果元素在两个轴上都具有自动网格位置:

    1. 将光标的行和列位置设置为隐式网格中的起始行和列。
    2. 增加自动放置光标的列位置,直到该元素的网格区域不与任何占用的网格单元重叠,或者光标的列位置加上该元素的列跨度超出了之前在此算法中确定的隐式网格的列。
    3. 如果在上一步中找到了不重叠的位置,将元素的行首和列首行设置为光标的行和列。否则,增加自动放置光标的行(根据需要在隐式网格中创建新行),将列重置为隐式网格中的起始列,然后返回上一步。

order-modified document顺序:弹性盒子按照order数字越小越早放置内部元素。初始情况下元素的order值都相同就按照元素在源码中出现顺序顺序放置元素。【order默认值是0】

参考

8.5. Grid Item Placement Algorithm

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

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

相关文章

csharp: ODP.NET,System.Data.OracleClient(.net 4.0) and System.Data.OleDb读取Oracle g 11.2.0的区别...

ODP.NET: 引用: using Oracle.DataAccess; //Oracle g 11.2.0 using Oracle.DataAccess.Client; using Oracle.DataAccess.Types; //下载 http://www.oracle.com/technetwork/topics/dotnet/downloads/net-downloads-160392.html //引用:D:\app\geovindu…

AngularJS快速入门指南15:API

API即Application Programming Interface(应用程序接口)。 AngularJS全局API AngularJS全局API是一组全局JavaScript函数,用来进行一些常用的操作,例如: 比较两个对象迭代对象进行数据格式转换 全局API函数可以通过an…

Java 9幕后花絮:新功能从何而来?

找出Java幕后发生的事情,以及新功能如何实现 在上一篇文章中,我们介绍了即将发布的Java 9版本的新功能和尚待解决的功能,并简要提到了将新功能添加到下一个版本之前要经历的过程。 由于此过程几乎影响了所有Java开发人员,但大多数…

TypeScript 联合类型(union type)

TS是JS的超集,在JS的基础上添加了一套类型系统,这样的TS可以被静态分析带来的好处显而易见。 let val: string val;声明一个string类型的变量val。 let val: string val; val 1; // Type number is not assignable to type string.因为number类型和…

sudo apt-get install libstdc++6

sudo apt-get install libstdc6 yum install libncurses.so.5 sudo apt-get install libncurses.so.5 sudo apt-get install lib32ncurses5 apt-get update把源更新一下 使用gdb时的指令 (gbd) info line *0x08xxxx sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.…

AngularJS快速入门指南03:表达式

AngularJS通过表达式将数据绑定到HTML。 AngularJS表达式 AngularJS表达式写在双大括号中:{{ 表达式语句 }}。 AngularJS表达式绑定数据到HTML的方式与ng-bind指令的方式相同。 AngularJS会准确地将表达式“输出”为计算的结果。 AngularJS表达式与JavaScript表达式…

零基础快速上手HarmonyOS ArkTS开发2---ArkTS开发实践

ArkTS开发实践: 接着上一次零基础快速上手HarmonyOS ArkTS开发1---运行Hello World、ArkTS开发语言介绍继续, 在上一次对于ArkTS的基础知识进行了学习,依照官方的课程计划,还有两个具体的小案例需要来实践实践: 实践出…

无状态Spring安全性第2部分:无状态身份验证

Spring Stateless Security系列的第二部分是关于以无状态方式探索身份验证的方法。 如果您错过了CSRF的第一部分,可以在这里找到。 因此,在谈论身份验证时,其全部内容就是让客户端以可验证的方式向服务器标识自己。 通常,这始于服…

TypeScript 交叉类型(intersection type)

在TS中和联合类型(union type)对应的还有交叉类型(intersection type)。 交叉类型的出现主要为了组合多个对象类型(object type),因为相对于interface,object type没法继承,那么就可以通过union type来实现混合的目的,从而实现继承…

【转】JAVA中的转义字符

JAVA中转义字符: 1.八进制转义序列:\ 1到3位5数字;范围\000~\377 \0:空字符 2.Unicode转义字符:\u 四个十六进制数字;0~65535 \u0000:空字符 3.特殊字符:就3个 \"&#xff1a…

八、VueJs 填坑日记之参数传递及内容页面的开发

我们在上一篇博文中&#xff0c;渲染出来了一个列表&#xff0c;并在列表中使用了router-link标签&#xff0c;标签内的&#xff1a;to就是链接地址&#xff0c;昨天咱们是<router-link :to"/content/ i.id">这样写的&#xff0c;今天我们来完成内容页面的渲染…

为Kindeditor控件添加图片自动上传功能

Kindeditor是一款功能强大的开源在线HTML编辑器&#xff0c;支持所见即所得的编辑效果。它使用JavaScript编写&#xff0c;可以无缝地与多个不同的语言环境进行集成&#xff0c;如.NET、PHP、ASP、Java等。官方网站可以查看这里&#xff1a;http://kindeditor.net/index.php Ki…

TypeScript类型推论(Type Inference)

要完全理解类型推论需要完整理解类型上下文&#xff0c;并且理解TS对于是否可以使用类型推论是基于静态分析完成的。 上下文类型应用在许多地方。常见的例子包括函数调用的参数&#xff0c;赋值的右手端位置&#xff0c;类型断言&#xff0c;对象和数组的成员&#xff0c;和返回…

4个万无一失的技巧让您开始使用JBoss BRMS 6.0.3

上周&#xff0c;红帽发布了标记为6.0.3的JBoss BRMS的下一版本&#xff0c;已订阅的用户可以在其客户门户中使用。 如果您对该版本的新增功能感到好奇&#xff0c;请在客户门户网站上在线查看版本说明和其余文档 。 我们正在寻找一些简单的方法来开始使用此新版本&#xff0…

统一命名规则

1. #define 保护 所有头文件都应该使用 #define 防止头文件被多重包含, 命名格式当是:<PROJECT>_<PATH>_<FILE>_H_ 项目 SkinTK中的头文件 SkinTK/SkinTK/targetver.h 可按如下方式保护: #ifndef SKINTK_SKINTK_TARGETVER_H_ #define SKINTK_SKINTK_TARGETVE…

中国移动MM7 API用户手册(七)

4.4 VASP接收状态报告&#xff08;上行业务&#xff09;当VASP在发送MM7SubmitReq给MMSC时设置需要发送状态报告的请求为true时&#xff0c;MMSC在收到MM7SubmitReq后&#xff0c;会发送状态报告给VASP&#xff0c;此时VASP可以进行接收。接收方式和接收传送消息一样&#xff…

如何仅通过CSS实现多行文本超长自动省略号

在CSS中&#xff0c;我们可以通过下面的样式实现DIV元素中文本超长后自动截断并以省略号结尾&#xff1a; overflow: hidden;word-break: normal;text-overflow: ellipsis; text-overflow: ellipsis是实现文本截断后以省略号结尾的关键样式&#xff0c;但问题是如果添加该样式则…

带有Angular JS的Java EE 7 – CRUD,REST,验证–第2部分

这是Angular JS承诺的Java EE 7的后续版本–第1部分 。 花了比我预期更长的时间&#xff08;找到时间来准备代码和博客文章&#xff09;&#xff0c;但是终于到了&#xff01; 应用程序 第1部分中的原始应用程序只是带有分页的简单列表&#xff0c;以及提供列表数据的REST服务…

Chrome不显示OPTIONS请求的解决方法2021版chrome90

在chrome90上之前展示跨域请求预检请求的方法失效了&#xff1a; 在chrome地址栏总输入 chrome://flags/#out-of-blink-cors 将其设置为Disabled后重启浏览器 在chrome://flags找不到选项out-of-blink-cors。取而代之的是chrome将预检请求放到了控制台网络面板的 OTHER 面板中。…

安装CentOs 5.5后无法显中文(中文乱码)

症状&#xff1a;在使用CentOS 系统时&#xff0c;安装的时候可能你会遇到英文的CentOS系统&#xff0c;在这中情况下安装CentOS系统时是默认安装&#xff08;即英文&#xff09;。安装完毕后&#xff0c;上网出现的却是中文乱码。 解决方法&#xff1a; 到CentOs资源网站上去找…