左边固定宽度,右边自适应的几种实现方案
html结构都如下1
2
3
4<div class="wrapper">
<div class="left">22</div>
<div class="right">11</div>
</div>
css为了方便去除了margin和padding1
2
3
4* {
margin: 0;
padding: 0;
}
1、双inline-block实现方案
1 | .wrapper { |
2、双float实现方案
1 | .wrapper { |
3、float + margin-left实现方案
1 | .wrapper { |
4、absolute + margin-left实现方案
1 | .wrapper { |
5、float + BFC实现方案
1 | .wrapper { |
6、flex实现方案
1 | .wrapper { |
总结
以上六种该方案实现,其中1、2方案都是利用calc
计算属性来实现右侧自适应,1方案中因为都是inline-block
,需要设置font-size: 0;
来去除空格影响,不设置会出现两个之间会有间隔,导致右边盒子掉到下一行,第3种方案,左边盒子左浮动,右边盒子不浮动,如果不设置margin-left
会导致右边盒子覆盖在左边盒子上面,第4种实现方案与第3种实现方案相同。利用左边盒子脱离文档流设置margin-left
。第五种左边浮动,右边如果不设置overflow:auto;
不会触发元素的BFC
,如果不触发元素的BFC
会导致,右边的盒子叠在左边盒子上面,触发元素的BFC
后,作用就是让右边的盒子不与左边的盒子重叠。第六种实现用的flex,左边的盒子固定宽,设置flex:0 0 auto
或者flex: none;
不会根据布局伸缩,右边盒子设置flex: 1 1 auto;
为弹性盒子,充满剩余部分,还有就是父级盒子设置align-items: flex-start;
是因为flex容器的一个默认属性值:align-items: stretch;
。这个属性导致了为了让两个盒子高度自动,需要设置: align-items: flex-start;