老师你好,本节的视频里面讲解的都是容器宽度大于子项宽度的情况,但是今天我突然遇到一个问题,其简化代码为:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<div class="p">
<div class="c1"></div>
<div class="c2">
<div class="c3"></div>
</div>
</div>
</body>
</html>
* {
margin:0;
padding:0;
box-sizing:border-box
}
.p {
height:200px;
width:800px;
background-color:red;
display:flex;
}
.c1{
flex-basis:200px;
background:yellow;
height:200px;
}
.c2{
background:green;
overflow:scroll;
flex-grow:1;
}
.c3{
width:1200px;
}
在这个例子中,容器的宽度设置为800px,第一个子元素设置为flex-basis:200px, 第二个元素设置为flex-grow:1,并且里面还有一个子元素设置为width:1200px,那么此时应该是什么样的结果呢?
我一开始的想法是这样的: 父容器宽度是800px,减去第一个元素的宽度200px, 还剩600px,第二个元素恰好flex-grow:1,那么刚好是600px,至于它的1200px子元素,就让它超出好了。
然而现实却十分打脸并且让人震惊:

第一个子元素的宽度直接不起作用,直接变成0了 。

第二个子元素的宽度和它内部的子元素一样,为1200px.
从这里开始我就有点不理解了,按理说,flex-shrink的默认值为1,按理说div.c1和div.c2都应该缩小来满足父元素800px的限制啊?
然后我给div.c1设置flex-shrink:0

此时div.c1的宽度200px起作用了,可是div.c2的宽度还是1200px, 怎么才能让div.c2变成600px呢?(父容器800 - 第一个元素的200)
我也不知道怎么弄,但是就在那不断瞎弄,突然给div.c2设置为overflow:hidden,就可以了,

而我并不知道为什么。
希望老师能解答下为什么不行已经为什么又行了.
PS: CSS给我的感觉就像是无从下手,不知道从哪里分析,出了问题不知道为什么,只能从结果去反推,而不是从代码去推断结果应该是怎么样的。而且CSS的代码就那么一点点,让人感觉很简单,但是卡住了又会卡很久,真的很让人沮丧.
登录后可查看更多问答,登录/注册