如何将行内块元素与边距居中

How to center inline-block element with margin

HTML:

<div id="wrap">
    <div id="block1"></div>
    <div id="block2"></div>
</div>

CSS:

div#wrap{
    margin-top: 3em;
    border: solid 1px black;
    text-align: center;
}

div#wrap *{
    display: inline-block;
    width: 12.5em;
    margin-top: 1em;
    height: 8em;
}

div#wrap *:not(:last-child){
    margin-right: 8em;
}

#block1{
    background: orange;
}

div#wrap #block2{
    background: magenta;
}

这两个块应该在响应式设计模式中居中。当屏幕足够宽以连续显示 2 个块时,代码就可以工作了。但是当我缩小屏幕时,由于边距,顶部块向左移动:

fiddle

是否可以在没有媒体查询的情况下解决这个问题?

编辑

我试过 flex-box:

div#wrap{
    margin-top: 3em;
    border: solid 1px black;
    display: flex;
    flex-flow: row wrap;
    justify-content: center;
}

fiddle2

一个解决方案是使用 flex 和 justify-content:space-around 并删除边距:

div#wrap {
  margin-top: 3em;
  border: solid 1px black;
  justify-content:space-around;
  display: flex;
  flex-wrap: wrap;
}

div#wrap * {
  display: inline-block;
  width: 12.5em;
  margin-top: 1em;
  height: 8em;
}

#block1 {
  background: orange;
}

#block2 {
  background: magenta;
}
<div id="wrap">
  <div id="block1"></div>
  <div id="block2"></div>
</div>

如果您使用负边距的容器,则无需在不同断点处改变行端点的边距,只需使用内联块即可。我在容器中将字体大小设置为零,这样我就可以使用百分比计算宽度而不必担心白色 space.

div#wrap {
  margin-top: 3em;
  border: solid 1px black;
  padding: 20px;
  text-align: center;
}

.block {
  display: inline-block;
  width: 12.5em;
  margin: 20px;
  height: 8em;
  font-size: 16px;
}

.block-container {
  margin: -20px;
  font-size: 0;
}

#block1 {
  background: orange;
}

#block2 {
  background: magenta;
}
<div id="wrap">
  <div class="block-container">
    <div class="block" id="block1"></div>
    <div class="block" id="block2"></div>
  </div>
</div>