似乎flex div中的内容会影响有关flex-grow
属性的计算大小。难道我做错了什么?
在下面提供的小提琴中,您将看到一个数字键盘。除底行外,所有行均包含3个数字。该行应将“ 0”表示为2个数字的宽度,因此flex-grow: 2,“:”(冒号)应为1个数字的大小,因此flex-grow: 1
。
我在这里想念什么吗?
“ 0”的右侧应与其上方的8、5和2对齐。有点不对劲
.numbers {
display: flex;
flex-direction: column;
}
.row {
display: flex;
flex-direction: row;
flex-grow: 1;
justify-content: space-between;
}
.button {
display: flex;
flex-grow: 1;
justify-content: center;
align-items: center;
margin: 5px;
border-radius: 5px;
border: 1px solid gray;
background: rgba(255, 255, 255, 0.2);
cursor: pointer;
}
.button#number0 {
flex-grow: 2;
}
.button#colon {
flex-grow: 1;
}
<div class="numbers">
<div class="row">
<div class="button number" id="number1">1</div>
<div class="button number" id="number2">2</div>
<div class="button number" id="number3">3</div>
</div>
<div class="row">
<div class="button number" id="number4">4</div>
<div class="button number" id="number5">5</div>
<div class="button number" id="number6">6</div>
</div>
<div class="row">
<div class="button number" id="number7">7</div>
<div class="button number" id="number8">8</div>
<div class="button number" id="number9">9</div>
</div>
<div class="row">
<div class="button number" id="number0">0</div>
<div class="button" id="colon">:</div>
</div>
</div>
简短分析
问题在于,第1-3行有两个水平边距,而第4行只有一个水平边距。
如果水平边距各为10px,则第4行的可用空间比其他行多10px。这引发了列的对齐。
因为flex-grow
仅适用于自由空间,并且受内容和边距的很大影响,所以这不是确定伸缩项目大小的最安全方法。
试试吧flex-basis。将此添加到您的代码:
.button { flex-basis: 33.33%; }
#number0 { flex-basis: calc(66.67% + 10px); }
* { box-sizing: border-box; }
.numbers {
display: flex;
flex-direction: column;
}
.row {
display: flex;
flex-direction: row;
flex-grow: 1;
justify-content: space-between;
}
.button {
display: flex;
flex-basis: 33.33%;
justify-content: center;
align-items: center;
margin: 5px;
border-radius: 5px;
border: 1px solid gray;
background: rgba(255, 255, 255, 0.2);
cursor: pointer;
}
#number0 { flex-basis: calc(66.67% + 10px); }
* { box-sizing: border-box; }
<div class="numbers">
<div class="row">
<div class="button number" id="number1">1</div>
<div class="button number" id="number2">2</div>
<div class="button number" id="number3">3</div>
</div>
<div class="row">
<div class="button number" id="number4">4</div>
<div class="button number" id="number5">5</div>
<div class="button number" id="number6">6</div>
</div>
<div class="row">
<div class="button number" id="number7">7</div>
<div class="button number" id="number8">8</div>
<div class="button number" id="number9">9</div>
</div>
<div class="row">
<div class="button number" id="number0">0</div>
<div class="button" id="colon">:</div>
</div>
</div>
扩展分析
你写了:
似乎flex div中的内容会影响有关flex-grow属性的计算大小。难道我做错了什么?
问题的根源不是弹性项目中的内容。
你写了:
在下面提供的小提琴中,您将看到一个数字键盘。除底行外,所有行均包含3个数字。该行的‘0’是2个数字的宽度,因此flex-grow: 2’:’是1个数字的大小,因此flex-grow: 1。我在这里想念什么吗?
是。您对flex-grow财产的解释不正确。flex-grow不用于定义弹性项目的大小。它的工作是在flex容器中的各个项目之间分配可用空间。
通过应用flex-grow: 1一组弹性物料,您可以告诉它们在它们之间平均分配可用空间。这就是为什么在您的演示中,行1,行2和行3具有相同大小的弹性项目。
当您申请时flex-grow: 2,您要告诉flex项消耗的可用空间是的项的两倍flex-grow: 1。
但是,以上各行的第二个10px边距在第4行的布局中位于何处?
在此处输入图片说明
第4行未对齐的原因是,第4行的边距比其他行少一个,这意味着第4行的可用空间比其他行多10像素。
您会注意到,如果删除边距规则,则会得到所需的对齐方式。
.numbers {
display: flex;
flex-direction: column;
}
.row {
display: flex;
flex-direction: row;
flex-grow: 1;
justify-content: space-between;
}
.button {
display: flex;
flex-grow: 1;
justify-content: center;
align-items: center;
/* margin: 5px; */
border-radius: 5px;
border: 1px solid gray;
background: rgba(255, 255, 255, 0.2);
cursor: pointer;
}
.button#number0 {
flex-grow: 2;
}
.button#colon {
flex-grow: 1;
}
<div class="numbers">
<div class="row">
<div class="button number" id="number1">1</div>
<div class="button number" id="number2">2</div>
<div class="button number" id="number3">3</div>
</div>
<div class="row">
<div class="button number" id="number4">4</div>
<div class="button number" id="number5">5</div>
<div class="button number" id="number6">6</div>
</div>
<div class="row">
<div class="button number" id="number7">7</div>
<div class="button number" id="number8">8</div>
<div class="button number" id="number9">9</div>
</div>
<div class="row">
<div class="button number" id="number0">0</div>
<div class="button" id="colon">:</div>
</div>
</div>
那么第四行到第二个10px的空白会发生什么呢?
它被两个弹性项目吸收。
这是flex-grow在第四行分配额外空间的方式:
flex-grow: 2
。(.button#number0
在您的代码中。)flex-grow: 1
。(.button#colon
在您的代码中。)flex-grow: 3
改为。然后,弹性项目左侧将获得7.5px,而弹性项目右侧将获得2.5px。“ 0”的右侧应与其上方的8、5和2对齐。有点不对劲
因为flex-grow仅适用于自由空间,并且受内容和边距的很大影响,所以这不是确定伸缩项目大小的最安全方法。
试试吧flex-basis。将此添加到您的代码:
.button { flex-basis: 33.33%; }
#number0 { flex-basis: calc(66.67% + 10px); }
* { box-sizing: border-box; }
.numbers {
display: flex;
flex-direction: column;
}
.row {
display: flex;
flex-direction: row;
flex-grow: 1;
justify-content: space-between;
}
.button {
display: flex;
flex-basis: 33.33%;
justify-content: center;
align-items: center;
margin: 5px;
border-radius: 5px;
border: 1px solid gray;
background: rgba(255, 255, 255, 0.2);
cursor: pointer;
}
#number0 { flex-basis: calc(66.67% + 10px); }
* { box-sizing: border-box; }
<div class="numbers">
<div class="row">
<div class="button number" id="number1">1</div>
<div class="button number" id="number2">2</div>
<div class="button number" id="number3">3</div>
</div>
<div class="row">
<div class="button number" id="number4">4</div>
<div class="button number" id="number5">5</div>
<div class="button number" id="number6">6</div>
</div>
<div class="row">
<div class="button number" id="number7">7</div>
<div class="button number" id="number8">8</div>
<div class="button number" id="number9">9</div>
</div>
<div class="row">
<div class="button number" id="number0">0</div>
<div class="button" id="colon">:</div>
</div>
</div>
问题内容: 在mdn 与…相同 。 但是,实际上它在浏览器中有不同的显示。 您可以通过更改CSS中的注释在jsFiddle中进行尝试。 当我使用元素时,其类名将是,但使用时不会发生。 我不明白为什么。寻求帮助。非常感谢。 问题答案: 该 属性是设置的简写: 该规则应对此进行计算: 这些值在规范中定义。参见7.1.1节。的基本价值 我之所以说 “应该计算” ,是因为在IE11和可能的其他浏览器中,度
问题内容: 我最近开始使用flexbox,经常会遇到需要在主轴之间分配空间的情况。 我经常在和之间犹豫。例如,如果我要一项测量2个量度,而另一项测量100%,则我有两个选择。我可以设置和,或和。 有时,如果我希望一个元素扩大其余空间,我可以这样做或。 我该如何选择?使用width与flex-grow有什么区别/注意事项? 问题答案: 和是两个完全不同的CSS特性。 该属性用于定义元素的宽度。 该属
问题内容: 恐怕我一定不明白弹性增长。如果您跳到下面的JSFiddle(据我所知),它的大小应该是另一个的三倍。如您所见,事实并非如此。为什么? 问题答案: 您还必须指定一个值(不指定此属性会导致行为类似于使用初始值auto 将其添加到两个孩子中,或仅使用速记进行设置:
问题内容: 我正在尝试占用和div未使用的任何空间。为此,我将flex显示设置为列方向。然后,我将属性设置为1。似乎没有做任何事情。 注意:不确定这是否重要,但是我正在进行一些嵌套的flex显示。 HTML CSS 问题答案: 您代码中的所有内容都可以正常工作。 唯一的问题是 您的flex容器没有指定的高度 。因此,高度解析为,表示内容的高度。 该属性在容器中分配 可用 空间。容器中没有可用空间,
这件事我也办不到。我使用的是react和styled组件,我的对齐/对齐不起作用。 DIV-设置为flex,FLEX-方向为列DIV-标题div DIV-主体div,flex生长设置为1,以便flexbox占据容器的全部高度 现在,身体的flex项占据了整个高度(良好),我试图将内容居中在这个div的中间。我已经尝试了所有的Align/Justify组合,但都不起作用,我不知道为什么。这是我的代码
问题内容: 我有一个基于flexbox的布局。两列,一列固定大小,第二列需要占用其余空间。在成长列中,我有一个字符串,希望将其剪切掉。 在Chrome中可以正常运行。但它在Firefox和IE中不起作用。我试图通过使用相对位置和绝对位置来给grow(flex item)内部元素一个宽度来修复它,但是随后我得到了一个损坏的布局。损坏与元素的高度未考虑其所有子元素有关。 注意:flex grow项目内