如何在div中垂直放置段落而不使两个div重叠?

时间:2018-12-28 22:38:30

标签: html css css3 flexbox

我不知道如何在此div中垂直居中放置我的名字。应该是我网站上的主页。 PgOne div应该占据人的屏幕的高度,因此名称应该以div(主)为中心,该div位于PgOne导航栏的正下方。

有效解决方案的问题是,当窗口垂直方向真的很小时,它会进入导航栏。

我已经在.main和.name的CSS中尝试过这些

flex-grow: 1; 
display: flex; 
align-items: center;

^^可以,但是当窗口垂直方向真的很小时,它会进入导航栏。

transform: translate(-50%, -50%);
position: absolute;

^^这有效,但是当窗口很小时,它们会重叠。

padding-top: 10%; padding-bottom: 10%;

^^不起作用。

display: table-cell; 
text-align: center; 
vertical-align: middle;

^^不起作用。

这是我的代码:

<div class=PgOne>

    <div class="navbar">
        <div>
            <p>HOME</p>
        </div><div>
            <p>ABOUT</p>
        </div><div>
            <p>EXPERIENCE</p>
        </div><div>
            <p>RESUME</p>
        </div><div>
            <p>CONTACT</p>
        </div>
    </div>

    <div class=main>
        <div class="name">
            <p>FirstName<br>LastName</p>
        </div>
    </div>

</div>


CSS

.navbar div {
    margin-top: 13px;
    margin-right: 1%;
    width: 18%;
    font-size: 20px;
    display: inline-block;
    position: relative;
}
.main {
    font-size: 25px;
    margin: 0 auto;
    text-align: center;

    width: 50%;
    transform: translate(-50%, -50%);
    position: absolute;
    top: 50%;
    left: 50%;
    padding: 20px;

    /*flex-grow: 1; 
    display: flex; 
    align-items: center;*/
}

2 个答案:

答案 0 :(得分:1)

名称​​ 在其容器DIV中垂直居中。您只是没有为div(.main)设置任何高度,因此DIV本身不会占据整个页面的高度,如果您要这样做的话。在下面的代码修改中,我使用calc作为高度(展开查看),但是实际方法取决于您真正想要/需要的内容,即页面的完整代码。

.navbar div {
  margin-top: 13px;
  margin-right: 1%;
  width: 18%;
  font-size: 20px;
  color: white;
  display: inline-block;
  background: #555;
}

.main {
  display: flex;
  justify-content: center;
  height: calc(100vh - 100px);
  background: #eee;
  align-items: center;
  font-size: 75px;
  margin: 0 auto;
}
<div class=PgOne>

  <div class="navbar">
    <div>
      <p>HOME</p>
    </div>
    <div>
      <p>ABOUT</p>
    </div>
    <div>
      <p>EXPERIENCE</p>
    </div>
    <div>
      <p>RESUME</p>
    </div>
    <div>
      <p>CONTACT</p>
    </div>
  </div>

  <div class=main>
    <p>FirstName<br>LastName</p>
  </div>

</div>

答案 1 :(得分:1)

删除绝对位置transform后,我将PgOne设置为flex父级,并添加了min-height: 100vh(完整视口高度)。接下来,我将flex-grow: 1应用于main,指示它占用尽可能多的垂直空间。我没有在navbar中添加任何内容,因此它会占用剩余的垂直空间。为了显示它占据了正确的空间和垂直居中,我在main上添加了背景色。

http://jsfiddle.net/j8meqtvp/

.PgOne {
  display: flex;
  min-height: 100vh;
  flex-direction: column;
}

.navbar div {
    margin-top: 13px;
    margin-right: 1%;
    width: 18%;
    font-size: 20px;
    display: inline-block;
    position: relative;
}
.main {
    font-size: 25px;
    margin: 0 auto;
    text-align: center;
    width: 50%;
    padding: 20px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    flex-grow: 1;
    background-color: rgba(0, 0, 0, .1);
}
<div class=PgOne>

    <div class="navbar">
        <div>
            <p>HOME</p>
        </div><div>
            <p>ABOUT</p>
        </div><div>
            <p>EXPERIENCE</p>
        </div><div>
            <p>RESUME</p>
        </div><div>
            <p>CONTACT</p>
        </div>
    </div>

    <div class=main>
        <div class="name">
            <p>FirstName<br>LastName</p>
        </div>
    </div>

</div>