基于子元素垂直居中父级 div

发布于 2025-01-14 15:47:34 字数 1727 浏览 3 评论 0原文

我希望根据我的子 div 高度将我的父 div 高度居中。我的目标是有 3 个盒子,其中有一个更短但更宽的矩形,在其后面垂直居中。现在我的父div比子div更短更宽,但是我似乎无法将其垂直居中。

这是理想的结果: 我的理想结果

这是我当前的版本(请忽略文本和框颜色的细微差别)。 : 当前版本

.content {
    width: 80%;
    margin: 0px auto;
}


#container .col {
    border: 1px solid #00acd4;
    background-color: white;
    padding-top: 2em;
    padding-bottom: 2em;
    position: relative;
}

#parent {
    background-color: #f0f9fb;
    max-height: 80px;
}

#container {
    margin-top: 50px;
    margin-bottom: 50px;
}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">

<div id="container">
  <div id="parent">
    <div class="content">
      <div class="row">
        <div class="col ">

          <h3>$500</h3>
        </div>
        <div class="offset-1 col">

          <h3>$3500</h3>
        </div>
        <div class="col offset-1">

          <h3>50%</h3>
        </div>
      </div>
    </div>
  </div>
</div>

I am hoping to center my parent div height based on my child div height. My goal is to have 3 boxes with a shorter, but wider rectangle centered vertically behind it. Right now I have my parent div shorter and wider than the children, however I cannot seem to center it vertically.

Here is the ideal outcome:
my ideal outcome

Here is my current version (Please ignore minor differences with text and box colors). :
current version

.content {
    width: 80%;
    margin: 0px auto;
}


#container .col {
    border: 1px solid #00acd4;
    background-color: white;
    padding-top: 2em;
    padding-bottom: 2em;
    position: relative;
}

#parent {
    background-color: #f0f9fb;
    max-height: 80px;
}

#container {
    margin-top: 50px;
    margin-bottom: 50px;
}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">

<div id="container">
  <div id="parent">
    <div class="content">
      <div class="row">
        <div class="col ">

          <h3>$500</h3>
        </div>
        <div class="offset-1 col">

          <h3>$3500</h3>
        </div>
        <div class="col offset-1">

          <h3>50%</h3>
        </div>
      </div>
    </div>
  </div>
</div>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

篱下浅笙歌 2025-01-21 15:47:34

除非绝对必要,否则不要使用负边距。在这种情况下,事实并非如此。在 parent 上使用 flexalign-items: center;

.content {
  width: 80%;
  margin: 0px auto;
}

#container .col {
  border: 1px solid #00acd4;
  background-color: white;
  padding-top: 2em;
  padding-bottom: 2em;
  position: relative;
}

#parent {
  background-color: #f0f9fb;
  max-height: 80px;
  display: flex;
  align-items: center;
}

#container {
  margin-top: 50px;
  margin-bottom: 50px;
}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">

<div id="container">
  <div id="parent">
    <div class="content">
      <div class="row">
        <div class="col ">

          <h3>$500</h3>
        </div>
        <div class="offset-1 col">

          <h3>$3500</h3>
        </div>
        <div class="col offset-1">

          <h3>50%</h3>
        </div>
      </div>
    </div>
  </div>
</div>

Don't use a negative margin unless absolutely necessary. In this case, it is not. Use flex on parent with align-items: center;

.content {
  width: 80%;
  margin: 0px auto;
}

#container .col {
  border: 1px solid #00acd4;
  background-color: white;
  padding-top: 2em;
  padding-bottom: 2em;
  position: relative;
}

#parent {
  background-color: #f0f9fb;
  max-height: 80px;
  display: flex;
  align-items: center;
}

#container {
  margin-top: 50px;
  margin-bottom: 50px;
}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">

<div id="container">
  <div id="parent">
    <div class="content">
      <div class="row">
        <div class="col ">

          <h3>$500</h3>
        </div>
        <div class="offset-1 col">

          <h3>$3500</h3>
        </div>
        <div class="col offset-1">

          <h3>50%</h3>
        </div>
      </div>
    </div>
  </div>
