2016-04-14 14 views
0

すべての垂直スペースを塗りつぶすフレームでサイトを作成しようとしています。オーバーフローするコンテンツがスクロール可能になります。css親divを100%の高さで子をスクロール可能にする

htmlとbody heightは100vhに設定され、すべてのボックスの親は100%に設定されています。私は別の方法を発見していないし、すべての単一の親は100vhであり、最終的にサイトがあふれています。

私は間違っていますか? 私はちょうど行方不明午前のように感じる "位置:" ...

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <title>Pastebook</title> 
 
    <style type="text/css"> 
 
    html, 
 
    body { 
 
     height: 100vh; 
 
    } 
 
    /*central panel*/ 
 
    .central { 
 
     position: absolute; 
 
     width: 100%; 
 
     margin: 0 auto; 
 
     height: 100%; 
 
     border: 3px solid blue; 
 
    } 
 
    /*central middle panel*/ 
 
    .middle { 
 
     margin: 0 auto; 
 
     max-width: 970px; 
 
     height: 100%; 
 
     border: 3px solid yellow; 
 
    } 
 
    /*content panel*/ 
 
    .contentPanel { 
 
     margin: 0 auto; 
 
     padding-top: 0px; 
 
     height: 100%; 
 
     border: 3px solid lightgreen; 
 
    } 
 
    /*Clipboard Box*/ 
 
    .clipboard { 
 
     border-radius: 5px; 
 
     border: 5px solid gray; 
 
     font-size: 100%; 
 
     overflow: auto; 
 
     padding: 5px; 
 
     height: 100% 
 
    } 
 
    /*Example content*/ 
 
    .content { 
 
     height: 100px; 
 
     background: lightgray; 
 
     margin: 5px; 
 
    } 
 
    </style> 
 

 
</head> 
 

 
<body> 
 
    <div class="central"> 
 
    <div class="content"> 
 
     central 
 
    </div> 
 
    <div class="middle"> 
 
     <div class="content"> 
 
     middle 
 
     </div> 
 
     <div class="contentPanel"> 
 
     <div class="content"> 
 
      content 
 
     </div> 
 
     <div class="clipboard"> 
 
      <div style="height:400px; background: lightgray; margin:5px;"> 
 
      clipboard 
 
      </div> 
 
      <div style="height:400px; background: lightgray; margin:5px;"> 
 
      clipboard 
 
      </div> 
 
      <div style="height:400px; background: lightgray; margin:5px;"> 
 
      clipboard 
 
      </div> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</body> 
 

 
</html>

+0

ないあなたが何をしようとして確認してみてください。しかし、あなたの解決策から高さ:100vhまでのすべての要素に 'box-sizing:border-box'を打つことができます。それは、彼らのコンテンツだけではなく、彼らが食べるマージンではなく、「100vh」となるだろう。 – abluejelly

+0

要約:クリップボードを除くすべての要素は正確にすべての垂直スペースを占有する必要があります。オーバーフローはクリップボードで管理されます(実際に発生する唯一の場所)。 –

+0

'flex-direction:column'と' flex-grow:1'で '100vh'' flexboxを使いたい、' 100% 'ではなく' 33.3% 'にdivの高さを設定したいと思っています。クリップボードをその外側に置くことができます。しかし、私は*なぜあなたがこれをしたいのか尋ねなければならないのですか?すべてのビューポートがすべてのコンテンツを格納するのに十分な大きさのvhを持っているわけではありません。自然なスクロールは、理由によって行われる方法で行われます。同様に、これは作っているUXの悪夢のように聞こえます。私が本当に助けてくれるのをためらってしまいます。 – abluejelly

答えて

0

属性私はいくつかの変更を試してみましたが、これは何かがdoesnの場合

