2017-08-27 11 views
3

私はこの仕事をしようと一日を費やしました。 私は1つのフレックスボックスを使用することができますが、フレックスボックスに別のフレックスボックスが含まれている場合は面倒です。私はこの質問からヒントを追跡しようとした別のフレックスボックス内でのFlexboxのブラウザサポート

Flexbox inside another flexbox?

それは少しを助けたが、私は残念ながらまだそこにいませんよ。

さらに混乱させる原因は、SafariとChromeが全く同じページを表示しているように見えることです。これは、私が間違っていることを理解することをさらに困難にします。

私がしようとしているのは、外側のフレックスボックスにヘッダーと内容が付いていることです。このアウターフレックスボックスは、内容の中に別のフレックスボックスをもうけ、ヘッダーと内容を含んでいなければならない。

内側フレックスボックスの内容物の内側にあるテーブルは、内側フレックスボックスに属していないようです。

html { 
 
    height: 100%; 
 
} 
 

 
body { 
 
    margin: 0; 
 
\t min-height: 100%; 
 
\t height: 100%; 
 
\t overflow: hidden; 
 
} 
 

 
.outerFlexBox { 
 
    height:100%; 
 
    display: flex; 
 
    display: -webkit-flex; /* for Safari */ 
 
    flex-direction: column; 
 
    overflow: hidden; 
 
    -webkit-flex-direction: column; /* for Safari */ 
 
    background-color: green; 
 
    border: black dotted; 
 
} 
 

 
.outerHeader { 
 
    border: blue dotted; 
 
} 
 

 
.outerContent { 
 
    flex: 1; 
 
    border: red dotted; 
 
    overflow: hidden; 
 
} 
 

 
.innerFlexBox { 
 
    height:100%; 
 
    display: flex; 
 
    display: -webkit-flex; /* for Safari */ 
 
    flex-direction: column; 
 
    overflow: hidden; 
 
    -webkit-flex-direction: column; /* for Safari */ 
 
    background-color: yellow; 
 
    border: black solid; 
 
} 
 

 
.innerHeader { 
 
    border: blue solid; 
 
} 
 

 
.innerContent { 
 
\t flex: 1; 
 
    border: red solid; 
 
    overflow: hidden; 
 
} 
 

 
.myTable { 
 
\t flex: 1; 
 
\t height: 100%; 
 
\t min-height: 100%; 
 
\t width: 100%; 
 
\t overflow-y: auto; 
 
\t border: grey solid; 
 
}
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <link rel="stylesheet" href="index.css"> 
 
</head> 
 
<body> 
 
\t <div class="container-fluid outerFlexBox"> 
 
    <div class="outerHeader"> 
 
     <h4>Some Outer Header</h4> 
 
    </div> 
 
    <div class="outerContent"> 
 
\t \t <p>Some outer content</p> 
 
\t \t <div class="innerFlexBox"> 
 
\t \t  <div class="innerHeader"> 
 
\t \t  \t <p>Some Inner Header</p> 
 
\t \t  </div> 
 
\t \t </div> 
 
\t \t <div class="innerContent"> 
 
\t \t \t <p>Some inner content</p> 
 
\t \t \t <table class="myTable"> 
 
\t \t \t \t <thead> 
 
\t \t \t \t \t <tr><th>Some Header Column</th></tr> 
 
\t \t \t \t </thead> 
 
\t \t \t \t <tbody> 
 
\t \t \t \t \t <tr><td>Some row</td></tr> 
 
\t \t \t \t \t <tr><td>Some row</td></tr> 
 
\t \t \t \t \t <tr><td>Some row</td></tr> 
 
\t \t \t \t \t <tr><td>Some row</td></tr> 
 
\t \t \t \t \t <tr><td>Some row</td></tr> 
 
\t \t \t \t \t <tr><td>Some row</td></tr> 
 
\t \t \t \t </tbody> 
 
\t \t \t </table> 
 
\t \t </div> 
 
    </div> 
 
</div> 
 
</body> 
 
</html>

そして、これは、この同じページにはクロム(左)とサファリ(右)のように見える方法です。 enter image description here

+2

