如何在 CSS 中使子元素居中,即使它比父元素大?

新手上路,请多包涵

我想创建一个 css 类,以便可以将 div 放置在其父级的中心。我使用的代码是:

 .centered {
    position: absolute;
    margin: auto;

    bottom: 0px;
    left: 0px;
    top: 0px;
    right: 0px;
}

如果父元素大于子元素或具有相同的大小,它会起作用: https ://jsfiddle.net/cy8dn1km/

但是如果孩子更大,那么它的中心就不会位于其父母的中心。相反,它们的左边界将位于同一位置,子元素将仅向右扩展:

https://jsfiddle.net/797L7nce/

水平居中有问题。

如何在不添加新容器元素的情况下仅使用 CSS( 不使用 CSS 2D/3D 转换)来修复它?

原文由 Iter Ator 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

这是一个不使用 CSS 2D/3D 转换的解决方案。您可以在父元素上使用 display: flexflex-direction: column (这很 重要),在子元素上使用 display: table

 body,
html {
  width: 100%;
  height: 100%;
  margin: 0;
}
body {
  display: flex;
  align-items: center;
  justify-content: center;
  background: green;
}
.centered.d1 {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
}
.d1 {
  background: yellow;
  width: 50px;
  height: 50px;
}
.d2 {
  background: red;
  opacity: 0.7;
  width: 250px;
  height: 250px;
  display: table;
}
 <div class="centered d1">
  <div class="centered d2"></div>
</div>

原文由 Nenad Vracar 发布,翻译遵循 CC BY-SA 3.0 许可协议

添加 left: 50%; transform: translate(-50%, 0); 并删除 right: 0px;

 .centered {
    position: absolute;
    margin: auto;
    display: block;
    bottom: 0px;
    top: 0px;
    left: 50%;
    transform: translate(-50%, 0);
}

演示

原文由 Ismail Farooq 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题