2017-06-13 78 views
1

一个部分由浮动到边上的元素组成的导航组,中心文本组和背景图像组成。截面高度未被手动设置为适合背景图像。 我如何去垂直居中文本组?它是div.h1-container垂直居中容器内多个div中的一个

Plunkr:https://plnkr.co/edit/rSWgdfPQEbIeXbPh4wO1?p=preview

body { 
 
    font: 15px/1.5 Arial, Helvetica, sans-serif; 
 
    padding: 0; 
 
    margin: 0; 
 
    background-color: #f4f4f4; 
 
} 
 

 

 
/* Global */ 
 

 
.container { 
 
    width: 80%; 
 
    margin: auto; 
 
    overflow: hidden; 
 
} 
 

 
.clear { 
 
    clear: both; 
 
} 
 

 
ul { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
section h2 { 
 
    line-height: 1.0; 
 
} 
 

 
.button_1 { 
 
    height: 34px; 
 
    background: tomato; 
 
    border: 0; 
 
    padding-left: 20px; 
 
    padding-right: 20px; 
 
    color: #ffffff; 
 
    width: 200px; 
 
} 
 

 
.showcase-nav a { 
 
    color: #ffffff; 
 
    text-decoration: none; 
 
    text-transform: uppercase; 
 
    font-size: 16px; 
 
} 
 

 
.showcase-nav { 
 
    padding-top: 30px; 
 
    margin-top: 10px; 
 
    float: right; 
 
} 
 

 
.showcase-nav li.social i { 
 
    padding: 0 4px; 
 
} 
 

 
.showcase-nav li { 
 
    display: inline; 
 
    padding: 0 20px 0 20px; 
 
} 
 

 
.showcase-branding { 
 
    float: left; 
 
} 
 

 
.showcase-branding h1 { 
 
    font-size: 26px; 
 
    margin: 0; 
 
    padding-top: 30px; 
 
    color: #fff; 
 
} 
 

 
.showcase-branding .highlight { 
 
    color: #e8491d; 
 
    font-weight: bold; 
 
} 
 

 
.showcase-nav a:hover { 
 
    color: #cccccc; 
 
    font-weight: bold; 
 
} 
 

 
.h1-container { 
 
    width: 70%; 
 
    margin: auto; 
 
} 
 

 
.h1-container h1 { 
 
    text-transform: uppercase; 
 
    text-align: center; 
 
    color: #fff; 
 
} 
 

 
.h1-container p { 
 
    width: 81%; 
 
    background: tomato; 
 
    margin: auto; 
 
    border-radius: 10px; 
 
    text-align: center; 
 
    color: #fff; 
 
} 
 

 

 
/* Showcase */ 
 

 
#showcase { 
 
    background: url('http://i68.tinypic.com/2j5jho4.png') no-repeat; 
 
    background-size: contain; 
 
    width: 100%; 
 
    display: inline-block; 
 
    position: relative; 
 
    margin: 0 auto; 
 
} 
 

 
#showcase:after { 
 
    padding-top: 51.46%; 
 
    display: block; 
 
    content: ''; 
 
} 
 

 
#showcase .container { 
 
    position: absolute; 
 
    top: 0; 
 
    bottom: 0; 
 
    right: 0; 
 
    left: 0; 
 
} 
 

 
#showcase .h1-container h1 { 
 
    font-size: 55px; 
 
    margin-bottom: 10px; 
 
} 
 

 
#showcase p { 
 
    font-size: 20px; 
 
    padding: 5px; 
 
}
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" /> 
 

 
<section id="showcase"> 
 
    <div class="container"> 
 
    <div class="showcase-branding"> 
 
     <h1>Title</h1> 
 
    </div> 
 
    <nav class="showcase-nav"> 
 
     <ul> 
 
     <li class="current"><a href="about.html">About</a></li> 
 
     <li><a href="contact.html">Contact</a></li> 
 
     <li class="social"><a href=""><i class="fa fa-linkedin-square"></i></a><a href=""><i class="fa fa-facebook-official"></i></a><a href=""><i class="fa fa-twitter"></i></a></li> 
 
     </ul> 
 
    </nav> 
 
    <div class="clear"></div> 
 
    <div class="h1-container"> 
 
     <h1>Text on line 1<br>text on line 2</h1> 
 
     <p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum <i class="fa fa-caret-right"></i></p> 
 
    </div> 
 
    </div> 
 
</section>

+0

@RamonMarques水平居中事业部是一个更容易比垂直我不认为这两篇文章是重复 –

+0

我的问题,而中心内的文字组比垂直水平。 –

+0

@ElAnonimo如果你不介意把'.h1-container'中的所有内容垂直居中,实际上甚至可能会有另一种方式。我会调整我的答案 – Anthony

回答

2

鉴于目前情况下有两种简单的方法去这个问题。

一种方法是给.h1-containerdisplay: flexflex-direction: columnjustify-content: center