</div>

倾城°AllureLove 2025-01-21 15:47:34

如果没有您想要做什么的草图,我相信这就是您想要的...您可以在 col div 中设置负边距,以便将它们带到父级之外。 ..

#container {
  margin-top: 50px;
  margin-bottom: 50px;
}

#parent {
  background-color: #f0f9fb;
}

.content {
  width: 80%;
  margin: 0px auto;
}

#container .col {
  border: 1px solid #00acd4;
  background-color: white;
  padding-top: 2em;
  padding-bottom: 2em;
  position: relative;
  margin-top: -20px;
  margin-bottom: -20px;
}
<div id="container">
  <div id="parent">
    <div class="content">
      <div class="row">
        <div class="col">
          <h3>$500</h3>
        </div>

        <div class="offset-1 col">
          <h3>$3500</h3>
        </div>

        <div class="col offset-1">
          <h3>50%</h3>
        </div>
      </div>
    </div>
  </div>
</div>

分叉你的小提琴:https://jsfiddle.net/jstgermain/o6xhL92s/

***推荐如下解决方案***

@Betsy,我建议简化您的 HTML 并使用 flexbox 代替之前的小提琴解决方案。您需要确保您的行为在浏览器和设备之间保持一致。对于较小的设备,您可以使用媒体查询将大小更改为 eht col 项目。

#container {
  margin-top: 50px;
  margin-bottom: 50px;
}

#parent {
  background-color: red;
  /*#f0f9fb;*/
  display: flex;
  justify-content: space-evenly;
}

.col {
  border: 1px solid #00acd4;
  background-color: white;
  padding: 1em;
  width: 25%;
  margin: -20px auto;
}
<div id="container">
  <div id="parent">
    <div class="col">
      <h3>$500</h3>
    </div>

    <div class="col">
      <h3>$3500</h3>
    </div>

    <div class="col">
      <h3>50%</h3>
    </div>
  </div>
</div>

Without a sketch of what you are trying to do, I believe this is what you are wanting... You can just set a negative margin in the col divs in order to take them outside of the parent...

#container {
  margin-top: 50px;
  margin-bottom: 50px;
}

#parent {
  background-color: #f0f9fb;
}

.content {
  width: 80%;
  margin: 0px auto;
}

#container .col {
  border: 1px solid #00acd4;
  background-color: white;
  padding-top: 2em;
  padding-bottom: 2em;
  position: relative;
  margin-top: -20px;
  margin-bottom: -20px;
}
<div id="container">
  <div id="parent">
    <div class="content">
      <div class="row">
        <div class="col">
          <h3>$500</h3>
        </div>

        <div class="offset-1 col">
          <h3>$3500</h3>
        </div>

        <div class="col offset-1">
          <h3>50%</h3>
        </div>
      </div>
    </div>
  </div>
</div>

Forked your fiddle: https://jsfiddle.net/jstgermain/o6xhL92s/

*** RECOMMEND BELOW SOLUTION ***

@Betsy, I would recommend simplifying your HTML and using flexbox over the previous solution to your fiddle. You will want to make sure your behavior is consistent across browsers and devices. You can use media queries to change the size to eht col items for smaller devices.

#container {
  margin-top: 50px;
  margin-bottom: 50px;
}

#parent {
  background-color: red;
  /*#f0f9fb;*/
  display: flex;
  justify-content: space-evenly;
}

.col {
  border: 1px solid #00acd4;
  background-color: white;
  padding: 1em;
  width: 25%;
  margin: -20px auto;
}
<div id="container">
  <div id="parent">
    <div class="col">
      <h3>$500</h3>
    </div>

    <div class="col">
      <h3>$3500</h3>
    </div>

    <div class="col">
      <h3>50%</h3>
    </div>
  </div>
</div>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文