flex布局,每个子元素都设置为flex:1但却不能等分

发布于 2022-09-12 23:26:28 字数 740 浏览 16 评论 0

描述

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

白况 2022-09-19 23:26:28

你大概对flex有误解,flex: 1相当于flex-grow: 1,看看MDN对它的解释:

CSS属性 flex-grow设置了一个flex项主尺寸的flex增长系数。它指定了flex容器中剩余空间的多少应该分配给项目(flex增长系数)。

重点——剩余空间,这是指定怎么分配剩余空间的,不是先分配好空间

已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入

雨落□心尘 2022-09-19 23:26:28

我的理解是,
flex:1 是对剩余空间的均分,padding-left 不参与剩余空间的均分过程。
image.png
想要padding均分效果,建议再加一层div,padding写到里面。像这样:
image.png


已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。

谜兔 2022-09-19 23:26:28

因为 依照 flex 的自动调整计算规范是不包含 padding

Determine the available main and cross space for the flex items. For each dimension, if that dimension of the flex container’s content box is a definite size, use that; if that dimension of the flex container is being sized under a min or max-content constraint, the available space in that dimension is that constraint; otherwise, subtract the flex container’s margin, border, and padding from the space available to the flex container in that dimension and use that value. This might result in an infinite value.

w3 规范这里的部分提到 flexItem 的可用空间要减去 marginborderpadding

具体可以看一下两份链接:
CSS Flexible Box Layout Module Level 1 - w3.org
html - How to get flexbox to include padding in calculations? - Stack Overflow

已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文