CSS Flexbox 子项未占用全部可用宽度

Posted

技术标签:

【中文标题】CSS Flexbox 子项未占用全部可用宽度【英文标题】:CSS Flexbox children items not taking up full available width 【发布时间】:2020-11-19 19:27:22 【问题描述】:

我正在尝试将卡片组件的标题放在最左侧,将其他一些数据放在最右侧,如下图所示:

我为此编写的组件如下所示:

    <div className="card">
      <div className="card-title">Some Title</div>
      <div className="card-data">
        <span>`Some data: 07/22/2020`</span>
        <span>TEST</span>
      </div>
    </div>

对于 CSS,我从之前的几篇文章中看到,解决方案是将 flex-grow:1flex: 1 1 auto 分配给子项。为此,我做了以下工作:

.card 
  display: flex;
  justify-content: space-between;
  .card-title 
    flex: 1;
  
  .card-data 
     flex: 1;
  

尽管将 flex-grow 指定为 1,但它并没有占用内容的全部空间,如此处突出显示的那样。

card div 确实位于组件的顶部,所以没有其他东西会影响这里的样式。这里是否需要任何其他属性/规范来使两个 div 占据整个宽度?

【问题讨论】:

试试这个:.card display: flex;弹性:1; justify-content: 之间的空格; @dp.js 不太确定我理解这背后的基本原理。 flex: 1 属性应该在子项上,对吗?我尝试将flex: 1 添加到父级,但不幸的是,这并没有解决这个问题。 你是对的。不需要 flex:1 到父卡元素。只需 display: flex, justify-content: space-between 就可以了。可以分享一个可重现的演示吗?因为很明显,无论您尝试过什么都是正确的,并且对我们中的一些人有用 【参考方案1】:

如果您需要使.card-title.card-data 元素占据卡片宽度的一半,并且定位在左侧和右侧,请尝试以下操作:

.card 
  display: flex;
  justify-content: space-between;

  .card-title 
    flex-grow: 1;
  

  .card-data 
    display: flex;
    flex-grow: 1;
    justify-content: flex-end;
  

【讨论】:

得到完全相同的输出,遗憾的是。我尝试分配背景颜色以验证选择器没有弄乱,它们也没有。出于某种原因,它根本没有使用 flex-grow: 1 属性。您的解决方案对我来说很有意义,不知道为什么它不起作用。例如,如果我在card-title 卡上执行margin-right: 700px 之类的操作,则确实会将.card-data 内容一直推到右侧,但是像这样硬编码边距值在这里对我没有帮助。 您能否尝试使用浏览器开发工具检查.card 元素,看看该元素是否与容器一样宽?或者只是为.card 添加边框,看看它是只包裹文本还是整行。我想知道元素的宽度是否有问题。【参考方案2】:

不要在卡片标题和卡片数据中使用flex: 1,只需在卡片上使用 flex 属性即可。

.card 
  display: flex;
  justify-content: space-between;

【讨论】:

这是我尝试的第一件事,不知道为什么,但这没有用。 尝试使用width: 100%.card 元素。【参考方案3】:

看不出有什么问题,应该只使用您编写的内容并将flex-grow: 1flex: 1 应用于卡片的子元素。您的 CSS/DOM 中有其他干扰因素。

https://jsfiddle.net/cg9y3mv6/

【讨论】:

这也是我的假设,坦率地说,这让我发疯了。 可能存在某种缓存问题,或者由于某种原因 css 不适用于您的组件?有人在这里遇到过类似的问题***.com/questions/55729132/…【参考方案4】:

实际上,您需要将元素上的类定义为类属性,而不是类名。一切都会好起来的

    <div class="card">
      <div class="card-title">Some Title</div>
      <div class="card-data">
        <span>`Some data: 07/22/2020`</span>
        <span>TEST</span>
      </div>
    </div>

【讨论】:

以上是关于CSS Flexbox 子项未占用全部可用宽度的主要内容,如果未能解决你的问题,请参考以下文章

Flexbox 子项在 Safari 中呈现错误

CSS3时代下的布局方式——Flexbox

CSS:flexbox水平溢出[关闭]

flexbox下的孩子没有指定宽度[重复]

CSS3之伸缩布局盒模型

React Native 弹性布局FlexBox