【问题标题】:Center a group of wrapped flex items [duplicate]将一组包装的弹性项目居中[重复]
【发布时间】:2017-08-29 16:48:55
【问题描述】:

我正在尝试将一组包装的弹性项目居中。 HTML 如下所示:

main {
  background-color: blue;
  width: 390px;
  display: flex;
  justify-content: center;
}

.container {
  background-color: red;
  display: inline-flex;
  flex-wrap: wrap;
}

.a1 {
  color: grey;
  width: 100px;
  height: 200px;
  background-color: green;
  border: 1px solid black;
}
<main>
  <div class="container">
    <div class="a1"></div>
    <div class="a1"></div>
    <div class="a1"></div>
    <div class="a1"></div>
  </div>
</main>

DEMO

上面是这样的:

绿色盒子包装正确,但它们作为一个整体,没有在红色区域居中,

没有在.container 上定义宽度,因为红色块可以有任意大小,我希望尽可能多地彼此相邻。

有什么建议如何使包裹的绿色块居中?

更新:根据this 2 岁的帖子,这是不可能的。所以在我的情况下,我必须使用 javascript 来解决这个问题。但也许我可以使用CSS Grid Layout

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    不确定你想要什么样的居中

    所以有几个选择:

    选项1:将.container中的元素居中

    • 改为将justify-content: center; 添加到.container

    main {
      background-color: blue;
      width: 390px;
      display: flex;
    }
    
    .container {
      background-color: red;
      display: flex;
      flex-wrap: wrap;
      justify-content:center;
    }
    
    .a1 {
      color: grey;
      width: 100px;
      height: 200px;
      background-color: green;
      border: 1px solid black;
    }
    <main>
      <div class="container">
        <div class="a1"></div>
        <div class="a1"></div>
        <div class="a1"></div>
        <div class="a1"></div>
      </div>
    </main>

    选项 2:将 .container 居中

    • 添加一些width + margin:auto.container

    main {
      background-color: blue;
      width: 390px;
      display: flex;
      justify-content: center;
    }
    
    .container {
      background-color: red;
      display: inline-flex;
      flex-wrap: wrap;
      width: 300px;
      margin: auto;
    }
    
    .a1 {
      color: grey;
      width: 100px;
      height: 200px;
      background-color: green;
      border: 1px solid black;
      box-sizing: border-box
    }
    <main>
      <div class="container">
        <div class="a1"></div>
        <div class="a1"></div>
        <div class="a1"></div>
        <div class="a1"></div>
      </div>
    </main>

    选项 3:从上述选项中居中

    main {
      background-color: blue;
      width: 390px;
      display: flex;
    }
    
    .container {
      background-color: red;
      display: inline-flex;
      flex-wrap: wrap;
      width: 90%;
      margin: auto;
      justify-content: center;
    }
    
    .a1 {
      color: grey;
      width: 100px;
      height: 200px;
      background-color: green;
      border: 1px solid black;
    }
    <main>
      <div class="container">
        <div class="a1"></div>
        <div class="a1"></div>
        <div class="a1"></div>
        <div class="a1"></div>
      </div>
    </main>

    【讨论】:

    • 感谢您的帮助!您的第一个选项确实符合我的需要,除了第 4 个块居中而不是左对齐。
    • 你必须决定一些事情,你说你想让.container拥有任何width,但它不会超过390px,因为你在main中设置了它,所以使用@ 987654339@ 与 %margin 如我的选项 #2 和 #3 中所述,它将起作用。
    • .container 不应大于其父级。 main 在这里 390px 但它也可以是浏览器的宽度
    • 准确地说,在%.container 中使用width 将起作用
    • 我必须说它正在接近。结帐此jsfiddle。容器的宽度不正确。
    【解决方案2】:

    如果您只想让容器居中,请给容器一个固定的宽度或确保容器的宽度具有预期的宽度。

        main {
            background-color: blue;
            width: 390px;
            display: flex;
            justify-content: center;
        }
        
        .container {
            background-color: red;
            display: inline-flex;
            flex-wrap: wrap;
            width:306px;
        }
        
        .a1 {
          color: grey;
          width: 100px;
          height: 200px;
          background-color: green;
          border: 1px solid black;
        }
    <main>
      <div class="container">
        <div class="a1"></div>
        <div class="a1"></div>
        <div class="a1"></div>
        <div class="a1"></div>
      </div>
    </main>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-16
      • 2021-11-13
      • 1970-01-01
      • 2017-11-15
      • 2019-10-10
      • 2018-07-29
      • 2017-12-22
      • 2016-01-22
      相关资源
      最近更新 更多