css布局中的flex属性的使用

面试官:请你列举一下实现二列布局的方式?
小Z:父div => display:flex 第一个子div 定宽,第二个flex:1
面试官:flex:1 是什么意思?里面有几个属性?属性值是什么?分别代表什么意思?
小Z:。。。
解答:
flex三个属性
1.flex-grow => 放大
2.flex-shrink => 收缩
3.flex-basis => 缩放按照的标准
flex:1; => 1 1 0%
flex:2 => 2 1 0%
三个属性起作用的的条件
1.flex-grow触发的条件
  当item的总宽度,小于wrap的宽度的时候。 
 页面结构: 
  <div class="wrap">
    <div class="item1"></div>
    <div class="item2"></div>
    <div class="item3"></div>
  </div>
页面样式:
.wrap {
    width: 400px;
    display: flex;
    border: 1px solid #000;
  }
  .item1 {
    width: 100px;
    height: 50px;
    background: red;
    flex: 1;
  }
  .item2 {
    width: 100px;
    height: 50px;
    background: pink;
    flex: 1;
  }
  .item3 {
    width: 100px;
    height: 50px;
    background: green;
    flex: 1;
  }
放大计算原理:
如果第三属性值是 0%,按照 grow 的值来进行划分。
如果第三属性值是不是 0%,是具体值,那么整体的宽度将减去各个item累计的basic的值,剩下可支配的空间 按照grow 的比例划分。

2.flex-shrink触发条件
 当item的总宽度,大于wrap的宽度的时候。 
 页面结构 :
 <div class="wrap">
    <div class="item1"></div>
    <div class="item2"></div>
    <div class="item3"></div>
  </div>
样式:
 .wrap {
    width: 200px;
    display: flex;
    border: 1px solid #000;
  }
  .item1 {
    height: 50px;
    background: red;
    flex: 0 2 100px;
  }
  .item2 {
    height: 50px;
    background: pink;
    flex: 0 1 100px;
  }
  .item3 {
    height: 50px;
    background: green;
    flex: 0 2 200px;
  }
缩小计算规则:
按照 shrink 的值来进行缩放,第三属性值一定不能 0%,(主要是基于第三个参数进行缩放的  超过宽度=(累计宽度-父亲宽度的差值),按照缩放比例划分,然后 最后显示宽度 =(本身固有的宽度 - 超过宽度*划分比例)。
 如果为0 % ,还是第一个参数起作用。

注意点:
1.对于flex的自动收缩/放大,实际是划分的是可支配的空间,可支配的空间,并不包括 padding 、border、margin(flex item 元素不存在margin 合并的现象)
2.设置了item 的flex,就不要设置元素本身的width,不然设置的width,不生效。
3.对于flex 的item,如果不设置item的flex 的值,设置item宽度的宽度,当wrap大于item 的累计和时,item 不会进行方法。但是,如果item累计和大于wrap,子item会根据宽度来进行收缩。
4.对于二栏布局,第一个item 固定宽度,第二个item设置flex:1 .其实这种做法并不安全,当第二个子元素的内容超出flex为1 划分的宽度时,第一个item 的宽度将会被挤掉。是因为flex的子元素设置max-width:auto;造成的原因。
常见的解决方法:
1设置item的overflow:hidden。
2.设置第一个item 的flex 的basis为固定的宽度。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flex布局常用的属性有: 1. flex-direction:设置主轴的方向,可以是row(水平方向),column(垂直方向),row-reverse(水平方向反转),column-reverse(垂直方向反转)。 2. flex-wrap:设置是否换行,默认为nowrap,即不换行;可选值为wrap,即换行;wrap-reverse,即换行并反转。 3. flex-flow:是flex-direction和flex-wrap的简写形式,例如flex-flow: row wrap;。 4. justify-content:设置主轴上的对齐方式,可以是flex-start(默认值,左对齐),flex-end(右对齐),center(居对齐),space-between(两端对齐,项目之间的间隔相等),space-around(每个项目两侧的间隔相等)。 5. align-items:设置交叉轴上的对齐方式,可以是flex-start(顶部对齐),flex-end(底部对齐),center(居对齐),baseline(项目的第一行文字的基线对齐),stretch(默认值,如果项目未设置高度或设为auto,将占满整个容器的高度)。 6. align-content:多根轴线的对齐方式,仅在有多根轴线时生效。可选值有flex-start(顶部对齐),flex-end(底部对齐),center(居对齐),space-between(两端对齐,轴线之间的间隔相等),space-around(每根轴线两侧的间隔相等),stretch(轴线占满整个交叉轴)。 7. flex-grow:设置项目的放大比例,默认为0,即不放大;如果有剩余空间,将按照flex-grow的比例分配。 8. flex-shrink:设置项目的缩小比例,默认为1,即如果空间不足,项目将缩小;如果设置为0,则项目不会缩小。 9. flex-basis:定义了在分配多余空间之前,项目占据的主轴空间,默认为auto,即由项目内容决定。 10. flex:是flex-grow、flex-shrink和flex-basis的简写形式,例如flex: 1 1 auto;。 这些属性可以根据具体布局需求进行灵活配置,以实现不同的布局效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值