flex教程

975 阅读3分钟

flex注意点

  1. Flex布局以后,子元素的float、clear和vertical-align属性将失效

  2. flex内部的子元素(除了position:absolute或fixed)无论是display:block或者display:inline,都成为了伸缩项目。(flex中的子项目会被当做块元素对待,并且是等高)

  3. flex-shrink属性用于设置或检索弹性盒的收缩比率,默认为1。不允许为负值,flex-shrink值为0时表示不收缩,保持自身

  4. 伸缩项目自动box-sizing:border-box。

  5. flex布局中的直接子元素的排列的最后一个子元素的margin-right是无效的;如果空间没有占满的话。可以通过margin-left:auto设置排列的最后一个元素靠父盒子的右边界对齐

  6. flex布局中的非直接子盒子是可以使用float属性的

  7. float属性的盒子中可以使用flex布局

  8. flex布局的盒子可以使用定位属性,但是flex属性对于脱离文档流(绝对定位和固定定位)的盒子是无效的

  9. flex布局为一维布局,flex 布局的子元素不会脱离文档流,很好地遵从了“流的特性”

  10. Ios9以下不支持flex,所以移动端避免使用flex

  11. 子项目对于flex父元素container的空间占比为flex-grow

属性

www.ruanyifeng.com/blog/2015/0…

justify-content: 属性定义项目在主轴对齐方式

align-items: 属性定义项目在交叉轴上如何对齐

align-content:

image.png


align-self:属性允许单个项目有与其他项目不一样的对齐方式

image.png

案例点


image.png


image.png


自适应固定每行展示个数

www.cxyzjd.com/article/wei…

image.png

父元素设置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,即项目的本来大小。

它可以设为跟widthheight属性一样的值(比如350px),则项目将占据固定空间

flex

flex属性是flex-growflex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选

建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值

参考

zhuanlan.zhihu.com/p/354926684