【问题标题】:CSS layout based on (flex) items content基于 (flex) 项目内容的 CSS 布局
【发布时间】:2020-12-04 06:15:51
【问题描述】:

我已经编写了一些 JavaScript 来实现这一点,但它的性能降低了我的组件速度并且它不干净,所以我正在努力寻找更有效的 CSS 解决方案来优化它。我已经在网上搜索过,没有任何效果。

所以基本上我们有这个模板(简化):

<div class="container">
  <div class="box"></div>
  <div class="container">
      <div class="box"></div>
      <div class="box"></div>
  </div>
</div>

所有 3 个.box 都占用 1/3(即calc(100% / 3))并连续渲染。

如果至少有一个box 的内容溢出它的专用空间- 所有3 个都假设在列中呈现(即flex-direction: column)。有没有什么方法可以使用flexboxes 而不使用 JavaScript 来实现这一点?

注意:这个块是在一个响应式组件(下拉菜单)中呈现的,即 100% 的网格单元。它可能会占用 100% 的屏幕以及 10% 的屏幕。所以我不能在这里使用任何媒体查询。

【问题讨论】:

  • 你能提供一个你有的解决方案吗?我很难想象你想要完成什么。你能加一个sn-p吗?
  • 我拥有的解决方案是 angular 组件的一部分,它使用一些捆绑的逻辑来获取组件的 ViewChild,它在渲染之前是 nativeElement.offsetWidth 。为了简化,它是这样的:verticalLayout = ((box2Width + box3Width) > containerWidth) ?真:假
  • 无论如何,我很快就会添加一个 plunkr。

标签: javascript html css flexbox


【解决方案1】:

如果要包裹最后一项,可以在 flexbox 容器中使用 flex-wrap:wrap;,如果 flex 项没有特定宽度,则可以使用 min-width。

如果你想在一个断点改变弹性盒子的方向,你可以像这样使用@media

@media screen and (max-width:680px){
    .flexContainer{
        flex-direction:column;
    }
}

【讨论】:

  • 我忘了说这个模板是组件的一部分,也就是网格的一部分。所以我不能在这里使用媒体查询...谢谢
  • 并且由于容器 - 只有最后 2 个 boxes 会包装。对我来说,将所有 3 个项目放在一个列中是至关重要的。而且我无法摆脱容器,因为它是具有逻辑的单独组件。
  • 如果您在 css 中选择 .container,所有元素都选择了此类,并且当您将方向更改为列时,所有子项都会更改这些行为(box1、container、box2、box3)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2017-12-17
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
相关资源
最近更新 更多