左div
と右の2列のレイアウトがありますdiv
。
右側div
には灰色background-color
があり、ユーザーのブラウザウィンドウの高さに応じて垂直方向に拡大する必要があります。現在、background-color
その最後のコンテンツで終了していdiv
ます。
私が試したheight:100%
、min-height:100%;
など、
height
パーセント値を持つプロパティ:stackoverflow.com/a/31728799/3597276
左div
と右の2列のレイアウトがありますdiv
。
右側div
には灰色background-color
があり、ユーザーのブラウザウィンドウの高さに応じて垂直方向に拡大する必要があります。現在、background-color
その最後のコンテンツで終了していdiv
ます。
私が試したheight:100%
、min-height:100%;
など、
height
パーセント値を持つプロパティ:stackoverflow.com/a/31728799/3597276
回答:
次の2つのCSS 3測定単位があります。
上記のリンクされたW3 Candidate Recommendationから:
ビューポートのパーセンテージの長さは、最初の包含ブロックのサイズを基準にしています。最初の包含ブロックの高さまたは幅が変更されると、それらはそれに応じてスケーリングされます。
これらの単位は、vh
(ビューポートの高さ)、vw
(ビューポートの幅)、vmin
(ビューポートの最小長)、vmax
(ビューポートの最大長)です。
この質問では、vh
:1vh
がビューポートの高さの1%に等しいことを利用できます。つまり100vh
、要素がDOMツリーのどこに配置されているかに関係なく、はブラウザウィンドウの高さに等しくなります。
<div></div>
div {
height: 100vh;
}
これが文字通り必要なすべてです。ここでJSFiddle例の使用でこれを。
これは現在、Opera Miniを除くすべての最新の主要ブラウザーでサポートされています。詳細については、「使用できます...」をご覧ください。
手近な質問の場合は、左と右の分周器を備え、ここにあるJSFiddle例の両方を含む2列のレイアウトを示すvh
としますvw
。
100vh
違うの100%
ですか?このレイアウトを例にとります:
<body style="height:100%">
<div style="height:200px">
<p style="height:100%; display:block;">Hello, world!</p>
</div>
</body>
p
ここでのタグは高さ100%に設定されていますが、含まれるdiv
高さは200ピクセルであるため、200ピクセルの100%は高さの100%ではなく 200ピクセルになりbody
ます。100vh
代わりに使用すると、p
タグは高さにbody
関係なく100%の高さになりdiv
ます。この付随するJSFiddleを見て、違いを簡単に確認してください!
min-height:100vh
これを回避するようです。
あなたはの高さを設定したい場合<div>
、または任意の要素を、あなたはの高さに設定する必要があり<body>
と<html>
あまりにも100%にします。次に、要素の高さを100%に設定できます。
次に例を示します。
body, html {
height: 100%;
}
#right {
height: 100%;
}
html { height: 100%*number of blocks; }
、。body { height: 100%;}
#div { height: 100%/number of blocks; }
あなたは3つのセクションを持っているのであれば、それは次のようになりますhtml { height: 300%; } body { height: 100%; } #div { height: 33.3% }
要素を完全に配置できる場合は、
position: absolute;
top: 0;
bottom: 0;
それを行うでしょう。
position:relative
、その高さがビューポートの100%でない場合、これは機能しません。それは、次の相対的または絶対的な祖先に上と下を調整します。
CSSでビューポートユニットを使用できます。
HTML:
<div id="my-div">Hello World!</div>
CSS:
#my-div {
height: 100vh; /* vh stands for view-port height, 1vh is 1% of screen height */
}
* { box-sizing: border-box; }
それが起こらないようにするために使うべきです。
vh
この場合、ビューポートの高さの1%を基準にして使用できます...
つまり、高さを隠したい場合は、単にを使用します100vh
。
私がここに描いた下の画像を見てください:
以下のように私が作成したスニペットを試してください。
.left {
height: 100vh;
width: 50%;
background-color: grey;
float: left;
}
.right {
height: 100vh;
width: 50%;
background-color: red;
float: right;
}
<div class="left"></div>
<div class="right"></div>
paddings/margins
他のすべてのソリューション(トップ投票のソリューションを含む)はvh
、フレックスモデルソリューションと比較すると、最適ではありません。
CSSフレックスモデルの登場により、100%の高さの問題の解決は非常に簡単になりheight: 100%; display: flex
、親flex: 1
要素と子要素で使用することができます。コンテナ内の利用可能なすべてのスペースが自動的に使用されます。
マークアップとCSSがいかに単純であるかに注意してください。テーブルハックなどはありません。
フレックスモデルは、すべての主要なブラウザとIE11 +でサポートされています。
html, body {
height: 100%;
}
body {
display: flex;
}
.left, .right {
flex: 1;
}
.left {
background: orange;
}
.right {
background: cyan;
}
<div class="left">left</div>
<div class="right">right</div>
フレックスモデルの詳細については、こちらをご覧ください。
overflow-y: auto;
「元の身長を超える容器」を避けられる場合があります。
次のような重要な詳細については触れません。
これが1つの可能性です。
body,
div {
margin: 0;
border: 0 none;
padding: 0;
}
html,
body,
#wrapper,
#left,
#right {
height: 100%;
min-height: 100%;
}
#wrapper {
margin: 0 auto;
overflow: hidden;
width: 960px; // width optional
}
#left {
background: yellow;
float: left;
width: 360px; // width optional but recommended
}
#right {
background: grey;
margin-left: 360px; // must agree with previous width
}
<html>
<head>
<title>Example</title>
</head>
<body>
<div id="wrapper">
<div id="left">
Left
</div>
<div id="right"></div>
</div>
</body>
</html>
固定する必要があるカラムと液体であるカラムに応じて、これには多くのバリエーションがあります。絶対配置でもこれを行うことができますが、代わりにフロートを使用すると、一般的に(特にブラウザ間の観点から)より良い結果が得られます。
これは私のために働いたものです:
<div style="position:fixed; top:0px; left:0px; bottom:0px; right:0px; background: red;"> </div>
のposition:fixed
代わりにを使用するとposition:absolute
、分割を下にスクロールしても画面の最後まで拡大されます。
これが高さの修正です。
あなたのCSSで:
#your-object: height: 100vh;
をサポートしていないブラウザのvh-units
場合は、modernizrを使用してください。
このスクリプトを追加します(の検出を追加しますvh-units
)
// https://github.com/Modernizr/Modernizr/issues/572
// Similar to http://jsfiddle.net/FWeinb/etnYC/
Modernizr.addTest('cssvhunit', function() {
var bool;
Modernizr.testStyles("#modernizr { height: 50vh; }", function(elem, rule) {
var height = parseInt(window.innerHeight/2,10),
compStyle = parseInt((window.getComputedStyle ?
getComputedStyle(elem, null) :
elem.currentStyle)["height"],10);
bool= !!(compStyle == height);
});
return bool;
});
最後に#your-object
、ブラウザが以下をサポートしていない場合は、この関数を使用してビューポートの高さを追加しますvh-units
。
$(function() {
if (!Modernizr.cssvhunit) {
var windowH = $(window).height();
$('#your-object').css({'height':($(window).height())+'px'});
}
});
100%
幅と高さの動作が異なります。
を指定するとwidth: 100%
、「親要素またはウィンドウの幅から利用可能な幅の100%を使用する」ことを意味します。
を指定する場合はheight: 100%
、「親要素から利用可能な高さの100%を使用する」ことだけを意味します。つまり、最上位要素で高さを指定しない場合、すべての子の0
高さは親の高さになるか、最上位の要素にmin-height
ウィンドウの高さを設定する必要があるのはそのためです。
私は常にボディの高さを100vhに指定しています。これにより、配置と計算が簡単になります。
body {
min-height: 100vh;
}
aの高さ<div>
を100%に設定するには、いくつかの方法があります。
方法(A):
html,
body {
height: 100%;
min-height: 100%;
}
.div-left {
height: 100%;
width: 50%;
background: green;
}
.div-right {
height: 100%;
width: 50%;
background: gray;
}
<div class="div-left"></div>
<div class="div-right"></div>
vhを使用する方法(B):
html,
body {
height: 100%;
min-height: 100%;
}
.div-left {
height: 100vh;
width: 50%;
background: green;
float: left;
}
.div-right {
height: 100vh;
width: 50%;
background: gray;
float: right;
}
<div class="div-left"></div>
<div class="div-right"></div>
方法(c)フレックスボックスを使用:
html,
body {
height: 100%;
min-height: 100%;
}
.wrapper {
height: 100%;
min-height: 100%;
display: flex;
}
.div-left {
width: 50%;
background: green;
}
.div-right {
width: 50%;
background: gray;
}
<div class="wrapper">
<div class="div-left"></div>
<div class="div-right"></div>
</div>
これは私のために働きました:
html, body {
height: 100%; /* IMPORTANT!!! Stretches viewport to 100% */
}
#wrapper {
min-height: 100%; /* Minimum height for a modern browser */
height:auto !important; /* Important rule for a modern browser */
height:100%; /* Minimum height for Internet Explorer */
overflow: hidden !important; /* Firefox scroll-bar */
}
このページから取得。
&に設定height:100%
してみてくださいhtml
body
html,
body {
height: 100%;
}
また、2 divの高さを同じにするか、親要素のdisplay:flex
プロパティを設定する場合。
ここにすべての答えがあっても、本当に問題を解決できるものがないことに驚きました。100vh
height
/ を使用したmin-height
場合、コンテンツがページより長いとレイアウトが壊れました。代わりに100%
height
/ を使用した場合min-height
場合、コンテンツがページの高さよりも低いとレイアウトが壊れました。
私が見つけた解決策は両方のケースを解決しましたが、上位2つの回答を組み合わせることでした。
html, body, #mydiv {
height: 100%;
min-height: 100vh;
}
デフォルトでは、ブロック要素は親の全幅を消費します。
これは、垂直に積み重ねるという設計要件を満たす方法です。
ブロックのフォーマット設定のコンテキストでは、ボックスは、包含ブロックの上部から開始して、垂直方向に次々とレイアウトされます。
ただし、この動作は高さにまで及びません。
デフォルトでは、ほとんどの要素はコンテンツの高さ(height: auto
)です。
幅とは異なり、余分なスペースが必要な場合は高さを指定する必要があります。
したがって、次の2つの点に注意してください。
.Contact {
display: flex; /* full width by default */
min-height: 100vh; /* use full height of viewport, at a minimum */
}
.left {
flex: 0 0 60%;
background-color: tomato;
}
.right {
flex: 1;
background-color: pink;
}
body { margin: 0; } /* remove default margins */
<div class="Contact">
<section class="left">
<div class="">
<h1>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</h1>
</div>
</section>
<section class="right">
<img />
</section>
</div>
これは、以前の回答とまったく同じではないものですが、一部の人にとっては役立ちます。
body {
display: flex;
flex-direction: column;
height: 100vh;
margin: 0px;
}
#one {
background-color: red;
}
#two {
margin-top: 0px;
background-color: black;
color: white;
overflow-y: scroll;
}
Flexboxは、この種の問題に最適です。Flexboxは主にコンテンツを水平方向にレイアウトすることで知られていますが、実際には垂直レイアウトの問題でも同様に機能します。必要なのは、垂直セクションをフレックスコンテナーでラップし、拡張するセクションを選択することだけです。コンテナ内の利用可能なすべてのスペースが自動的に使用されます。
オプションの1つはCSSテーブルを使用することです。優れたブラウザサポートがあり、Internet Explorer 8でも動作します。
html, body {
height: 100%;
margin: 0;
}
.container {
display: table;
width: 100%;
height: 100%;
}
.left, .right {
display: table-cell;
width: 50%;
}
.right {
background: grey;
}
<div class="container">
<div class="left"></div>
<div class="right"></div>
</div>
あなたが使用することができますdisplay: flex
し、height: 100vh
html, body {
height: 100%;
margin: 0px;
}
body {
display: flex;
}
.left, .right {
flex: 1;
}
.left {
background: orange;
}
.right {
background: cyan;
}
<div class="left">left</div>
<div class="right">right</div>
2つのことを行う必要があります。1つは、既に行った高さを100%に設定することです。2番目は絶対位置に設定されます。これでうまくいくはずです。
html,
body {
height: 100%;
min-height: 100%;
position: absolute;
}
vh
代わりに使用してください。
vh
モバイルデバイスでレスポンシブデザインを使用する予定がある場合は使用しないでください。
実際、私にとって最も効果的なのは、vh
プロパティを使用することでした。
私のReactアプリケーションでは、サイズを変更した場合でも、divをページの高さに一致させる必要がありました。、を試してみましたがheight: 100%;
、overflow-y: auto;
設定height:(your percent)vh;
どおりに機能する場合、どれも機能しませんでした。
注:パディング、丸い角などを使用している場合は、それらの値をvh
プロパティのパーセントから差し引いてください。そうしないと、高さが増えてスクロールバーが表示されます。これが私のサンプルです:
.frame {
background-color: rgb(33, 2, 211);
height: 96vh;
padding: 1% 3% 2% 3%;
border: 1px solid rgb(212, 248, 203);
border-radius: 10px;
display: grid;
grid-gap: 5px;
grid-template-columns: repeat(6, 1fr);
grid-template-rows: 50px 100px minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr);
}
box-sizing: border-box;
これを克服できると思います。つまり、要素のサイズ(幅と高さ)を計算するときに境界線のサイズも考慮されるということです。
一度お試しください...
*{
padding:0;
margin:0;
}
.parent_div{
overflow:hidden;
clear:both;
color:#fff;
text-align:center;
}
.left_div {
float: left;
height: 100vh;
width: 50%;
background-color: blue;
}
.right_div {
float: right;
height: 100vh;
width: 50%;
background-color: green;
}
<div class=" parent_div">
<div class="left_div">Left</div>
<div class="right_div">Right</div>
</div>
position: absolute;
とjQuery を使用する場合は、
$("#mydiv").css("height", $(document).height() + "px");
// vw: hundredths of the viewport width.
// vh: hundredths of the viewport height.
// vmin: hundredths of whichever is smaller, the viewport width or height.
// vmax: hundredths of whichever is larger, the viewport width or height.
<div class="wrapper">
<div class="left">
Left
</div>
<div class="right">
Right
</div>
</div>
<style>
.wrapper {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
height: 100vh; // Height window (vh)
}
.wrapper .left{
widht: 80%; // Width optional, but recommended
}
.wrapper .right{
widht: 20%; // Width optional, but recommended
background-color: #dd1f26;
}
<style>
widht
終わり近く)