当前位置: 首页 > 知识库问答 >
问题:

使用正当内容属性的网格项的意外行为

崔琦
2023-03-14

在css-技巧完整-指南-到css-网格中,它描述了如下的证明内容属性:

调整内容有时网格的总大小可能小于其网格容器的大小。如果您的所有网格项都使用非柔性单元(如px)调整大小,则可能会发生这种情况。在这种情况下,可以在网格容器中设置网格的对齐方式。此特性沿内联(行)轴对齐栅格(与沿块(列)轴对齐栅格的对齐内容相反)。

我在想这是怎么回事。如果我有一个宽度为100%的网格容器和固定宽度为宽度为20px的网格项目,并且我将网格容器设置为对齐项目:开始网格项目将按预期对齐开始。但是,如果我将网格容器设置为`网格模板列:repeat(4,1fr),那么这些项就不再从一开始就对正了?即使物品的尺寸是非弹性的?

根据CSS-技巧的描述,我会期望他们证明行轴的开始?

.wrapper{
width: 100%;
height: 100vh;
}

.grid{
display: grid;
grid-auto-flow: column;
justify-content: start;
align-content: start;
width: 100%;
padding: 1em;
background-color: powderblue;
}

.grid.explicit{
grid-template-columns: 1fr 1fr 1fr 1fr;
}
.grid__item{
width: 20px;
padding:0.6em;
background-color: lime;
}
<div class="wrapper">
Explicit columns
<pre>
grid-template-columns: 1fr 1fr 1fr 1fr;
</pre>
<div class="grid explicit">
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
</div>
Implicit columns
<div class="grid">
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
</div>

共有1个答案

陆宾白
2023-03-14

根据规范

如果网格的外边缘与网格容器的内容边缘不对应(例如,如果没有列是弹性大小的),则网格轨迹将根据网格容器上的“对齐内容”和“对齐内容”属性在内容框内对齐。

因此,如果任何列使用的是1frjustify content是无用的。

使用简单的词语:您的网格容器包含的轨道(列)的大小是基于greg-tement-栏位或自动。当使用1fr 1fr 1fr时,您定义4个相等的轨道,占用所有可用的空间。没有空闲空间,所以没有什么要对齐的,因为risge-Content对齐的是列,而不是列中的项(等于20px)。

当您不定义任何大小时,列将根据其内容自动调整大小,在这种情况下,您将拥有大小等于20px的轨道,其中的项也等于20px。在这种情况下,证明内容将对齐您的列。

值得注意的是,默认对齐是拉伸的,所以在第二种情况下,如果您省略了prive-Content,您的自动大小的列将被拉伸以平均填充所有空间,从而具有与1fr相似的行为。

为了更好地理解,这里有一些例子:

css prettyprint-override">.grid {
  display: grid;
  grid-auto-flow: column;
  justify-content: start;
  margin: 1em;
  background-color: powderblue;
}

.grid__item {
  width: 20px;
  padding: 0.6em;
  background-color: lime;
}
4 equal columns
<div class="grid" style="grid-template-columns: 1fr 1fr 1fr 1fr">
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
</div>
4 equal columns having 100px width (we have free space)
<div class="grid" style="grid-template-columns: 100px 100px 100px 100px">
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
</div>

we align the items inside the columns
<div class="grid" style="grid-template-columns: 100px 100px 100px 100px;justify-items:center">
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
</div>
<div class="grid" style="grid-template-columns: 100px 100px 100px 100px;justify-items:end">
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
</div>
we move the columns to the end
<div class="grid" style="grid-template-columns: 100px 100px 100px 100px;
  justify-content: end;justify-items:end">
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
</div>
We make the column auto sized (nothing to align inside them)
<div class="grid" style="justify-items:center">
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
</div>
<div class="grid" style="justify-items:end">
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
  <div class="grid__item">item</div>
</div>
 类似资料:
  • 问题内容: 我正在尝试在最顶部创建的CSS网格上放置一个嵌套()。还没有爱(它不起作用)。也许这是不可能的,或者我缺少了什么? 问题答案: 一个范围 格格式化的内容被限制为父子关系。 这意味着网格容器始终是父级,而网格项目始终是子级。网格属性仅在此关系内起作用。 子代以外的网格容器的后代不属于网格布局,并且不接受网格属性。 您正在尝试将网格属性应用于属于网格容器的子元素而不是子元素的元素。这些元素

  • 本文向大家介绍使用jQuery获得内容以及内容的属性,包括了使用jQuery获得内容以及内容的属性的使用技巧和注意事项,需要的朋友参考一下 Tips: 1、点击事件节点的选择 #botton 2、alert 的代码规则  ("Value: " + $("#id").html) 今天的分享就先到这里了,后续我们还将持续更新一些新的jQuery实例。

  • 问题内容: 有关CSS网格的所有指南似乎都暗示着一种结构,其中放置在网格中的元素是网格本身的子级。 其中具有和网格属性的定义。 如果我想将作为网格“孙代”的元素放置在网格本身上(而不是依赖于其父元素),是否有意义? 在这里,我希望能够将A,B和C分别放在自己的网格行中;那有道理吗? 问题答案: 从 CSS Grid Level 2草案规范开始: 2.网格容器 子网格提供了通过嵌套元素向下传递网格参

  • 如本文所述,缩进有一个ESLint属性,名为。示例如下所示: 或对于选项卡式缩进: 但是,如果我将这个确切的代码粘贴到我的文件中,VS Code将显示为错误: ESLint:. eslintrc中的ESLint配置无效:-意外的顶级属性"indent"...有关详细信息,请参阅ESLint输出通道。 我以前拥有的文件已经有很多规则,并且没有打印出错误。如果我将添加到该列表中,或者单独添加,它将失败

  • 或 上课。但是,当我想要将元素对齐到右下角时,我需要做什么呢?引导标记之后最常见的方法是什么?

  • 问题内容: TL; DR: CSS网格有什么类似的东西吗? 我试图用几个月的大4x3网格创建年视图日历,而白天则嵌套7x6网格。 日历应填满页面,因此Year网格容器的宽度和高度分别为100%。 为简单起见,该笔中的每个月都有31天,从星期一开始。 我还选择了一个小得离谱的字体来演示该问题: 网格项(=日单元格)非常简洁,因为页面上有数百个。当日期数字标签过大(使用左上角的按钮随意使用笔中的字体大