2017-05-17 8 views
2

フレックスボックスを覗き込んでいて、何か奇妙なことに気付きました。ネストされたフレックスコンテナが周囲の要素のアラインメントを変更しています

.centervertが垂直フレキシボックスがあるのでCHILD 1は全体.child要素の位置がずれ、フレキシボックス内にないにもかかわらず:あなたの場合は

#cont { 
 
    background: blue; 
 
} 
 

 
.centervert { 
 
    display: flex; 
 
    flex-direction: column; 
 
    justify-content: center; 
 
    background: gray; 
 
    height: 100%; 
 
} 
 

 
.child { 
 
    display: inline-block; 
 
    width: 100px; 
 
    height: 100px; 
 
    background: green; 
 
}
<div id="cont"> 
 

 
    <div class="child"> 
 
    CHILD 1 
 
    </div> 
 

 
    <div class="child "> 
 
    <div class="centervert"> 
 
     CHILD 2 
 
    </div> 
 
    </div> 
 
</div>

https://jsfiddle.net/d3ymxhe8/2/をコメントdisplay: flexをコメントアウトすると、CHILD要素が期待どおりに並べて表示されます。しかし、フレックスディスプレイでは、CHILD1は.centervertの内容に合わせて下にシフトされます。

何がありますか?

+0

それは理由フレックスとして、それを表示するのではありません。これは、最初のdivがシフトダウンする中心として正当化コンテンツを指定したためです。コメントしてチェックしてください。 –

+0

私はCHILD2のコンテンツを垂直方向に中央に配置したい –

答えて

6

ディスプレイを子2のフレックスに設定し、テキストの中央に垂直に配置すると、子要素1は、デフォルトのvertical-alignプロパティに従って調整されます。これは、インライン要素の場合はベースラインです。 child1(およびchild2)のvertical alignmentプロパティをtopまたはmidのようなものに設定することができます。これにより、ギャップが削除されます。

#cont { 
 
    background: blue; 
 
} 
 
.centervert { 
 
    display: flex; 
 
    flex-direction: column; 
 
    justify-content: center; 
 
    background: gray; 
 
    height: 100%; 
 
} 
 
.child { 
 
    display: inline-block; 
 
    width: 100px; 
 
    height: 100px; 
 
    background: green; 
 
    vertical-align:middle; 
 
}
<div id="cont"> 
 
    <div class="child"> 
 
    CHILD 1 
 
    </div> 
 
    <div class="child "> 
 
    <div class="centervert"> 
 
     CHILD 2 
 
    </div> 
 
    </div> 
 
</div>

+0

*ディスプレイを子供2のフレックスに設定し、テキストの中心を垂直にすると、デフォルトのvertical-alignプロパティに従って子1が調整されました... *それを説明する?フレックスとセンタリングが呼び出される前に、すでに「ベースライン」値の対象となっていました。前もって感謝します。 –

+0

@Michael_B子供2がフレックスに設定され、justify-content:centerを中心にテキストが中央に配置される前に、そのテキストはdiv1の最上部にあり、子供1の場合と同じように空白なしで並べられます両方のベースラインがすでに整列されています。 – j08691

+0

ああ、素晴らしい。キーは常に実際のテキストを見ることです。私はインラインレベルのボックスに焦点を当てていました。 'justify-content'で' flex-start'、 'center'、' flex-end'を使って遊んだ場合、両方のボックスのテキストは常に 'baseline'に整列することがわかります。私を啓発してくれてありがとう。 –

関連する問題