2016-07-10 11 views
3

注:この動作は現在、Safariでのみ、特にタブがブラウザでどのように表示されているかによってのみ確認されます。 FirefoxとChromeは問題ありません。次のように他のすべてのタブを閉じるときに本文要素のサイズが変更されない

マイページのレイアウトが(名前だけが示されている)である:

<body> 
    <wrapper> 

    <header> ... </header> 
    <main_content> ... </main_content> 
    <footer> ... </footer> 

    </wrapper> 
</body> 

ヘッダとフッタは、一定の高さであるが、main_contentは動的です。

内容が不足している場合、flex:1と設定すると、フッターが自動的にウィンドウの下部に移動します。

body { 
    padding: 0px; 
    margin: 0px; 
} 

#wrapper { 
    width: 100%; 
    min-height: 100vh; 
    padding: 0px; 
    margin: 0px; 

    display: flex; 
    flex-direction: column; 
    position: relative; 
} 

#header { 
    width: 100%; 
    height: 60px; 
    margin: 0px; 
    padding: 0px; 
} 

#main_content { 
    width: 100%; 

    flex: 1; 

    margin: 0px; 
    padding: 50px; 
    -moz-box-sizing: border-box; 
    -webkit-box-sizing: border-box; 
    box-sizing: border-box; 
} 

#footer { 
    width: 100%; 
    height: 350px; 
    margin: 0px; 
    padding: 0px; 
} 

ほとんどの場合、それはあなたの期待どおりに機能します。正常に動作するウェブサイトのレイアウト。

問題

私が遭遇した問題は、新しいタブがナビゲーションバーの下部に配置されているのSafariで発生、とChromeのようなものではなくページの高さ(の一部を消費し、タブはコンテンツの高さに影響しません)。また、コンテンツが短い場合にのみ問題が発生するため、footerはウィンドウの一番下に表示されます。

セットアップ

ページが1つ以上のタブで、ロードされると、それだけで正常に見える:

Page loaded with tabs

あなたがそこに、(うまくいけば...)見ることができるように画像の上部に2つのタブがあります。ページの内容がビューポートを完全に埋める。計画通り! (複数の場合、彼らはのみ表示されます)、しかしもある

タブがなくなっているPage after tabs closed

は:

しかし、その後、あなたが他のすべてのタブを閉じた場合の再現

ページの下部に不審なタブサイズの隙間(白い)が表示され、ページがビューポートを埋めるようにサイズ変更できませんでした。

ウィンドウのサイズを変更した場合、即座にスナップして領域を埋めます。インスペクタを開いてCSSプロパティを変更した場合は、直ちにスナップして領域を埋めます。しかし、これらのことのいずれかをやっていないと、これを防ぐためにCSSルールの組み合わせを見つけることはできません。

position:absolute;のさまざまな組み合わせを試しましたが、4つの側面はすべてゼロに設定されています。また、同じゼロを持つposition:fixed;。サイコロはありません。

どのような考えですか?

私は間もなく遊んでいきます。

Iが底に白いギャップの「要素を検証」追加

は、選択された要素は、トップレベルhtmlタグです。 bodyタグとそのすべての内容は、フッターの最後で終わります。

追加追加

問題は関係なく、あなたがそれらすべてを閉じ、タブでページをロードし、それらを閉じ、あるいは全くのタブでページを読み込み、1つ以上を開くかどうかに発生します。あなたは多分より多くの情報/指示を提供する必要が

+0

可能なガイダンス:[Safariを除くすべてのブラウザで動作するFlexboxコード。なぜですか?](http://stackoverflow.com/a/35137869/3597276) –

答えて

0

ただ、各ファイルには、次のJS(...とjQuery)機能を含める必要があります。

$(window).on('resize', function(){ 
    $('#wrapper').css('min-height', $(window).height()); 
}); 

それは理想的ではないかもしれませんが、それはうまく動作します。私の人生では、純粋なCSS修正を見つけることができませんでした。

-1

は、私はこのアプローチが効果的な見つける:

#main_content { 
    flex:1 1 calc(100vh - (60px + 350px)); 
/* header height & footer height subtracted */ 
} 

はまた、あなたを助けるかもしれませんbodyタグの高さを加えます。

+0

これはテストしましたか?私はまだまったく同じ結果を得ています。私は 'flex:1'プロパティの重いユーザです。今まで私を失望させたことはありません。いずれにせよ、私はそれがフレックスのものと全く関係がないと確信していますが、ボディは単にサイズ変更されていません。 – Birrel

+0

テストはあなた次第です。@ Birrel –

+0

あなたは**アンサー**を**アンサー**セクションに掲載しました。あなたがそれをテストするつもりがないなら、コメントとしてそれを置いてください - 普通の "あなたは試しましたか?"というようなものです。 ** ANSWER **セクションには、テストされた正確な情報が含まれています。ただのカフの推測だけではありません。 – Birrel

関連する問題