2017-02-16 12 views
0

私、それは他の要素の上にとどまり、それを隠す理由position:fixedと固定ヘッダを持っているので、headerの高さは、コンテンツ、フォントサイズとパディングセットによって異なりますので、私はmain.paddingを追加する必要がありますメディアクエリでは、スニペットのように固定値のpaddingを使用することはできません。 javascriptを使わずにheaderの高さの変化を尊重するソリューションはありますか?CSSの位置:固定ヘッダ

body { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
header { 
 
    background-color: grey; 
 
    position: fixed; 
 
    width: 100%; 
 
} 
 

 
main { 
 
    padding-top: 80px; /* bad, because it's fixed */ 
 
}
<header> 
 
    <h1>Example</h1> 
 
</header> 
 
<main> 
 
    <p>Content</p> 
 
</main>

+0

80pxの換算値は、フォント・サイズ関連の問題を解決します。 –

+0

はい、他の問題はありません。あなたが 'ヘッダ'の高さを決して知らないと想像してみてください。 – Hativ

+1

'position:fixed'の性質のため、これを行うための純粋なCSSの方法はないと思います。 –

答えて

2

他の人は言っているように、あなたはjavascriptなしではできませんが、フレックスボックスとflex-grow: 1; overflow-y: scroll;をメインコンテンツエリアに使用して固定ヘッダーを偽装できます。 '日' を使用して

* {margin:0;} 
 
body { 
 
    display: flex; 
 
    flex-direction: column; 
 
    max-height: 100vh; 
 
} 
 
section { 
 
    flex-grow: 1; 
 
    overflow-y: scroll; 
 
} 
 
main { 
 
    background: #eee; 
 
    min-height: 500vh; 
 
}
<header> 
 
    <h1>Example</h1> 
 
</header> 
 
<section> 
 
    <main> 
 
    <p>Content</p> 
 
    </main> 
 
</section> 
 
<footer> 
 
    <p>footer</p> 
 
</footer>

+0

これは、 'section'の後にスティッキーフッターと組み合わせることができますか?私もフレックスボックスを使っていますが、変更を加えればもう動作しません。 https://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/ – Hativ

+0

@Kiltarcを参照してください。フッターを使用するとヘッダーのように動作します。私の答えを更新しました。 –

2

あなたが固定位置を維持したい場合はJavascriptを使用せずに、それを達成することができます方法はありません。私は、HTMLの階層を尊重するだけで、位置を使用しないことをお勧めします。スクロールしてビューポートから取り出すと、固定されます。高さが変わる可能性がある場合は、ヘッダーを常に表示したい場合は、これは最も典型的な方法です。