html - 如何使 div 的宽度适应 flexbox 的内容

标签 html css flexbox

我想调整 .flexrow div 的宽度以适应内容,但我无法使用 flex 设置它。

HTML

<div class="fullwidth">
  <div class="sidebar">
    <p>sidebar</p>
    <p>sidebar</p>
    <p>sidebar</p>
    <p>sidebar</p>
    <p>sidebar</p>
    <p>sidebar</p>
  </div>
  <div class="center">
    <div class="flexrow">
      <div class="card">
        <p>card</p>
      </div>
    </div>
  </div>
</div>

CSS

.center {
  display: flex;
  justify-content: center;
}

.flexrow {
  display: inline-flex;
  flex-direction: row;
  flex-wrap: wrap;
}

.flexrow .card {
  width: 300px;
  height: 60px;
  background-color: red;
  margin: 10px;
  padding: 10px;
  text-align: center;
}

我创建了一个片段 here

这是我想要的例子: example

有什么建议吗?

最佳答案

这里的主要问题是,当元素换行时,无论是否使用 Flexbox,其容器都不会根据新的内容宽度调整其宽度。

使用现有的标记,这里有一个简单的修复,只需两步即可实现:

  1. justify-content: center; 添加到您的 .flexrow 规则

  2. 对于每个可能的列,您都需要少一个 ghost 元素来将最后一行的元素一直推到左边。添加的元素与新的 .flexrow .card:empty 规则一起发挥作用。

    .flexrow .card:empty {
      height: 0;
      margin: 0 10px;
      padding: 0 10px;
    }
    

Updated codepen

堆栈片段

.fullwidth {
  background-color: grey;
  display: flex;
}

.sidebar {
  flex: 0 0 280px;
  margin: 10px;
  padding: 10px;
  background-color: black;
  color: white;
}

.flexrow {
  display: flex;
  flex-wrap: wrap;
  align-content: center;
  justify-content: center;
}

.flexrow .card {
  width: 300px;
  height: 60px;
  background-color: red;
  margin: 10px;
  padding: 10px;
  text-align: center;
}

.flexrow .card:empty {
  height: 0;
  margin: 0 10px;
  padding: 0 10px;
}
<div class="fullwidth">
  <div class="sidebar">
    <p>sidebar</p>
    <p>sidebar</p>
    <p>sidebar</p>
    <p>sidebar</p>
    <p>sidebar</p>
    <p>sidebar</p>
  </div>
  <div class="center">
    <div class="flexrow">
      <div class="card">
        <p>card</p>
      </div>
      <div class="card">
        <p>card</p>
      </div>
      <div class="card">
        <p>card</p>
      </div>
      <div class="card">
        <p>card</p>
      </div>
      <div class="card">
        <p>card</p>
      </div>
      <div class="card">
        <p>card</p>
      </div>
      <div class="card">
        <p>card</p>
      </div>

      <!-- Ghost elements, if max columns is 4 one need 3 -->
      <div class="card"></div>
      <div class="card"></div>
      <div class="card"></div>

    </div>
  </div>
</div>

关于html - 如何使 div 的宽度适应 flexbox 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45320838/

相关文章:

css - 使用 Bootstrap 3 是否可以使列换行并具有相同的高度?

java - PHP While 循环调试

javascript - 通过单击第一个 div 设置第二个 div 的名称

php - 如何使用 php 创建额外的 css 标签

html - 当我不使用溢出时, float div 不显示背景颜色?

html - 伪元素与 anchor 标记边框不对齐

css - Flex-grow 不遵守边框。错误与否?还有什么办法克服?

css - 将 div 显示为有序列表项时,Firefox 问题显示为零?

javascript - 在谷歌浏览器中点击图片后,如何去除图片周围出现的边框?

javascript - 通过 Javascript 更改 CSS 过滤器值