我们都知道,
flex属性是flex-grow
,flex-shrink
和flex-basis
属性的简写。
其默认值为0 1 auto
。这意味着:
flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;
但我注意到,在许多地方使用了flex: 1
。它是1 1 auto
还是1 0 auto
的简写?
我不明白这是什么意思?我没有在谷歌上搜索任何东西。
答案 0 :(得分:69)
flex: 1
表示以下内容:
flex-grow : 1; // this means that the div will grow in same proportion as the window-size
flex-shrink : 1; // this means that the div will shrink in same proportion as the window-size
flex-basis : 0; // this means that 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%.
答案 1 :(得分:58)
以下是解释:
https://www.w3.org/TR/css-flexbox-1/#flex-common
flex:< positive-number>
相当于flex:< positive-number> 1 0.使弹性项目具有灵活性,并将弹性基础设置为零,从而生成一个项目 接收flex中指定比例的可用空间 容器。如果Flex容器中的所有项目都使用此模式,则为其 尺寸将与指定的弯曲系数成比例。
因此flex:1
相当于flex: 1 1 0
答案 2 :(得分:42)
在某些浏览器中:
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>
&#13;
应该注意,这会失败,因为某些浏览器未能遵守specification。
使用完整flex规范的浏览器:
Chrome的最新版本似乎终于纠正了这个问题,但其他浏览器仍然没有。
在Chrome Ver 74中测试并使用。
答案 3 :(得分:6)
答案 4 :(得分:2)
flex: 1
将 flex-grow
设置为 1
(而默认值为 0
)。
这是做什么的:
<块引用>如果所有项目都将 flex-grow 设置为 1,则剩余空间 容器将平均分配给所有孩子。如果其中之一 children 的值为 2,剩余空间将占用两倍 与其他人一样多的空间(或者它会尝试,至少)。
(来源:CSS Tricks)
对于具有无单位数的单值 flex 语法(而不是 flex-basis
的值,另一个选项),
...它被解释为 flex: <number> 1 0
;这
flex-shrink
值假定为 1
,flex-basis
值为
假定为 0
。
(来源:MDN)
答案 5 :(得分:0)
我也对 flex: 1
感到困惑,所以我将在这里分享我对这个属性的理解 :)
要理解 flex: 1
的概念,首先我们必须确保父元素的 display 属性设置为 flex,即 display: flex
。现在,父元素中嵌套的 flexed 元素可以使用 flex: 1。
好的,现在的问题是这对 flexed 元素有什么影响?如果一个元素有 flex: 1
,这意味着所有其他元素的大小将与它们的内容具有相同的宽度,但具有 flex: 1
的元素将拥有剩余的全部空间。请参阅下图。
答案 6 :(得分:0)
默认值设置为 1 1 0%
(分别是 flex-grow flex-shrink flex-basis
的简写值)可能是因为这些值对“flex”项目最有意义。以下是这些值的确切含义:
例如,如果三个项目之一的 flex-grow 为 5 而其他项目仍然使用它们的默认值(即 1)怎么办?那么 flex-grow 为 5 的那个会得到 (300px / (1+1+5)) * 3 的额外空间。
另一个有用的例子是,如果您有一个 flex 容器,并且您希望每个子容器完全占据父容器的整个宽度(例如,图像轮播),在这种情况下,您可以使用 flex: 0 0 100%
在所有子项上,以便项目具有占据父项的全宽并关闭其增长/收缩的弹性基础。