html - 为什么 col break 元素占用 flexbox 中的空间

标签 html css flexbox

我有以下片段。它在一行中显示 4 列。当您单击任何顶部按钮时,脚本将根据单击的按钮添加一个新的 <div class="break-row" /> 元素,这会将列分成新行。这里的问题是 .break-row 元素即使在其高度为 0px 时也会占用垂直空间。我认为在这种情况下,.col 元素应该填满垂直可用空间。

我的目标是移除灰色的空白区域,并且 .col 元素将自己拉伸(stretch)到该区域。该灰色区域的解释是什么?我该如何摆脱它?

$('a').on('click', function(e) {
  e.preventDefault();
  $('.break-row').remove();

  var breakAfter = $(this).data('breakafter');
  if (breakAfter > 0) {
    $('<div class="break-row" />').insertAfter('.col:nth-child(' + breakAfter + 'n)');
  }


});
.row {
  display: flex;
  flex: 1 1 auto;
  flex-wrap: wrap;
  background: #222;
  width: 500px;
  height: 500px;
}

.col {
  display: flex;
  flex-flow: column;
  flex: 1 1 auto;
}

.break-row {
  width: 100%;
  flex: 0 0 auto;
  height: 0px;
}

a {
  background: #456;
  padding: 10px;
  border-radius: 5px;
  margin: 10px;
  display: inline-block;
  color: #fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" data-breakafter="1">
Break after every col
</a>
<a href="#" data-breakafter="2">
Break after every 2 col
</a>
<a href="#" data-breakafter="3">
Break after every  3 col
</a>
<a href="#" data-breakafter="0">
No break
</a>

<div class="row">
  <div class="col" style="background:#0f0;width:10%;">
    aaa
  </div>
  <div class="col" style="background:#f00;width:40%;">
    bbb
  </div>
  <div class="col" style="background:#0f0;width:30%;">
    ccc
  </div>
  <div class="col" style="background:#f00;width:20%;">
    ddd
  </div>
</div>

最佳答案

这应该可以解决您的用例,我向 cols 添加了 50% 的最小高度,解决了所有情况下的问题,除了每个之后都有一个中断,所以在那种情况下我添加了一个类到行并将列的最小高度更改为 25%。

更新的 JS

$('a').on('click', function(e) {
  e.preventDefault();
  $('.break-row').remove();
  $('.row').removeClass('always-break')

  var breakAfter = $(this).data('breakafter');
  if (breakAfter > 0) {
    $('<div class="break-row" />').insertAfter('.col:nth-child(' + breakAfter + 'n)');

    if (breakAfter === 1) {
       $('.row').addClass('always-break')
    }
  }


});

更新的 CSS

.row {
  display: flex;
  flex: 1 1 auto;
  flex-wrap: wrap;
  background: #222;
  width: 500px;
  height: 500px;
}

.col {
  display: flex;
  flex-flow: column;
  flex: 1 1 auto;
  min-height: 50%;
}

.row.always-break .col{
    min-height: 25%;
}

.break-row {
  width: 100%;
  flex: 0 0 auto;
  height: 0px;
}

a {
  background: #456;
  padding: 10px;
  border-radius: 5px;
  margin: 10px;
  display: inline-block;
  color: #fff;
}

关于html - 为什么 col break 元素占用 flexbox 中的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48078276/

相关文章:

html - 如何使输入文本栏透明但保持文本在里面?

php - 如何在 Wordpress 上获取菜单数据

html - 在标题中轻松创建水平导航栏

css - 带有 Assetic 的 Synmfony 2 中 CSS 文件中的@font-face 规则

html - 如何在 html/css 中用图像替换文本

css - IE6 - 元素弹出和弹出

html - 为什么 100% 的输入宽度总是超出包含的 div?

html - 如何使 flex 元素缩小到最小的合适尺寸,但尺寸相同?

javascript - 如何测试 flexbox div 是否设置为 `display:block` ?

html - 在仅使用 CSS 的 flex 布局的行/列中,让某些元素沿交叉轴堆叠