请教几个flex的问题
*{
padding: 0;
margin: 0;
}
.box{
display: flex;
flex-direction: column;
height: 600px;
}
.b-header{
height: 100px;
background: #4169E1;
}
.b-container{
flex: 0 1 auto;
overflow-y: auto;
background: #76D5FF;
}
<div class="box">
<div class="b-header">
b-header
<!-- <p style="height: 200px;">inner-header</p> -->
</div>
<div class="b-container">
b-container
<p style="height: 2000px;">inner-container</p>
</div>
</div>
- 在设置了display:flex的盒子里,子元素如果没有设置控制交叉轴的flex的属性,浏览器会不会有默认的值作为显示处理?
- 这个例子,为什么b-header设置了100px的高度无效,会被压缩,最小到内容大小?难道会与问题1有关吗?
- 如果把 b-header里的p标签 显示出来,为什么 b-header的高度又正常,不被压缩了?这里的flex-shrink是怎么计算的权重?
- 如果 b-container 的flex属性改为 flex:1 0 auto;height:0; 为什么与 flex:1 1 0%的表现形式一样,flex-basis按不是子元素的内容高度计算吗,与flex元素的高度难道有联系吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先问题1和2 MDN Flex布局 都可以解答,
问题1,会有以下默认值
flex-shrink: 1; flex-basis: auto; flex-wrap: nowrap;
问题2,文章中有说明,当内容超过了容器,会按
flex-shrink
进行压缩,由于默认都是1,所以大约计算可知b-header高度为 100/(100+2000+20) * 600 = 28.3,可以通过浏览器查看一下问题3,可以看下张鑫旭的Oh My God,CSS flex-basis原来有这么多细节这篇文章。以下是节选:
这里
height
的作用是限制了子元素p
的高度,从而达到了间接影响flex-basis
计算。也就是flex-basis:auto
时是根据内容来计算的,但是由于b-header的height
限制了内容的高度,也就是限制了p
的高度,然后计算flex-basis:auto
时只有文本和p
可见的部分。这里你可以把p
的height
设置的小一点,你可以看到b-header的height
并没有作用问题4的话,看张鑫旭的那篇文章应该能够解答
所以,用
flex
的时候,需要用width/height
时最好直接用flex-basis
,混用的话,还是有许多奇怪的问题