flex布局,每个子元素都设置为flex:1但却不能等分
描述
2个子元素都是flex:1,按道理是一人一半嘛,问题来了,我给其中一个加一个: padding,然后就不是一人一半了,它变宽了,为啥,按道理应该是在flex:1里面自己padding,怎么又去挤占别的元素的空间了
期待的结果
1,为何如此?
2,不使用width:50%,仅使用flex能否解决不等宽的问题?
在线示例
https://codepen.io/l-raymond/...
代码示例
<div class='box'>
<div class='c1'>
c1c1c1c1c1c1
</div>
<div class='c2'>
c2c2c2c2c2c2
</div>
</div>
和
.box {
display: flex;
}
.c1 {
flex: 1;
background: red;
padding-left: 700px;
flex-basis: 50%;
}
.c2 {
flex: 1;
background: green;
flex-basis: 50%;
}
* {
box-sizing: border-box;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你大概对flex有误解,
flex: 1
相当于flex-grow: 1
,看看MDN对它的解释:重点——剩余空间,这是指定怎么分配剩余空间的,不是先分配好空间
我的理解是,
flex:1
是对剩余空间的均分,padding-left 不参与剩余空间的均分过程。想要padding均分效果,建议再加一层div,padding写到里面。像这样:
因为 依照
flex
的自动调整计算规范是不包含padding
的w3 规范这里的部分提到
flexItem
的可用空间要减去margin
、border
、padding
。具体可以看一下两份链接:
CSS Flexible Box Layout Module Level 1 - w3.org
html - How to get flexbox to include padding in calculations? - Stack Overflow