如果我像这样设置嵌套的flexbox容器:
<div class="container1">
<div class="grow1">
<div class="container2">
<div class="grow2"></div>
</div>
</div>
</div>
......然后设置生长2的宽度,使其比容器1宽,然后生长2溢出容器1。
我认为这不应该发生,因为当flex元素比flex容器大时,它们应该收缩。
如果我设置了生长2的灵活基础,那么这就像预期的那样工作。
有关演示,请参见以下示例:
https://jsfiddle.net/chris00/ot1gjjtk/20/
请使用Chrome或火狐
此外,我读到flexbox规范说宽度和FlexBasis应该有相同的效果(当使用水平布局时),但它们显然没有。
现在我可以用弹性基础代替宽度,但是。。。Edge对flex basis和width都做相同的事情,但它的方式是“错误的”。IE11也犯了错误(尽管它似乎有多个flexbox bug)。请使用Edge查看演示。
那么这是怎么回事?
所有浏览器都有bug吗?
flex basis是否应该与宽度不同(在简单的水平布局中)?
或者边缘是否正确,宽度和弹性基准是否都会溢出父容器?
最后,是否有一个解决办法可以修复Edge(甚至IE11)的溢出?
.container1 {
margin-top: 10px;
display: flex;
width: 200px;
height: 50px;
background-color: red;
}
.grow1 {
flex-grow: 1;
height: 40px;
background-color: green;
}
.container2 {
display: flex;
height: 30px;
background-color: yellow;
}
.grow2a {
flex-grow: 1;
flex-basis: 400px;
height: 20px;
background-color: turquoise;
}
.grow2b {
flex-grow: 1;
width: 400px;
height: 20px;
background-color: turquoise;
}
<div class="container1">
<div class="grow1">
<div class="container2">
<div class="grow2a">Working (flex-basis)</div>
</div>
</div>
</div>
<div class="container1">
<div class="grow1">
<div class="container2">
<div class="grow2b">Not working (width)</div>
</div>
</div>
</div>
就规范而言,这不是一个与flex基础
、宽度
、flex-增长
或flex
有关的问题。这是完全不同的事情。
4.5. 弹性物品的隐含最小尺寸
为了为弹性物品提供更合理的默认最小尺寸,本规范引入了一个新的auto
值作为CSS 2.1中定义的min width
和min height
属性的初始值。
换句话说,默认情况下,弹性项不能小于其内容的长度(本质上是最长的单词或固定大小的元素)。
该项不能停留在其容器内(甚至不能呈现滚动条或省略号),因为不允许其内容溢出。内容只是扩展项目。此行为也适用于固定大小(例如代码中的flex-basis:400px
)。
同样,初始设置是:
最小宽度:自动
,在行方向最小高度:自动
,在列方向有关更完整的解释,请参阅这篇文章:
这个问题的标准解决方案很简单:覆盖默认值。
在代码中,将最小宽度:0
添加到。增长1
。
这解决了Chrome、Safari、FF和Edge中的问题。
css prettyprint-override">.container1 {
margin-top: 10px;
display: flex;
width: 200px;
height: 50px;
background-color: red;
}
.grow1 {
flex-grow: 1;
height: 40px;
background-color: green;
min-width: 0; /* NEW */
}
.container2 {
display: flex;
height: 30px;
background-color: yellow;
}
.grow2a {
flex-grow: 1;
flex-basis: 400px;
height: 20px;
background-color: turquoise;
}
.grow2b {
flex-grow: 1;
width: 400px;
height: 20px;
background-color: turquoise;
}
html prettyprint-override"><div class="container1">
<div class="grow1">
<div class="container2">
<div class="grow2a">Working (flex-basis)</div>
</div>
</div>
</div>
<div class="container1">
<div class="grow1">
<div class="container2">
<div class="grow2b">Not working (width)</div>
</div>
</div>
</div>
问题内容: 我在正确使用flexbox时遇到问题,想澄清一下嵌套父元素和子元素的工作方式。 我知道孩子继承了父母的弹性。但是,如果您需要为孩子的孩子(孩子)抚养孩子,这会被覆盖吗?flexbox的正确用法是什么? 我什么时候都适用于孩子 的 孩子(婴儿)的缘故,或将是覆盖孩子的父母柔性? 问题答案: 一个范围 柔性格式化的内容被限制在一个父/子关系。 这意味着弹性容器始终是父容器,而弹性项目始终是
问题内容: 对于任何CSS专家来说,我都有一个棘手的问题。我的绿色div的高度灵活,可以容纳剩余的高度。现在我想在该div中放置一个div,该div应该是绿色div的一半。但似乎Chrome是否将其视为整个页面的一半而不是flex项目。 HTML CSS 问题答案: 您可以绝对定位。 关于您的声明: 但似乎Chrome是否将其视为整个页面的一半而不是flex项目。 您给了。然后给它的孩子()一个。
问题内容: 我正在尝试了解如何正确观察道具的一些变化。我有一个父组件(.vue文件),它从ajax调用接收数据,将数据放入对象中,并通过v- for指令使用它来呈现某些子组件,以下是我的实现的简化: …然后在标签内: 项目对象是这样的: 现在,在我的孩子“玩家”组件中,我试图观察任何Item的属性变化,并使用: 它有效,但是对我来说似乎有点棘手,我想知道这是否是正确的方法。我的目标是每次更改或获取
问题 阻止类似按钮的内容会导致我的flex项目展开并溢出flexbox容器。 预期行为 在本例中,按钮应与按钮文本并排,并用省略号隐藏。flex项的宽度应基于兄弟项而非内容,并在容器更改宽度和添加或删除flex项时保持在容器内的响应性。另一个警告是,对于我的特定场景,我不能在flex项或buttons父div上使用overflow:hidden。 这是小提琴手。 例Html 示例CSS 编辑:现在
问题内容: 查看实时代码: 角JS 到底如何正确遍历嵌套键值对并正确输出,如下所示? 我要的是一棵像这样的树 当前视图是: JS: HTML: 问题答案: 您非常接近,我更新了小提琴。http://jsfiddle.net/y9wj6/9/
问题内容: 我正在使用multiprocessor.Pool()模块来加速“令人尴尬的并行”循环。其实我有一个嵌套的循环,现在用multiprocessor.Pool加快内循环。例如,在不并行化循环的情况下,我的代码如下: 使用并行化: 我的主要问题是这是否正确,我应该在循环内包含multiprocessing.Pool(),或者是否应该在循环外创建池,即: 另外,我不知道我是否应该包括线“poo