Flexbox间距在中间,但如果一个元素居中

时间:2019-09-09 18:55:40

标签: css flexbox

我有以下HTML和CSS。

<div class="container-box">
  <div class="box"></div>
  <div class="box"></div>
</div>
<div class="container-box">
  <div class="box"></div>
</div>
.container-box {
  width: 200px;
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  background-color: red;
  margin:50px;
}

.box {
  background-color: #9009A0;
  height: 50px;
  width: 50px;
}

哪个布局如下:

CSS layout

多个项目的第一个布局符合我的预期,但是如何更改第二个布局以将元素定位在中心,因为它只有一个元素?

请参阅以下代码笔:https://codepen.io/dennismadsen/pen/oNvqjjV

3 个答案:

答案 0 :(得分:5)

对于容器中只有一项的情况,可以使用app.post("/cart",function(req,res){ console.log(req) }); 伪类。

将此添加到您的代码中:

void EraseEveryOdd(std::vector<int>& v) {
  if ((v.size() % 2) > 0)
    v.pop_back();

  auto size = v.size() / 2;

  for (size_t i = 0; i < size; ++i)
    v.erase(v.begin() + i);
}

void EraseEveryEven(std::vector<int>& v) {
  if ((v.size() % 2) == 0)
    v.pop_back();

  auto size = (v.size() / 2) + 1;

  for (size_t i = 1; i < size; ++i)
    v.erase(v.begin() + i);
}

:only-child
.box:only-child {
  margin: 0 auto;
}

在这种情况下,弹性.container-box { width: 200px; display: flex; flex-direction: row; justify-content: space-between; background-color: red; margin: 50px; } .box { background-color: #9009A0; height: 50px; width: 50px; } .box:only-child { margin: 0 auto; }的边距将覆盖<div class="container-box"> <div class="box"></div> <div class="box"></div> </div> <div class="container-box"> <div class="box"></div> </div>,因为:

  

§ 8.1. Aligning with auto margins

     

在通过autojustify-content进行对齐之前,任何   正的可用空间分配给该维度的自动边距。


有关justify-content的更多信息:

  

§ 6.6.5.10. :only-child pseudo-class

     

align-self伪类表示没有元素的元素   兄弟姐妹。与:only-child相同或   :only-child,但特异性较低。


有关弹性:first-child:last-child边距的更多信息:


另外,要突出一些有趣的弯曲行为,如果您使用:nth-child(1):nth-last-child(1)而不是auto,则不需要space-around边距。

答案 1 :(得分:1)

有关信息,如果您想了解非常老的浏览器,也可以同时使用:first-child:last-child

.container-box {
  width: 200px;
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  background-color: red;
  margin: 50px;
}

.box {
  background-color: #9009A0;
  height: 50px;
  width: 50px;
}

.container-box .box:first-child:last-child {
  margin: 0 auto;
}
<div class="container-box">
  <div class="box"></div>
  <div class="box"></div>
</div>
<div class="container-box">
  <div class="box"></div>
</div>

答案 2 :(得分:0)

这是一个仅有利润的想法:

.container-box {
  width: 400px;
  display: flex;
  background-color: red;
  margin: 30px;
}

.box {
  background-color: #9009A0;
  height: 50px;
  width: 50px;
}

.box:first-child {
  margin-right: auto;
}

.box:last-child {
  margin-left: auto;
}
<div class="container-box">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>
<div class="container-box">
  <div class="box"></div>
  <div class="box"></div>
</div>
<div class="container-box">
  <div class="box"></div>
</div>

如果要包含3个以上的元素,则可以添加一条额外的规则

.container-box {
  width: 400px;
  display: flex;
  background-color: red;
  margin: 30px;
}

.box {
  background-color: #9009A0;
  height: 50px;
  width: 50px;
}

.box:not(:last-child):not(:first-child) {
  margin:auto;
}

.box:first-child {
  margin-right: auto;
}

.box:last-child {
  margin-left: auto;
}
<div class="container-box">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>
<div class="container-box">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>
<div class="container-box">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>
<div class="container-box">
  <div class="box"></div>
  <div class="box"></div>
</div>
<div class="container-box">
  <div class="box"></div>
</div>