2017-06-13 15 views
1

セクションは、要素が側面にフローティングされたナビゲーショングループ、中央テキストグループ、および背景イメージで構成されます。セクションの高さは、背景画像に合わせて手動で設定されていませんでした。 テキストグループを縦方向にセンタリングするにはどうすればよいですか?それはdiv.h1-containerです。コンテナ内に多数のdivの1つを中央に配置します。

Plunkr:このについて移動する2つの簡単な方法があり、現在の状況を考えると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は、水平方向、垂直私は2つの記事は私の問題ではなく、垂直、水平方向よりも内側のテキスト・グループを中心とした –

+0

重複していることはないと思うよりもずっと簡単です。 –

+0

@ElAnonimoもしあなたが '.h1-container'の中にすべてを垂直にセンタリングしても構わないのであれば、実際には別の方法かもしれません。私の答えを調整します – Anthony

答えて

2

一方向は、.h1-containerdisplay: flex,flex-direction: columnおよびjustify-content: centerとなる。

ここにはjsfiddleがあります。

.h1-containerに配置された各要素と新しい要素はすべて、垂直方向に積み重ねられ、.h1-containerに対して垂直に中央に配置されるため、子要素が中央揃えされていないかのように表示されます.h1-containerが正しく中央揃えされていない場合

また、justify-contentは、フレックスボックスの方向に対して子要素を常に配置することを覚えておいてください。したがって、フレックスボックス方向が明示的に設定されておらず、デフォルト値がflex-direction: rowであるため、justify-contentは子を水平に配置します。 align-itemsは常にフレックスボックスのdirectionプロパティと反対になります。

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を指定すると、文書全体ではなく、.containerに対して絶対的に.h1-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'に追加しても私にとってはうまくいきませんでした。 'top:50%;を追加する。 transform:translateY(50%) 'を' div.h1-container'に変換しました。これはおそらくここに示されていないコードの残りの部分と関係しています。 –

+0

@ElAnonimo 'translateY()'は '50%'ではなく '-50%'でなければなりません。それがあなたの問題を解決しない場合は、上のコードでエラーが発生している可能性があります。 'top:50%'と 'transform:translateY(-50%)'に加えて '.h1-container'に' position:absolute'を与えなければなりませんでした。 – Anthony

関連する問題