質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

1565閲覧

固定ヘッダー分の高さをヘッダー以下のメインコンテンツでどのように確保するのが好ましいのか?

murabito

総合スコア108

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/03/19 06:18

質問

position: fixedでヘッダーを固定すると、ヘッダーが通常のフローから切り離されるので、ヘッダーに続くメインコンテンツ部分がbody要素を基準に配置されると思います。

このままだと、ヘッダー部分にメインコンテンツ部分が重なってしまうため、ヘッダーの高さ分、メインコンテンツの
Y方向の位置を調整してあげる必要があると理解しています。

そこでなのですが、どのようにメインコンテンツのY方向の位置を調整するのが好ましいのか、考え方など教えて頂けませんでしょうか?

対策案は4つあると思って試してみました。margin-topで調整する案はヘッダーのY方向の位置も移動してしまうので選択肢からは外れました。

残り3つは同じ結果を得られているのですが、どの方向が好ましいとかあったら教えていただきたいです。

それぞれ、メリデリやこういうケースの場合はこちらが好ましいなどの使い分けはありますか?

画像

イメージ説明

HTML(サンプルコード)

<div class="outer"> <header> <h1>Fixed Header</h1> </header> <div class="inner"> <main> <article> <h2>Hello World</h2> <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Provident possimus asperiores, earum atque, vel consequatur aut voluptates soluta ullam dolorem eos. Nam sed, veniam nisi odio doloremque unde provident vitae!</p> <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Provident possimus asperiores, earum atque, vel consequatur aut voluptates soluta ullam dolorem eos. Nam sed, veniam nisi odio doloremque unde provident vitae!</p> <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Provident possimus asperiores, earum atque, vel consequatur aut voluptates soluta ullam dolorem eos. Nam sed, veniam nisi odio doloremque unde provident vitae!</p> </article> </main> <footer> <h2>Footer</h2> </footer> </div> </div>

CSS (サンプルコード)

* { box-sizing: border-box; } body, h1, h2 { margin: 0; } .outer { width: 600px; margin: auto; } header { background-color: gray; position: fixed; height: 5rem; padding: 1rem; z-index: 100; width: 600px; } .inner { --header-vertical-space: 6rem; /* (1)padding-topで調整する場合 */ /* padding-top: var(--header-vertical-space); */ /* (2)position topで調整する場合 */ /* position: relative; top: var(--header-vertical-space); */ /* (3)translateYで調整する場合 */ /* transform: translateY(var(--header-vertical-space)); */ /* (4) margin-topで調整する場合 */ /* これだと、ヘッダーのY方向の位置も移動してしまうので、この選択肢は駄目なようだった */ /* margin-top: var(--header-vertical-space); */ } footer { background-color: gray; padding: 1rem; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

個人的には、1か4です。

2は、親要素からあふれているのが気になります。
3は、スタッキングコンテキストを生成するので、レイアウトに影響が出る場合があります。これだけはなるべく避けると思います。

4についてヘッダごと下がってしまう件は、親子間のマージン相殺なので、対処法はあります。

投稿2021/03/19 06:45

編集2021/03/19 07:36
Lhankor_Mhy

総合スコア36115

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

murabito

2021/03/23 09:07

ありがとうございます。(3)がNGということであれば、(2)も同様にスタッキングコンテキスト生成により非推薦といった感じでしょうか?スタッキングコンテキストが作られることでデメリットなのは、例えば、今回であれば`.inner`の中にfooter入れていますが、もしfooterが`.inner`の外だった場合に、`.inner`のコンテンツとfooterが重なってしまうから、保守性よくないよねって感じでしょうか? 4のマージン相殺による解決は試してみます!個人的にはpaddingは親子間のスペース用に使うのがしっくりくるので、ヘッダー分のスペース確保のためにpadding-top使うアプローチは違和感あるのですよね。でも、padding-topのアプローチはよく見かけますよね。
Lhankor_Mhy

2021/03/23 09:43

(2)はスタッキングコンテキストを生成するのでしたっけ……? スタッキングコンテキストが生成されることを回避した方がいいのは、主に重ね合わせ順に関することだと思います。ご指摘の点ももちろん気になりますが。 親子間マージン相殺の対処は、個人的には display: flow-root をお勧めします。
murabito

2021/03/23 09:49

「position の値が absolute または relative であり、かつ z-index の値が auto 以外の要素」とMDNにあるので、今回はz-indexをつけてなかったので該当しないみたいですね。 > 親子間マージン相殺の対処は、個人的には display: flow-root をお勧めします。 flow-rootでマージン相殺対応も出来たのですね!flexboxも上下のマージン相殺おこならないとかあったので、その類ですかね。試してみます。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問