html, 
body { 
    height: 100vh; 
    padding:0; 
    margin:0; 
    overflow:hidden; 
} 
/*central panel*/ 
.central { 
    position: absolute; 
    width: 100%; 
    margin: 0 auto; 
    height: 100vh; 
    border: 3px solid blue; 
    box-sizing: border-box; 
    overflow:scroll; 
} 
/*central middle panel*/ 
.middle { 
    margin: 0 auto; 
    max-width: 970px; 
    border: 3px solid yellow; 
    box-sizing: border-box; 
} 
/*content panel*/ 
.contentPanel { 
    margin: 0 auto; 
    padding-top: 0px; 
    border: 3px solid lightgreen; 
    box-sizing: border-box; 
} 
/*Clipboard Box*/ 
.clipboard { 
    border-radius: 5px; 
    border: 3px solid gray; 
    box-sizing: border-box;  
    font-size: 100%; 
    overflow: scroll; 
    padding: 5px; 
} 
/*Example content*/ 
.content { 
    background: lightgray; 
    margin: 5px; 
} 

が私に教えて動作します私が何か間違ったことがあったかどうかを確認してください:) 編集:もう少し調べてみました。

  • (私は理由もなく好きではありません)、フレックスボックスに(さらに悪いソリューションであるだけでなく、動作します)
  • javascriptの
  • CSS計算値()関数(私は一番下にこの1を含む) を使用
    • このUがCALC内部 他の要素の高さを使用することができ、CSSアドオン()関数で良好に動作する

html, 
 
body { 
 
    height: 100vh; 
 
    padding: 0; 
 
    margin: 0; 
 
    overflow: hidden; 
 
} 
 
/*central panel*/ 
 

 
.central { 
 
    width: 100%; 
 
    margin: 0 auto; 
 
    height: 100vh; 
 
    border: 3px solid blue; 
 
    box-sizing: border-box; 
 
    overflow: hidden; 
 
} 
 
/*central middle panel*/ 
 

 
.middle { 
 
    margin: 0 auto; 
 
    max-width: 300px; 
 
    border: 3px solid yellow; 
 
    box-sizing: border-box; 
 
    height: calc(100vh - 55px); 
 
    overflow: hidden; 
 
} 
 
/*content panel*/ 
 

 
.contentPanel { 
 
    margin: 0 auto; 
 
    padding-top: 0px; 
 
    border: 3px solid lightgreen; 
 
    box-sizing: border-box; 
 
    height: calc(100vh - 110px); 
 
    overflow: hidden; 
 
} 
 
/*Clipboard Box*/ 
 

 
.clipboard { 
 
    border-radius: 5px; 
 
    border: 3px solid gray; 
 
    box-sizing: border-box; 
 
    overflow: scroll; 
 
    padding: 5px; 
 
    height: calc(100vh - 165px); 
 
} 
 
/*Example content*/ 
 

 
.content { 
 
    background: lightgray; 
 
    margin: 5px; 
 
    height: 40px; 
 
}
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <title>Pastebook</title> 
 
</head> 
 

 
<body> 
 
    <div class="central"> 
 
    <div class="content"> 
 
     central 
 
    </div> 
 
    <div class="middle"> 
 
     <div class="content"> 
 
     middle 
 
     </div> 
 
     <div class="contentPanel"> 
 
     <div class="content"> 
 
      content 
 
     </div> 
 
     <div class="clipboard"> 
 
      <div style="height:400px; background: lightgray; margin:5px;"> 
 
      clipboard 
 
      </div> 
 
      <div style="height:400px; background: lightgray; margin:5px;"> 
 
      clipboard 
 
      </div> 
 
      <div style="height:400px; background: lightgray; margin:5px;"> 
 
      clipboard 
 
      </div> 
 
     </div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</body> 
 

 
</html>

+0

ありがとう! calcは正確に私が必要と知っていたことはまったく分かりませんでした。それは偉大なものです –

+0

解決策として私のポストをマークしてください、それは私が必要としている以上のものに達するのを助けるでしょう☺️ –

0

Reeeeally

.central 
{ 
    overflow-y: auto; 
} 
+0

html。 body、central、middle、contentPanelはオーバーフロー時にスクロール可能な.clipboardを使用して垂直空間全体を埋める必要があります。 –

関連する問題