私は次のレイアウトを持っています(Meteorを使用しています):
<template name="headerFooter">
<div class="container-fluid fill-height">
{{> header}}
{{> UI.contentBlock}}
{{> footer}}
</div>
</template>
<template name="home">
{{#headerFooter}}
<div class="row body-film">
<div id="newsfeed" class="col-sm-offset-7 col-sm-5 block-film">
{{#each stories}}
<div class="story">...</div>
{{/each}}
</div>
</div>
{{/headerFooter}}
</template>
そして、この(関連する)css
バックアップ:
html {
height: 100%;
}
body {
min-height: 100%
}
.fill-height {
height: 100%;
}
html
およびbody
要素は両方とも期待どおりに動作しています。任意のズームレベルまたはサイズで領域を塗りつぶします。
ただし、container-fluid
クラスが追加されたfill-height
は、ジョブを実行していません。内容をラップするだけで、底までは入りません。これは、body-film
とblock-film
をページに追加する責任があるため、これは問題です。これらは、全体を一定の色に統一するための単なる半透明の背景です。
以下は、コンテンツが高さいっぱいにならないようにページをすべて縮小したスクリーンショットです。
ここでは、body
要素が選択されています。ご覧のとおり、親をうまく埋めます。
しかし、container-fluid
はそうではありません。
fill-height
でheight
とmin-height
の両方を試しましたが、まったく同じように見えます。
あなたの助けに感謝します!
私はこれらの3つの要素でmin-height
とheight
のあらゆる組み合わせを試してみましたが、何も正しく動作しません。
コンテンツがビューポートに対して小さすぎる場合は3つすべてでheight
が機能しますが、コンテンツがビューポートに対して大きすぎる場合、コンテンツブロックはbody
から完全にオーバーフローします。短すぎます。
3つすべてのmin-height
が最も論理的な方法のように思えますが、コンテンツが小さすぎると中断します。この場合、body
要素はhtml
親を埋めるために伸縮しません。
どうしたの!!!!?????これは、新しい BlazeテンプレートエンジンMeteorが使用する のバグですか?
height: inherit
でfill-height
を試したところ、うまくいきませんでした。私は本当にロープの終わりにいます。これはとてもシンプルなはずです。
申し分なく、私はわずかな変化を起こした。これでless
:
.fill-height {
min-height: 100%;
height:auto !important;
height: 100%;
}
.body-film {
.fill-height();
}
.block-film {
.fill-height();
}
container-fluidは完全な高さになりましたが、まったく同じmixinを使用しているbody-film
とblock-film
ではありません!!
これはスクリーンショットで、row.body-film
を示しています。これはshouldフルハイトである必要があります。上のcontainer-fluid
が(Wordを使って、container-fluid
が体を埋めるために伸ばされます)。
行のhtml
宣言にfill-height
を手動で追加しても、何も変更されず、単にbody-film
mixinを介してそれを受け取っているかのように動作します。
これらのmin-height
の要求のすべてに一部の要素がまったく応答しないのはなぜですか?
追伸、私はChromeを使用していますが、ubuntuマシンではであるため、矛盾があるかどうかはわかりません。
次は動作しました:
html, body {
height: 100%;
}
.container-fluid {
height: 100%;
overflow-y: hidden; /* don't show content that exceeds my height */
}
.body-film {
height: 100%;
overflow-y: auto; // a value of 'scroll' will force scrollbars, even if they aren't necessary. This is cleaner.
background-color: fadeout(@studio-bar-color, @studio-body-film-trans-delta);
}
.block-film {
min-height: 100%;
overflow-y: hidden; /* don't show content that exceeds my height */
background-color: fadeout(@studio-bar-color, @studio-block-film-trans-delta);
}
overflow
属性は非常に重要であり、以前はあまり知らなかったものです。 scroll
値を体全体(上下に移動できるようにする必要があるもの)に与えることは答えでした。また、最も内側の要素(block-film
)にmin-height
を与えて、それ自体が引き伸ばされるようにしました。すべての親要素。
あなたはすべての組み合わせを試したと言っていましたが、どうですか?
html, body {
height: 100%;
}
.fill-height {
min-height: 100%;
height:auto !important; /* cross-browser */
height: 100%; /* cross-browser */
}
ボディにmin-height: 100%
を設定する際の問題は、子divのheight: 100%
には実際に参照する適切な親の高さがなく、機能しないことです。
編集:
このロジックはすべての子divに適用されます。したがって、あなたの場合、body-film divはcontainer-fluidの子です。 container-fluidのmin-height
は100%であり、定義済みのheight
(autoに設定されていない)であるため、body-filmに高さのパーセンテージを指定すると、参照する高さ。 MDN-CSS height および MDN-CSS min-height を読む価値があります。
つまり、高さまたは最小高さ100%のdivを使用する場合、そのすべての親要素は、htmlタグまでの定義済みの高さ100%を持つ必要があります。
あなたがする必要があるかもしれないことは、このようなものです:
html, body {
height: 100%;
}
.container-fluid {
height: 100%;
overflow-y: hidden; /* don't show content that exceeds my height */
}
.body-film {
min-height: 100%;
overflow-y: scroll;
}
あなたが正確に望むものに依存するので、これは決定的な答えではないかもしれませんが、うまくいけばこれはあなたを正しい軌道に乗せるでしょう。
これはhtmlのサイジングの問題に直接関係していませんが、最近、この種の「透明なフィルム」を実現するためのmuchより簡単な方法を発見しました。 box-shadow 。
この記事ではかなりうまく分解しています。 彼は他の方法も提供していますが、率直に言って、これは最も単純なようです。
<div class="example"></div>
.example {
position:relative;
width: 300px;
height: 313px;
box-shadow: 0px 313px rgba(255, 0, 92, 0.6) inset;
background: url(/img.png);
}