flex:1和flex之间的区别
在mdn
flex:1
意味着相同
flex-grow:1
。 但是,其实它在浏览器中有不同的表现。
你可以在这个jsFiddle中通过改变CSS中的注释来尝试它。
当我使用flex: 1
,classname为test-container
的元素将为height:100%
但在使用flex-grow: 1
时不会发生。
我不明白为什么。 寻找一些帮助。 非常感谢。
.flex-1 {
display: flex;
flex-direction: column;
height: 500px;
background: red;
}
.child-1 {
height: 50px;
background: blue;
}
.child-2 {
flex-grow: 1;
/* flex:1; */
background: green;
}
.test-container {
display: flex;
flex-direction: row;
background: white;
height: 100%;
}
<div class="flex-1">
<div class="child-1"></div>
<div class="child-2">
<div class="test-container"></div>
</div>
</div>
flex
flex
属性是设置的简写:
flex-grow
flex-shrink
flex-basis
flex: 1
规则应该计算为:
flex-grow: 1
flex-shrink: 1
flex-basis: 0
这些值在规范中定义。 参见7.1.1节。 flex
基本价值
我说“应该计算”,因为在IE11和其他浏览器中,一个度量单位(如px
或%
以flex-basis
附加到0
值。 这可以有所作为(例如)。
flex-grow
flex-grow属性(在Flex容器中分配容器中的自由空间)在自行声明时,会将flex-shrink
和flex-basis
作为初始值。
因此,当您设置flex-grow: 1
,浏览器将呈现以下内容:
flex-grow: 1
(覆盖默认值,即0) flex-shrink: 1
(这是默认值) flex-basis: auto
(这是默认值) flex: 1
和flex-grow: 1
之间的区别flex-grow: 1
最终, flex: 1
和flex-grow: 1
之间的区别在于前者设置了flex-basis: 0
,而后者保留默认的flex-basis: auto
。
有关flex-basis: 0
和flex-basis: auto
之间区别的完整说明flex-basis: auto
请参阅此帖:
你的代码示例
你在代码中看到不同的原因是flex-basis
控制列方向容器的高度。
在Chrome中,使用flex-basis: auto
,元素的高度为450px(500px父 - 50px标题)。 换句话说, flex-grow
可以自由分配空闲空间。
使用flex-basis: 0
,元素的高度为0, flex-grow
没有可分配的空间。
Flex项目的子项上的height: 100%
因为没有正确应用而被忽略,正如这些帖子中所解释的:
height
属性和百分比值 在阅读上面的帖子时,您还将了解为什么您的代码在Firefox,Safari,Edge和IE中呈现不同的效果。
我明白为什么会发生这种情况。 事实上
flex:1
=== flex-grow:1;flex-shrink:1;flex-basis:0%
关键是flex-basis:0%
。 如果您使用flex-grow:1
,则flex-basis
将为auto。 在这个解答中,你不能让height:100%
工作。
但我不确定何时
flex:1
=== flex-grow:1;flex-shrink:1;flex-basis:0%
会发生。 在文档中
flex:1
!== flex-grow:1;flex-shrink:1;flex-basis:0%