如何让flexbox在计算中包含填充?

Dre*_*TeK 36 html css css3 flexbox

下面是两行.

  • 第一行是两个项目,flex 1一个是flex 2.

  • 第二行是两个项目flex 1.

根据规范1A + 1B = 2A

但是,当计算中包含填充时,总和不正确,如下面的示例所示.


如何获得弹性框以在其计算中包含填充,以便示例中的框正确排列?

.Row{
  display:flex;
}
.Item{
  display:flex;
  flex:1;
  flex-direction:column;
  padding:0 10px 10px 0;
}
.Item > div{
  background:#7ae;
}
.Flx2{
  flex:2;
}
Run Code Online (Sandbox Code Playgroud)
<div class="Row">
  <div class="Item">
    <div>1A</div>
  </div>
  <div class="Item">
    <div>1B</div>
  </div>
  <div class="Item Flx2">
    <div>1C</div>
  </div>
</div>

<div class="Row">
  <div class="Item">
    <div>2A</div>
  </div>
  <div class="Item">
    <div>2B</div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

Ran*_*ndy 40

解决方案:

设置margin子元素,而不是在padding你的flex项目.

.Row{
  display:flex;
}
.Item{
  display:flex;
  flex:1;
  flex-direction:column;
}
.Item > div{
  background:#7ae;
  margin:0 10px 10px 0;
}
.Flx2{
  flex:2;
}
Run Code Online (Sandbox Code Playgroud)
<div class="Row">
  <div class="Item">
    <div>1A</div>
  </div>
  <div class="Item">
    <div>1B</div>
  </div>
  <div class="Item Flx2">
    <div>1C</div>
  </div>
</div>

<div class="Row">
  <div class="Item">
    <div>2A</div>
  </div>
  <div class="Item">
    <div>2B</div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)


问题:

计算没有完成padding.所以; 添加paddingflex元素并没有按规格给出预期的宽度 .

具体文章

例如,浮动自动调整大小的Flex容器中弹性项的可用空间为:

  • flex容器的包含块的宽度减去Flex容器的边距,边框和水平维度中的填充
  • 在垂直方向上无限

为什么填充不计算?这就是规范想要的.

确定可用的maincross空间的flex项目.对于每个维度,如果flex container内容框的维度是一定的大小,请使用该维度; 如果flex container要在a minmax-content约束下调整其维度,则该维度中的可用空间是该约束; 否则,从该维度中Flex容器的可用空间中减去Flex容器的边距,边框和填充,并使用该值.这可能会产生无限的价值.

如果从元素的大小中减去paddingmargin,则得到:

A1 + A2 = B1

但是,在执行此操作后,填充已添加到元素中.元素越多,填充越多.这不是在宽度上计算,导致你的陈述是错误的.

  • 使用边距代替填充的问题在于,当您将鼠标悬停在边距部分时,它不会算作您悬停在该元素上。 (6认同)
  • 这不仅解决了我的问题,而且对理解 flex 也很有帮助。谢谢你。 (3认同)
  • 这并不是很清楚:您突出显示的规范部分说: **“...从可用空间中减去 Flex 容器的边距、边框和填充...”** 但填充不在 Flex 容器上。它位于弹性项目上。(嵌套的弹性容器与问题无关。)所以我不确定这些摘录是否适用。 (3认同)
  • 当您需要边框填充时,它也没有帮助。我希望设置 `box-sizing: border box;` 会有所帮助,但没有这样的运气...... (2认同)

Mic*_*l_B 5

如何使flexbox在计算中包括填充?

在代码中,填充计算在内。

根据规范1A + 1B = 2A

我不认为这是正确的。也许提供链接参考以进行解释。


flex-grow物业

当您应用flex: 1到元素时,您将使用flex简写属性来表示:

  • flex-grow: 1
  • flex-shrink: 1
  • flex-basis: 0

flex-grow 告诉弹性项目消耗容器中的可用空间。

这是您的代码:

.Item {
  display: flex;
  flex: 1;
  flex-direction: column;
  padding: 0 10px 10px 0;
}
Run Code Online (Sandbox Code Playgroud)

在第一行中,padding-right: 10px将其应用于三个弹性项目。

在第二行中,padding-right: 10px将其应用于两个弹性项目。

因此,在第一行中分配的可用空间要少10像素。这破坏了网格的对齐方式。

要分配空间(例如,您希望元素占用容器的剩余高度或宽度),请使用flex-grow

对于Flex项目使用的精确尺寸flex-basiswidthheight

这是更多信息: