teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

解説を追記

2021/04/19 04:58

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37474

answer CHANGED
@@ -14,4 +14,33 @@
14
14
  }
15
15
  ```
16
16
 
17
- とするのがいいかと思います。
17
+ とするのがいいかと思います。
18
+
19
+ # 解説
20
+
21
+ ```css
22
+ .nohero .head-fixed + * {
23
+ margin-top: 70px;
24
+ }
25
+ ```
26
+
27
+ としてマージンで固定配置ヘッダ分の余白を取っているかと思うのですが、その分だけbodyが下がってしまっています。
28
+
29
+ これは、親子間マージン相殺が原因です。
30
+
31
+ [マージンの相殺 - CSS: カスケーディングスタイルシート | MDN](https://developer.mozilla.org/ja/docs/Web/CSS/CSS_Box_Model/Mastering_margin_collapsing)
32
+
33
+ ---
34
+
35
+ 親子間マージン相殺を消すには色々方法がありますが、モダンブラウザであれば`display: flow-root`を使うのが一番無難です。
36
+
37
+ [ブロック整形コンテキスト - 開発者ガイド | MDN](https://developer.mozilla.org/ja/docs/Web/Guide/CSS/Block_formatting_context)
38
+
39
+ ---
40
+
41
+ また、bodyが下がった時に固定配置ヘッダが付いてきてしまうのは、`top: auto`の時に静的位置に配置されることが原因です。
42
+
43
+ > bottom も auto であった場合は、要素は垂直方向には静的要素が配置される場合と同様に配置されます。
44
+ [top - CSS: カスケーディングスタイルシート | MDN](https://developer.mozilla.org/ja/docs/Web/CSS/top)
45
+
46
+ ですので、`top: 0;`として`auto`ではない値を指定することによって解消できます。