をスニペットクローム/ Firefoxの/ IE11 /エッジ上の成功でこれをテストしています以前はSafariのネストされたフレックスボックス、特に 'flex-direction:colu mn '。これはチェックアウトする価値があります:https://github.com/philipwalton/flexbugs –

答えて

2

Flexboxを使用してそのプロパティを最大限に活用すると、クロスブラウザソリューションを利用できます。

ここで主要な部分は、すべてheight:100%;を削除し、Fleboxの成長特性、flex-growを使用することです。

さらに、私はouterContentinnerContentフレックスコンテナの両方を作成しました。したがって、Fleboxは残っているスペースを完全に埋めることができます。

注、私は

Fiddle demo

スタックは、私がかましてきた

html, body { 
 
    margin: 0; 
 
} 
 

 
body { 
 
    display: flex;    /* IE11 fix */ 
 
} 
 

 
.outerFlexBox { 
 
    flex: 1;     /* IE11 fix */ 
 
    min-height: 100vh; 
 

 
    display: -webkit-flex; 
 
    /* for Safari */ 
 
    -webkit-flex-direction: column; 
 
    /* for Safari */ 
 
    display: flex; 
 
    flex-direction: column; 
 
    background-color: green; 
 
    border: black dotted; 
 
} 
 

 
.outerHeader { 
 
    border: blue dotted; 
 
} 
 

 
.outerContent { 
 
    flex-grow: 1; 
 
    border: red dotted; 
 
    display: -webkit-flex; 
 
    /* for Safari */ 
 
    -webkit-flex-direction: column; 
 
    /* for Safari */ 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 

 
.innerFlexBox { 
 
    flex-grow: 1; 
 

 
    display: -webkit-flex; 
 
    /* for Safari */ 
 
    -webkit-flex-direction: column; 
 
    /* for Safari */ 
 
    display: flex; 
 
    flex-direction: column; 
 
    background-color: yellow; 
 
    border: black solid; 
 
} 
 

 
.innerHeader { 
 
    border: blue solid; 
 
} 
 

 
.innerContent { 
 
    flex-grow: 1; 
 
    border: red solid; 
 
    display: -webkit-flex; 
 
    /* for Safari */ 
 
    -webkit-flex-direction: column; 
 
    /* for Safari */ 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 

 
.myTable { 
 
    flex-grow: 1; 
 
    width: 100%; 
 
    border: grey solid; 
 
}
<div class="container-fluid outerFlexBox"> 
 
    <div class="outerHeader"> 
 
    <h4>Some Outer Header</h4> 
 
    </div> 
 
    <div class="outerContent"> 
 
    <p>Some outer content</p> 
 
    <div class="innerFlexBox"> 
 
     <div class="innerHeader"> 
 
     <p>Some Inner Header</p> 
 
     </div> 
 
     <div class="innerContent"> 
 
     <p>Some inner content</p> 
 
     <table class="myTable"> 
 
      <thead> 
 
      <tr> 
 
       <th>Some Header Column</th> 
 
      </tr> 
 
      </thead> 
 
      <tbody> 
 
      <tr> 
 
       <td>Some row</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Some row</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Some row</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Some row</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Some row</td> 
 
      </tr> 
 
      <tr> 
 
       <td>Some row</td> 
 
      </tr> 
 
      </tbody> 
 
     </table> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

+0

SafariとChromeの両方が同じように見えるようになりました。ありがとう、LGSon!なぜinnerFlexBoxにinnerContentがまだ含まれていないのか、少し混乱しています。 innerFlexBoxにはinnerHeaderのみが含まれているようです。ボーダーと背景色を見ると、innerFlexBoxの黄色の背景色と黒色のしっかりした境界線がinnerHeaderの周りにのみあります。 innerContentは、outerFlexBoxからの緑の背景色を持っています。また、内部コンテンツの赤い立体ボーダは、外部コンテンツコンテナの内部にあるようです。これは理にかなっていますか? – Hans

+0

@Hans 'innerFlexBox'と' innerContent'は兄弟ですから、 'innerFlexBox'は' innerContent'を含むことはできませんが、 'innerHeader'は' innerFlexBox'の子です。 – LGSon

+0

@Hansそして 'innerContent'と' innerFleBox'は兄弟であるので、両方とも 'outerContent'のフレックスアイテム(子)です – LGSon

関連する問題