当前位置: 首页 > 面试题库 >

为什么grid-gap中的百分比值会在CSS网格中造成溢出?

司马奇希
2023-03-14
问题内容

我想要一个像这样的网格:

.grid{

  display:grid;

grid-gap:50%;

  background-color:blue;

}

.grid-1{

  background-color:red;

}


<div class="grid">

 <div class="grid-1">

  test

 </div>

 <div class="grid-1">

  test

 </div>

 <div class="grid-1">

  test

 </div>

</div>

我认为这是一个很大的问题,因为所有浏览器都无法正确理解百分比值。

如何解决呢?


问题答案:

最初,我们无法解析网格间隙的百分比,因为它取决于高度,因此我们将其忽略(我们将其视为auto)。浏览器首先考虑这样的内容来计算高度:

console.log(document.querySelector('.grid').offsetHeight)


.grid {

  display: grid;

  background-color: blue;

}



.grid-1 {

  background-color: red;

  opacity:0.5;

}


<div class="grid">

  <div class="grid-1">

    test

  </div>

  <div class="grid-1">

    test

  </div>

  <div class="grid-1">

    test

  </div>

</div>

该高度用作计算间隙的参考,然后将其添加到 高度 (我们用来根据内容查找间隙的 高度
)。这将不会再次触发网格的高度计算,因为它将创建一个循环并具有无限循环,因此浏览器将在此处停止并且我们将发生 溢出

console.log(document.querySelector('.grid').offsetHeight)



console.log(document.querySelector('.grid-1:nth-child(2)').offsetTop - document.querySelector('.grid-1:nth-child(1)').offsetTop - document.querySelector('.grid-1:nth-child(1)').offsetHeight)


.grid {

  display: grid;

  grid-gap:100%;

  background-color: blue;

  margin-top:50px;

}



.grid-1 {

  background-color: red;

  opacity:0.5;

  transform:translateY(-100%);

}


<div class="grid">

  <div class="grid-1">

    test

  </div>

  <div class="grid-1">

    test

  </div>

  <div class="grid-1">

    test

  </div>

</div>

如您所见,我使用100%并添加了一些变形,以查看间隙等于初始高度 (JS代码也确认了这一点)

一个简单的解决方法是避免百分比值,并使用像素值,以便浏览器将它们包含在初始计算中。在所有情况下,使用百分比值都不是很好的情况,因为您不知道
“百分比百分比”?

.grid {

  display: grid;

  grid-gap:50px;

  background-color: blue;

  margin-top:50px;

}



.grid-1 {

  background-color: red;

  opacity:0.5;

}


<div class="grid">

  <div class="grid-1">

    test

  </div>

  <div class="grid-1">

    test

  </div>

  <div class="grid-1">

    test

  </div>

</div>


 类似资料:
  • 为什么我在下面的代码段中的X轴上有一个溢出? 在我的网格容器上应用时,就会产生溢出。 null null https://codepen.io/anon/pen/wdjexz?editors=1100

  • 问题内容: 我在firefox上检索确切的css属性值(以“%”表示)时遇到问题。 假设我们有一个非常简单的标记: 和这个CSS: 而且 我想 通过js 检索左侧位置 (在“%”中) 使用mootools很容易(演示-> http://jsfiddle.net/steweb/AWdzB/): 或jQuery(演示-> http://jsfiddle.net/steweb/RaVyU/): 或通过普

  • 问题内容: 假设规则如下: 有没有办法以某种方式获得“ 65%”的回报,而不是像素值? 谢谢。 编辑: 不幸的是,在我的情况下,使用DOM方法是不可靠的,因为我有一个导入其他样式表的样式表,因此 cssRules 参数最终以 null 或 未定义的 值结尾。 但是,这种方法在大多数直接的情况下都可以使用(一个样式表,文档的 head 标记内的多个单独的样式表声明)。 问题答案: 恐怕没有内置的方法

  • 问题内容: 为什么百分比值不起作用,但是百分比值却起作用呢? 端部的宽度为视口的80%,但端部的高度为0。 问题答案: 块元素的高度默认为块内容的高度。因此,给定这样的东西: 将生长到足以容纳段落的高度,并且将生长到足以容纳段落的高度。 当您将高度或宽度指定为百分比时,这是相对于元素父级的百分比。对于宽度,除非另有说明,否则所有块元素的宽度一直与其父元素一样,一直到;因此,块元素的宽度与它的内容无

  • 我想使用FXML在JavaFX中创建一个包含3列的GridPane。中柱上有一个大标签。中间列采用标签的宽度。左栏和右栏各占表单剩余宽度的一半(50%)。我尝试将百分之五十的宽度设置为左栏和右栏。但是,宽度设置为整个形状的50%,而不是剩余宽度。例如,表单的宽度为1000px。中柱可能需要400px,而左柱和右柱各自需要300px。即使窗体在运行时调整大小,此公式也应保持不变。

  • 问题内容: 我在玩CSS网格布局,遇到一个我找不到答案的问题。 考虑以下示例: 如您所见,由于使用设置了百分比宽度,因此列超出了屏幕宽度。 但是,如果我使用单位,则效果很好: 如果有人能解释为什么百分比宽度会产生如此大的影响,那将是很好的。 问题答案: 本机仅在容器的可用空间内工作。 因此,在您的代码中: …容器中的自由空间在12列之间平均分配。 由于列仅处理 自由空间 ,因此不是一个因素。在确定