2016-10-28 8 views
0

display: flexコンテナ内のアイテムをalign-self: strechに設定して、同時に真ん中に垂直に整列させる方法が不思議です。伸縮したフレックスボックスアイテムを垂直に整列する

問題を紹介するFiddleを作成しました。要素は、「マイロゴテキスト」 はMy Logo Textは、あなたが問題を解決するためにline-height:50px;を使用することができ単線​​である

+0

あなたのロゴのテキストは、単一の行になりますか? – paolobasso

+0

はい。しかし、私はそれに固定高さ、パディングトップ、マージントップまたはラインハイトを設定したくありません。より良いソリューションが必要です。 – julian

+0

@wscourgeの答えを参照してください – paolobasso

答えて

3

追加:

.logo { 
    display: flex; 
    align-items: center; 
    height: 100% 
} 
+1

なぜhtmlを変更するのですか? –

+0

あなたはそうです、それは必要ではありません。ありがとう、私は私の答えを変更しています:)。 – wscourge

+0

ありがとうございます。 FlexのFlexがこのトリックをしました。 – julian

0

場合は、「マイバナー」と「右コンテナ」と同じ垂直レベルにする必要があります。

作業DEMO。あなたが詳細をお知りになりたい場合は

line-heightこれを読んで:https://css-tricks.com/almanac/properties/l/line-height/

.flex-container{ 
 
    color: #fff; 
 
    background: #3c3c3c; 
 
    height: 50px; 
 
    display: flex; 
 
    justify-content: space-between; 
 
    align-items: center; 
 
} 
 

 
.flex-item { 
 
    padding: 0 10px; 
 
} 
 
.logo{ 
 
    background: #f06; 
 
    align-self: stretch; 
 
    vertical-align: middle; 
 
    line-height:50px; 
 
} 
 
.title{ 
 
    flex-grow: 1; 
 
}
<div class="flex-container"> 
 
    <div class="flex-item logo">My Logo Text</div> 
 
    <div class="flex-item title">My Banner</div> 
 
    <div class="flex-item "><span>Right Container</span></div> 
 
</div>

EDITあなたは "固定高さを" したくない場合は、使用することができます

.logo { 
    display: flex; 
    align-items: center 
} 

彼の答えで@wscourgeと言いました。

0

私はheight:100%;align-self: stretchを交換し.logo自体にdisplay:flexを追加しました。これにより、100%の高さを維持しながら.logo自体の内容が集中します。

https://jsfiddle.net/fw5pttme/3/

0

私は、余分なdiv要素でこれを行うことができたとフレックス二度目の呼び出し。よりクリーンなソリューションがあるかもしれません。私はもう少しそれを周り遊んで、あなたに知らせる。

.flex-container { 
 
    color: #fff; 
 
    background: #3c3c3c; 
 
    height: 50px; 
 
    display: flex; 
 
    justify-content: space-between; 
 
    align-items: center; 
 
} 
 
.flex-item { 
 
    padding: 0 10px; 
 
} 
 
.logo-container { 
 
    display:flex; 
 
    background: #f06; 
 
    align-self: stretch; 
 
} 
 
.logo { 
 
    align-self: center; 
 
} 
 
.title { 
 
    flex-grow: 1; 
 
}
<div class="flex-container"> 
 
    <div class="flex-item logo-container"> 
 
    <div class="logo">My Logo Text</div> 
 
    </div> 
 
    <div class="flex-item title">My Banner</div> 
 
    <div class="flex-item "><span>Right Container</span> 
 
    </div> 
 
</div>

関連する問題