2017-06-13 79 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