弹性布局flex:1详解

在最初学习flex布局的时候,局限于使用flex的属性来布局,但是实际的详细刨铣却很少,最近在一些大厂的面试中被闻到一些细节,感觉自己学的有些粗糙,这里好好整理下

首先明确一点是, flex 是 flex-growflex-shrinkflex-basis的缩写

flex-grow 属性定义弹性盒子项(flex item)的拉伸因子


举个例子:

HTML代码

< body>
  < h4>This is a Flex-Grow</ h4>
  < h5>A,B,C and F are flex-grow:1 . D and E are flex-grow:2 .</ h5>
  < div  id= "content">
    < div  class= "box"  style= "background-color:red;">A</ div>
    < div  class= "box"  style= "background-color:lightblue;">B</ div>
    < div  class= "box"  style= "background-color:yellow;">C</ div>
    < div  class= "box1"  style= "background-color:brown;">D</ div>
    < div  class= "box1"  style= "background-color:lightgreen;">E</ div>
    < div  class= "box"  style= "background-color:brown;">F</ div>
  </ div>
</ body>

CSS代码

 < style>
     #content {
   -ms-box-orienthorizontal;
   display-webkit-box;
   display-moz-box;
   display-ms-flexbox;
   display-moz-flex;
   display-webkit-flex;
   displayflex;

   -webkit-justify-contentspace-around;
   justify-contentspace-around;
   -webkit-flex-flowrow  wrap;
   flex-flowrow  wrap;
   -webkit-align-itemsstretch;
   align-itemsstretch;
}

.box {
   flex-grow1;
   border3 px  solid  rgba( 0, 0, 0, .2);
}

.box1 {
   flex-grow2;
   border3 px  solid  rgba( 0, 0, 0, .2);
}
  </ style>

效果如图:


flex-shrink:设置或检索弹性盒的收缩比率

语法:

flex-shrink<number>

默认值:1

适用于:flex子项

继承性:无

动画性:是

计算值:指定值

取值:

<number>
用数值来定义收缩比率。不允许负值

说明:

设置或检索弹性盒的收缩比率。
  • 根据弹性盒子元素所设置的收缩因子作为比率来收缩空间。
  • 示例:a,b,c将按照1:1:3的比率来收缩空间

    HTML Code:

    &lt;ul class=&quot;flex&quot;&gt;    &lt;li&gt;a&lt;/li&gt;    &lt;li&gt;b&lt;/li&gt;    &lt;li&gt;c&lt;/li&gt;&lt;/ul&gt;.flex{display:flex;width:400px;margin:0;padding:0;list-style:none;}.flex li{width:200px;}.flex li:nth-child(3){flex-shrink:3;}

    flex-shrink的默认值为1,如果没有显示定义该属性,将会自动按照默认值1在所有因子相加之后计算比率来进行空间收缩。

    本例中c显式的定义了flex-shrink,a,b没有显式定义,但将根据默认值1来计算,可以看到总共将剩余空间分成了5份,其中a占1份,b占1份,c占3分,即1:1:3

    我们可以看到父容器定义为400px,子项被定义为200px,相加之后即为600px,超出父容器200px。那么这么超出的200px需要被a,b,c消化

    通过收缩因子,所以加权综合可得200*1+200*1+200*3=1000px;
    于是我们可以计算a,b,c将被移除的溢出量是多少:
    a被移除溢出量:(200*1/1000)*200,即约等于40px
    b被移除溢出量:(200*1/1000)*200,即约等于40px
    c被移除溢出量:(200*3/1000)*200,即约等于120px
    最后a,b,c的实际宽度分别为:200-40=160px, 200-40=160px, 200-120=80px

flex-basis: flex-basis 指定了 flex 元素在主轴方向上的初始大小。如果不使用 box-sizing 来改变盒模型的话,那么这个属性就决定了 flex 元素的内容盒(content-box)的宽或者高(取决于主轴的方向)的尺寸大小。

取值

<'width'>
width 值可以是一个数字后面跟着绝对单位例如  pxmmpt; 该值也可以是一个百分数,那么这个百分数就是相对于其父弹性盒容器的宽或者高(取决于主轴方向)。负值是不被允许的。
content
基于 flex 的元素的内容自动调整大小。

语法

/* Specify <'width'> */
flex-basis: 10em;
flex-basis: 3px;
flex-basis: auto;

/* Intrinsic sizing keywords */
flex-basis: fill;
flex-basis: max-content;
flex-basis: min-content;
flex-basis: fit-content;

/* Automatically size based on the flex item’s content */
flex-basis: content;

/* Global values */
flex-basis: inherit;
flex-basis: initial;
flex-basis: unset;

Example

HTML

<ul class="container">
  <li class="flex flex1">1: flex-basis test</li>
  <li class="flex flex2">2: flex-basis test</li>
  <li class="flex flex3">3: flex-basis test</li>
  <li class="flex flex4">4: flex-basis test</li>
  <li class="flex flex5">5: flex-basis test</li>
</ul>

<ul class="container">
  <li class="flex flex6">6: flex-basis test</li>
</ul>

CSS

.container {
  font-family: arial, sans-serif;
  margin: 0;
  padding: 0;
  list-style-type: none;
  display: flex;
  flex-wrap: wrap;
}

.flex {
  background: #6AB6D8;
  padding: 10px;
  margin-bottom: 50px;
  border: 3px solid #2E86BB;
  color: white;
  font-size: 20px;
  text-align: center;
  position: relative;
}

.flex:after {
  position: absolute;
  z-index: 1;
  left: 0;
  top: 100%;
  margin-top: 10px;
  width: 100%;
  color: #333;
  font-size: 18px;
}

.flex1 {
  flex-basis: auto;
}

.flex1:after {
  content: 'auto';
}

.flex2 {
  flex-basis: -webkit-max-content;
  flex-basis: -moz-max-content;
  flex-basis: max-content;
}

.flex2:after {
  content: 'max-content';
}

.flex3 {
  flex-basis: -webkit-min-content;
  flex-basis: -moz-min-content;
  flex-basis: min-content;
}

.flex3:after {
  content: 'min-content';
}

.flex4 {
  flex-basis: -webkit-fit-content;
  flex-basis: -moz-fit-content;
  flex-basis: fit-content;
}

.flex4:after {
  content: 'fit-content';
}

.flex5 {
   flex-basis: content;
}

.flex5:after {
  content: 'content';
}

.flex6 {
  flex-basis: -webkit-fill-available;
  flex-basis: -moz-available;
  flex-basis: fill;
}

.flex6:after {
  content: 'fill/-webkit-fill-available/-moz-available';
}

Results


  • 11
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
引用介绍了CSS中的display:flex和display:inline-flex属性,这两个属性用于创建弹性布局。display:flex属性将元素设置为弹性容器,使其子元素能够灵活地调整大小和位置。而flex属性是用来控制弹性盒子中子元素的伸缩比例的,flex:1表示子元素能够平均分配弹性容器的剩余空间,使它们具有相等的宽度或高度。引用中也提到了display:flex属性,指出它是弹性布局的一种方式,并且简洁方便地实现了弹性布局的效果。综上所述,display:flex属性的flex:1表示子元素能够平均分配弹性容器的剩余空间。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [详解CSS中的display:flex||inline-flex属性](https://download.csdn.net/download/weixin_38501751/12891643)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [display:flex属性](https://blog.csdn.net/wangshuaibinggg/article/details/127191923)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [css display:flex 属性](https://blog.csdn.net/qq_40716795/article/details/114028424)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值