- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 CSS GRID,我不知道为什么我在下面的示例中遇到了差距。第二个元素可以放在第一个轨道中,但我在那里有一个差距。这是代码:
.container {
display: grid;
margin: 40px;
grid-gap: 20px;
text-align: center;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(4, 1fr);
}
.container div {
background: #ff8000;
}
.container .item1 {
grid-column: 2/4;
}
<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>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
</div>
现在,如果我将以下属性 grid-row: 1/2;
添加到第一个元素,现在第二个元素占据第一个轨道。这就是我所期望的。这是添加 grid-row: 1/2;
:
.container {
display: grid;
margin: 40px;
grid-gap: 20px;
text-align: center;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(4, 1fr);
}
.container div {
background: #ff8000;
}
.container .item1 {
grid-column: 2/4;
grid-row: 1/2;
}
<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>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
</div>
我的问题是:
为什么我在第一个代码中出现了差距?第二个元素可以放在第一个轨道中。
我写的第一段代码和第二段代码有什么区别?
最佳答案
您需要了解放置算法才能理解此行为。来自 the specification您可以找到完整的算法以及如何识别何时每个元素将被处理,这是了解这两种情况之间差异的关键。
算法的主要步骤是:
Generate anonymous grid items
Position anything that’s not auto-positioned.
Process the items locked to a given row.
Determine the columns in the implicit grid.
Position the remaining grid items.
让我们从你的最后一个例子开始,你明确地为第一个元素定义了一个 grid-colum
和 grid-row
不是自动定位元素,所以我们把它放在第 (1) 步。
然后我们将进行第(4)步,对剩余的item进行定位
The auto-placement cursor defines the current “insertion point” in the grid, specified as a pair of row and column grid lines. Initially the auto-placement cursor is set to the start-most row and column lines in the implicit grid.
所以我们的光标是顶部/左侧的单元格,item2 将放置在那里,我们只需按照树的顺序放置所有其他元素:
For each grid item that hasn’t been positioned by the previous steps, in order-modified document order:
当然,没有元素会与已经放置的元素 1 重叠,我们会按照算法为每个元素不断递增光标。
现在让我们考虑第一个棘手的情况,唯一的区别是您没有指定grid-row
,这将不再使您的元素成为not auto-positioned 一个是因为你只定义了 grid-column
所以该行将被自动定义并且该元素现在将落入步骤 (4) 如果你仔细检查步骤(4)你会发现两个子步骤:
If the item has a definite column position:
If the item has an automatic grid position in both axes:
item1 将考虑第一个,将被放置在第二列并递增光标!。光标的增量是使第二个元素位于其后的原因。
在您的第二个示例中,item1 不会使用光标,因为它在步骤 (1) 中被考虑,因此 item2 将是第一个使用光标的人,这与您的第一个示例不同,在第一个示例中,item1 将是第一个使用它的人。
值得注意的是,在步骤(4)中我们有两种算法。 “稀疏”一个(默认行为),我们从不重置光标,我们总是增加它,这会产生间隙。在每一步重置光标以填充所有单元格的“密集”算法。要激活“密集”算法,您需要考虑 grid-auto-flow
.container {
display: grid;
margin: 40px;
grid-gap: 20px;
text-align: center;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(4, 1fr);
grid-auto-flow: dense;
}
.container div {
background: #ff8000;
}
.container .item1 {
grid-column: 2/4;
}
<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>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
</div>
dense
If specified, the auto-placement algorithm uses a “dense” packing algorithm, which attempts to fill in holes earlier in the grid if smaller items come up later. This may cause items to appear out-of-order, when doing so would fill in holes left by larger items.
If omitted, a “sparse” algorithm is used, where the placement algorithm only ever moves “forward” in the grid when placing items, never backtracking to fill holes. This ensures that all of the auto-placed items appear “in order”, even if this leaves holes that could have been filled by later item ref
使用相同算法解释的另一个非直觉行为的相关问题:CSS Grid : How Auto placement algorithm works
关于html - 使用 CSS GRID 为什么我会得到这个差距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64746869/
我必须使用 gridExtra::grid.arrange 来绘制除彼此之外的多个图,因为我使用该包来创建图的拟合。 我必须使用 grid.arrange 为绘图创建一个标题。 现在我想将两者结合起来
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 4年前关闭。 Improve t
在我的农业网格的每一行中。我需要在每一行 ag-grid 中添加 Angular Material 图标按钮。但是,结果只显示了文本按钮。它不会在我的农业网格中显示我的图标按钮。 接下来,我需要在我的
我正在尝试使用 JSON 数据填充 KendoUI 网格,其中服务器返回总行数以及数据,但是我在让 serverPaging 正常工作时遇到了一些问题。我创建并分配网格的数据源如下:
Kendo 网格在网格加载、分页、排序时自动提供自己的加载指示器。它工作正常。 但我不希望显示/隐藏此内置加载指示器。 如何禁用此功能? 请建议我。 谢谢, 维诺特 最佳答案 很简单,只需用 CSS
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我正在尝试将noDataMessage设置为dojox.grid.EnhancedGrid,网格工作正常,当商店获取数据时它显示它是行,没有问题,但是我需要当商店没有数据时网格将向我显示个性化消息。我
我的 ExtJS 6 框架有问题。当我使用 Ext.grid.Panel 时它可以工作,但我想使用 Ext.grid.Grid 。 Ext.grid.Panel 和 Ext.grid.Grid 有什么
我看到有几种风格的网格。当记录很大时,人们建议使用 Angular UI Grid 而不是 Datatables。 我认为数据表正在按 1 填充每一行并导致性能问题。 是否无法修复类似于其他网格的数据
是否有人有在 Grid Engine/Sun Grid Engine/Son of Grid Engine 上运行 Docker 的经验,并且能够 monitor the resource used
我一直在阅读 CSS Grid tutorial在 CSS Tricks 中,但一个基本方面让我有点困惑。 似乎有两种方法可以决定一个网格元素跨越多少个单元格: grid-template-area使
调整 ag-Grid 的大小(更改浏览器窗口的大小)并在两个选项卡之间切换时收到以下警告: ag-Grid: tried to call sizeColumnsToFit() but the grid
我正在尝试在 python 2.7 中构建一个 5x5 网格的游戏板,表示为二维列表。我尝试将其写为 board = [["O"]*cols]*rows (cols 和 rows 已声明为 5)但是当
AgGrid 日期筛选器的格式是mm/dd/yyyy,但我想将其更改为yyyy/mm/dd 我该怎么做?日期过滤器是网格的 columnDefinition 的一部分,我在其中使用 filter: '
我有一个基本的 ag-grid 和一些简单的虚拟数据,但它只在我不导入库提供的 .css 文件时显示,即使这样它也显示不正确。 摘 self 的 package.json: "ag-grid": "1
我有一个标准的单元格编辑器,当我处于编辑模式时,单元格编辑器的宽度和高度不是单元格的完整宽度和高度。 我应该覆盖样式还是配置中有任何标志可以关闭此效果? 最佳答案 我有同样的问题。如果您查看 DOM,
概览 以前在 ag-grid 版本 <10.1.0 中,可以通过这种方式在不刷新网格的情况下添加一行: let model: IRowModel = this.gridOptions.api.getM
是否可以合并 wx.grid 中相邻的单元格?我的意思是水平作为一行中的单元格和垂直作为一列中的单元格。 最佳答案 有一种方法可以让文本跨越网格小部件中的多行或多列。 wxPython 演示中有一个名
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 6年前关闭。 Improve this questi
谷歌搜索了很多没有任何结果...按下回车键时网格的默认行为是向下移动光标。但我必须使单元格编辑器在当前单元格中打开。我可以轻松 Hook 关键事件,但如何打开编辑器? 最佳答案 import wx i
我是一名优秀的程序员,十分优秀!