zoukankan      html  css  js  c++  java
  • flex:1;的含义

    今天有个需求希望底部的内容一直在底部,只有当中间内容多到屏幕底部的时候,底部的内容才自动移出屏幕。大概就是下面这个效果,当绿色的内容多到黄色区域的时候黄色区域自动移动出屏幕。

    版权归作者所有,任何形式转载请联系作者。
    作者:白板凳与黑木头(来自豆瓣)
    来源:https://www.douban.com/note/717223803/

    想想也简单,3个子view套一个父view,设置一个min-height:100%; display:flex; flex-direction:column;中间的view设置flex:1;需求完成,可以喝下午茶了。但是为什么设置flex:1的时候中间的部分就会自动填充父布局的剩余空间?【黑人脸??】

    到网上找了好多资料,其中下面两个参考链接讲的比较清楚,但是第二个(52841087)中的flex-shrink计算方式讲的不对,这个可以参考一下第一个。

    我这里也总结了一下:

    flex是 flex-grow,flex-shrink,flex-basis的缩写

    flex-grow::当父控件还有剩余空间的时候,是否进行放大(grow)其中数值代表的是放大比例,值为0的时候表示不放大;

    flex-shrink:当父控件空间不够的时候,是否进行缩小(shrink)其中数值代表的是与控件大小有关的缩小比例;

    flex-basis:当子空间含有这个属性的时候,代表了子空间占主轴的大小,主轴就是flex的主方向row是横向,column是竖向;(这里第一个链接中只说了width,如果flex方向是column也可以是height);

    假设现在有3个view垂直布局,第一个和第三个view不设置flex,中间的view设置flex:1:

    默认flex属性是0 1 auto,【父控件有剩余控件也不放大,父控件空间不足按1缩小,保持本身的空间大小】

    flex:1;的值是1 1 0%,【父控件有剩余空间占1份放大,父控件空间不足按1缩小,自身的空间大小是0%】

    这个时候(最上和最下的空间大小不会超过父控件)父控件还有剩余空间,剩余空间被中间的空间占有flex-grow:1;没有其他控件有放大属性,所以被中间这个控件独占。嗷,所以这么设置一个flex:1;就可以完成需求喝下午茶了,其实这么看只要设置flex-grow:1;在这个情况下也能满足这个需求?是的,在这种情况下,因为不存在超出父控件的情况,这么设置也可以。。。bingo!

    其他关于flex-grow,flex-shrink的计算下面两个链接有讲到。

    参考:

    https://blog.csdn.net/m0_37058714/article/details/80765562

    https://blog.csdn.net/qq_26598303/article/details/52841087

  • 相关阅读:
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
    Construct Binary Tree from Preorder and Inorder Traversal
    Construct Binary Tree from Inorder and Postorder Traversal
    Path Sum
    Symmetric Tree
    Solve Tree Problems Recursively
    632. Smallest Range(priority_queue)
    609. Find Duplicate File in System
    poj3159最短路spfa+邻接表
  • 原文地址:https://www.cnblogs.com/mmzuo-798/p/13838428.html
Copyright © 2011-2022 走看看