这是jsfiddle。但是,如果要这样做,放置在.h1-container中的每个元素和每个新元素都将垂直堆叠并相对于.h1-container垂直居中,因此它看起来好像子元素不居中如果.h1-container没有正确居中。

还请记住justify-content始终将儿童元素相对于弹性盒的方向进行定位。因此,如果您的弹性框方向没有明确设置,并且由于默认设置为flex-direction: rowjustify-content会将儿童水平放置。 align-items将始终与柔性盒的方向属性相反。

body { 
 
    font: 15px/1.5 Arial, Helvetica, sans-serif; 
 
    padding: 0; 
 
    margin: 0; 
 
    background-color: #f4f4f4; 
 
} 
 

 

 
/* Global */ 
 

 
.container { 
 
    width: 80%; 
 
    margin: auto; 
 
    overflow: hidden; 
 
} 
 

 
.clear { 
 
    clear: both; 
 
} 
 

 
ul { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
section h2 { 
 
    line-height: 1.0; 
 
} 
 

 
.button_1 { 
 
    height: 34px; 
 
    background: tomato; 
 
    border: 0; 
 
    padding-left: 20px; 
 
    padding-right: 20px; 
 
    color: #ffffff; 
 
    width: 200px; 
 
} 
 

 
.showcase-nav a { 
 
    color: #ffffff; 
 
    text-decoration: none; 
 
    text-transform: uppercase; 
 
    font-size: 16px; 
 
} 
 

 
.showcase-nav { 
 
    padding-top: 30px; 
 
    margin-top: 10px; 
 
    float: right; 
 
} 
 

 
.showcase-nav li.social i { 
 
    padding: 0 4px; 
 
} 
 

 
.showcase-nav li { 
 
    display: inline; 
 
    padding: 0 20px 0 20px; 
 
} 
 

 
.showcase-branding { 
 
    float: left; 
 
} 
 

 
.showcase-branding h1 { 
 
    font-size: 26px; 
 
    margin: 0; 
 
    padding-top: 30px; 
 
    color: #fff; 
 
} 
 

 
.showcase-branding .highlight { 
 
    color: #e8491d; 
 
    font-weight: bold; 
 
} 
 

 
.showcase-nav a:hover { 
 
    color: #cccccc; 
 
    font-weight: bold; 
 
} 
 

 
.h1-container { 
 
    width: 70%; 
 
    margin: auto; 
 
    display: flex; 
 
    flex-direction: column; 
 
    justify-content: center; 
 
} 
 

 
.h1-container h1 { 
 
    text-transform: uppercase; 
 
    text-align: center; 
 
    color: #fff; 
 
} 
 

 
.h1-container p { 
 
    width: 81%; 
 
    background: tomato; 
 
    margin: auto; 
 
    border-radius: 10px; 
 
    text-align: center; 
 
    color: #fff; 
 
} 
 

 

 
/* Showcase */ 
 

 
#showcase { 
 
    background: url('http://i68.tinypic.com/2j5jho4.png') no-repeat; 
 
    background-size: contain; 
 
    width: 100%; 
 
    display: inline-block; 
 
    position: relative; 
 
    margin: 0 auto; 
 
} 
 

 
#showcase:after { 
 
    padding-top: 51.46%; 
 
    display: block; 
 
    content: ''; 
 
} 
 

 
#showcase .container { 
 
    position: absolute; 
 
    top: 0; 
 
    bottom: 0; 
 
    right: 0; 
 
    left: 0; 
 
} 
 

 
#showcase .h1-container h1 { 
 
    font-size: 55px; 
 
    margin-bottom: 10px; 
 
} 
 

 
#showcase p { 
 
    font-size: 20px; 
 
    padding: 5px; 
 
}
<body> 
 
    <section id="showcase"> 
 
\t \t \t <div class="container"> 
 
     <div class="showcase-branding"> 
 
      <h1>Title</h1> 
 
     </div> 
 
     <nav class="showcase-nav"> 
 
      <ul> 
 
      <li class="current"><a href="about.html">About</a></li> 
 
      <li><a href="contact.html">Contact</a></li> 
 
      <li class="social"><a href=""><i class="fa fa-linkedin-square"></i></a><a href=""><i class="fa fa-facebook-official"></i></a><a href=""><i class="fa fa-twitter"></i></a></li> 
 
      </ul> 
 
     </nav> 
 
     <div class="clear"></div> 
 
     <div class="h1-container"> 
 
      <h1>Text on line 1<br>text on line 2</h1> 
 
      <p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum <i class="fa fa-caret-right"></i></p> 
 
     </div> 
 
     </div> 
 
    </section> 
 
    </body>

另一种方法是给.containerposition: relative,然后给.h1-containerposition: absolutetop: 50%transform: translateY(-50%)

定位.container作为相对值,您可以绝对地将.h1-container.container相关联,而不是整个文档。

.container { 
    position: relative; 
} 

