flex注意点
-
Flex布局以后,子元素的float、clear和vertical-align属性将失效
-
flex内部的子元素(除了position:absolute或fixed)无论是display:block或者display:inline,都成为了伸缩项目。(flex中的子项目会被当做块元素对待,并且是等高)
-
flex-shrink属性用于设置或检索弹性盒的收缩比率,默认为1。不允许为负值,flex-shrink值为0时表示不收缩,保持自身
-
伸缩项目自动box-sizing:border-box。
-
flex布局中的直接子元素的排列的最后一个子元素的
margin-right是无效的;如果空间没有占满的话。可以通过margin-left:auto设置排列的最后一个元素靠父盒子的右边界对齐 -
flex布局中的非直接子盒子是可以使用float属性的
-
float属性的盒子中可以使用flex布局
-
flex布局的盒子可以使用定位属性,但是flex属性对于脱离文档流(绝对定位和固定定位)的盒子是无效的
-
flex布局为一维布局,flex 布局的子元素不会脱离文档流,很好地遵从了“流的特性”
-
Ios9以下不支持flex,所以移动端避免使用flex
-
子项目对于flex父元素container的空间占比为flex-grow
属性
justify-content: 属性定义项目在主轴对齐方式
align-items: 属性定义项目在交叉轴上如何对齐
align-content:
align-self:属性允许单个项目有与其他项目不一样的对齐方式
案例点
自适应固定每行展示个数
父元素设置width:100% flex-wrap: wrap;,子元素采用flex: xx, xx, xx
flex: 0 0 calc((100% - 24px) / 2)说明:等于flex-grow=0(默认不放大)+flex-shrink=0(不缩小)+flex-basis=calc((100% - 24px) / 2( 项目占据主轴的空间)
.service {
width: 100%;
display: flex;
align-items: center;
align-content: center;
flex-wrap: wrap;
justify-content: flex-start;
&-item {
display: flex;
align-items: center;
align-content: center;
margin-bottom: 16px;
flex: 0 0 calc((100% - 24px) / 2);
}
子元素平分父元素空间,不留空隙
设置子元素的flex-grow: 1
flex-grow属性
定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍
flex-shrink属性
定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
负值对该属性无效
flex-basis属性
定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间
flex
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选
建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值