如何使用margin来居中inline-block元素

问题描述 投票:0回答:2

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个块时,代码可以工作。但是当我缩小屏幕时,由于边距,顶部块向左移动:

enter image description here

fiddle

没有媒体查询可以解决这个问题吗?

Edit

我试过flex-box:

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

fiddle2

html css centering
2个回答
0
投票

如果您使用具有负边距的容器,则无需在不同断点处更改行的端点的边距,您可以使用内联块。我在容器中将font-size设置为零,这样我就可以使用百分比来计算宽度,而不必担心空白区域。

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>

1
投票

解决方案是使用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>
© www.soinside.com 2019 - 2024. All rights reserved.