.h1-container { 
    position: absolute; 
    top: 50%; 
    transform: translateY(-50%); 
} 

这里是一个jsfiddle

以下是内联版本,由于所有内容的尺寸都不正确,但它至少居中于.h1-container

body { 
 
    font: 15px/1.5 Arial, Helvetica, sans-serif; 
 
    padding: 0; 
 
    margin: 0; 
 
    background-color: #f4f4f4; 
 
} 
 

 

 
/* Global */ 
 

 
.container { 
 
    width: 80%; 
 
    margin: auto; 
 
    overflow: hidden; 
 
    position: relative; 
 
} 
 

 
.clear { 
 
    clear: both; 
 
} 
 

 
ul { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
section h2 { 
 
    line-height: 1.0; 
 
} 
 

 
.button_1 { 
 
    height: 34px; 
 
    background: tomato; 
 
    border: 0; 
 
    padding-left: 20px; 
 
    padding-right: 20px; 
 
    color: #ffffff; 
 
    width: 200px; 
 
} 
 

 
.showcase-nav a { 
 
    color: #ffffff; 
 
    text-decoration: none; 
 
    text-transform: uppercase; 
 
    font-size: 16px; 
 
} 
 

 
.showcase-nav { 
 
    padding-top: 30px; 
 
    margin-top: 10px; 
 
    float: right; 
 
} 
 

 
.showcase-nav li.social i { 
 
    padding: 0 4px; 
 
} 
 

 
.showcase-nav li { 
 
    display: inline; 
 
    padding: 0 20px 0 20px; 
 
} 
 

 
.showcase-branding { 
 
    float: left; 
 
} 
 

 
.showcase-branding h1 { 
 
    font-size: 26px; 
 
    margin: 0; 
 
    padding-top: 30px; 
 
    color: #fff; 
 
} 
 

 
.showcase-branding .highlight { 
 
    color: #e8491d; 
 
    font-weight: bold; 
 
} 
 

 
.showcase-nav a:hover { 
 
    color: #cccccc; 
 
    font-weight: bold; 
 
} 
 

 
.h1-container { 
 
    width: 70%; 
 
    margin: auto; 
 
    position: absolute; 
 
    top: 50%; 
 
    transform: translateY(-50%); 
 
} 
 

 
.h1-container h1 { 
 
    text-transform: uppercase; 
 
    text-align: center; 
 
    color: #fff; 
 
} 
 

 
.h1-container p { 
 
    width: 81%; 
 
    background: tomato; 
 
    margin: auto; 
 
    border-radius: 10px; 
 
    text-align: center; 
 
    color: #fff; 
 
} 
 

 

 
/* Showcase */ 
 

 
#showcase { 
 
    background: url('http://i68.tinypic.com/2j5jho4.png') no-repeat; 
 
    background-size: contain; 
 
    width: 100%; 
 
    display: inline-block; 
 
    position: relative; 
 
    margin: 0 auto; 
 
} 
 

 
#showcase:after { 
 
    padding-top: 51.46%; 
 
    display: block; 
 
    content: ''; 
 
} 
 

 
#showcase .container { 
 
    position: absolute; 
 
    top: 0; 
 
    bottom: 0; 
 
    right: 0; 
 
    left: 0; 
 
} 
 

 
#showcase .h1-container h1 { 
 
    font-size: 55px; 
 
    margin-bottom: 10px; 
 
} 
 

 
#showcase p { 
 
    font-size: 20px; 
 
    padding: 5px; 
 
}
<body> 
 
    <section id="showcase"> 
 
\t \t \t <div class="container"> 
 
     <div class="showcase-branding"> 
 
      <h1>Title</h1> 
 
     </div> 
 
     <nav class="showcase-nav"> 
 
      <ul> 
 
      <li class="current"><a href="about.html">About</a></li> 
 
      <li><a href="contact.html">Contact</a></li> 
 
      <li class="social"><a href=""><i class="fa fa-linkedin-square"></i></a><a href=""><i class="fa fa-facebook-official"></i></a><a href=""><i class="fa fa-twitter"></i></a></li> 
 
      </ul> 
 
     </nav> 
 
     <div class="clear"></div> 
 
     <div class="h1-container"> 
 
      <h1>Text on line 1<br>text on line 2</h1> 
 
      <p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum <i class="fa fa-caret-right"></i></p> 
 
     </div> 
 
     </div> 
 
    </section> 
 
    </body>

+0

谢谢。不知何故,将'position:relative;'添加到'div.container'并不适合我。添加顶部:50%; transform:translateY(50%)'转换到'div.h1-container',虽然它并没有将文本组完全集中在中间。这可能与这里没有显示的其余代码有关。 –

+0

@ElAnonimo'translateY()'应该是'-50%',而不是'50%'。如果这不能解决你的问题,那可能是因为我上面的代码中有错误。除了'top:50%'和'transform:translateY(-50%)'之外,还必须将'position:absolute'赋予'.h1-container'。 – Anthony