Answers:
这里是解释:
https://www.w3.org/TR/css-flexbox-1/#flex-common
flex:<positive-number>
等效于flex:<positive-number> 10。使flex项目具有弹性,并将flex基础设置为零,从而使该项目接收flex容器中指定比例的可用空间。如果flex容器中的所有项目都使用此模式,则它们的大小将与指定的flex系数成比例。
因此flex:1
相当于flex: 1 1 0
flex
应用于所有孩子时,实际上很重要flex: 1 ? 0;
,在哪里“?” 可以是任何东西,不会有什么不同
what does flex:1 mean?
可以解释。运营商不要求规格,仅要求发生的事情。不幸的是,Chrome现在是最受欢迎的浏览器,并且需要支持。我自己不是Chrome的粉丝或用户!
flex: 1
表示以下内容:
flex-grow : 1; ➜ The div will grow in same proportion as the window-size
flex-shrink : 1; ➜ The div will shrink in same proportion as the window-size
flex-basis : 0; ➜ The div does not have a starting value as such and will
take up screen as per the screen size available for
e.g:- if 3 divs are in the wrapper then each div will take 33%.
flex: 1
意味着1 1 0
...但是在IE上是1 1 0px
1 1 0
和1 1 0px
是等价的。IE恰好只支持一个单元。
1 1 0px
和1 1 1 0
等价时1 1 0px错误吗?
flex-basis
,将忽略内容,并且元素大小基于其flex-grow
/ flex-shrink
。
在某些浏览器中:
flex:1;
不等于flex:1 1 0;
flex:1;
= flex:1 1 0n;
(其中n是长度单位)。
这里的重点是flex-basis需要长度单位。
以Chrome为例,flex:1
并flex:1 1 0
产生不同的结果。在大多数情况下,它似乎flex:1 1 0;
可以正常工作,但让我们检查一下实际发生的情况:
Flex基础将被忽略,仅应用flex-grow和flex-shrink。
flex:1 1 0;
= flex:1 1;
=flex:1;
乍一看,这似乎可以,但是如果容器的应用单元是嵌套的,则可以。期待意外!
在CHROME中尝试此示例
.Wrap{
padding:10px;
background: #333;
}
.Flex110x, .Flex1, .Flex110, .Wrap {
display: -webkit-flex;
display: flex;
-webkit-flex-direction: column;
flex-direction: column;
}
.Flex110 {
-webkit-flex: 1 1 0;
flex: 1 1 0;
}
.Flex1 {
-webkit-flex: 1;
flex: 1;
}
.Flex110x{
-webkit-flex: 1 1 0%;
flex: 1 1 0%;
}
FLEX 1 1 0
<div class="Wrap">
<div class="Flex110">
<input type="submit" name="test1" value="TEST 1">
</div>
</div>
FLEX 1
<div class="Wrap">
<div class="Flex1">
<input type="submit" name="test2" value="TEST 2">
</div>
</div>
FLEX 1 1 0%
<div class="Wrap">
<div class="Flex110x">
<input type="submit" name="test3" value="TEST 3">
</div>
</div>
应当指出,这失败是因为某些浏览器未能遵守该规范。
使用完整的flex规范的浏览器:
最新版本的Chrome似乎终于可以解决此问题,但其他浏览器仍然没有。
经过测试并在Chrome Ver 74中工作。
flex: 1
的一样flex: 1 1 0
。在您的示例中,如果删除.Wrap
该类,则 .Flex110x,.Flex1, .Flex110, .Wrap
规则将按预期工作。
flex:1 1 0n;