回答編集履歴

1

回答の変更

2023/05/29 23:05

投稿

luuguas
luuguas

スコア492

test CHANGED
@@ -1,6 +1,49 @@
1
- 有名な方法だと、CSS常時表示し要素に`position:fixed`又`position:sticky`と`top:0`,`left:0`を指定するとがあります
1
+ budgerigar.kさんが提示してくさったサイトを見たころ、CSSを使ってメニューバーの常時表示を実装るようです。厳密な検証できてませんが、それらサイトを参考に私の手元でも同様の機能を実装できしたので、その方法を記載します。
2
2
 
3
+ # 説明
3
- 「CSS ヘッダ 固定」で調べと、ヘッダを常時表示させ方法を紹介してサイト色々てく是非調べてみてください一応分かりやすサイト載せおきます。
4
+ メニュバーが隠れ現象は画面をスクロルすときに発生ます。そし、画面がスクロールす条件は、ページ画面からはみ出る、つまり「`<body>`が画面内からはみ出る」うことは、`<body>`の大きさ画面内収まるように固定しえばよいわけです。
4
5
 
6
+ #### コード
7
+ ```html
8
+ <body>
9
+ <div id="container">
10
+ <p>テキストテキストテキスト</p>
11
+ <p>テキストテキストテキスト</p>
12
+ ...
13
+ <p>テキストテキストテキスト</p>
14
+ </div>
15
+ </body>
16
+ ```
17
+
18
+ ```css
19
+ body{
20
+ height: 100vh;
21
+ overflow-y: hidden;
22
+ margin: 0px;
23
+ }
24
+ #container{
25
+ height: 100%;
26
+ overflow-y: scroll;
27
+ margin: 0 1px;
28
+ }
29
+ ```
30
+
31
+ まず、`<body>`要素の大きさを固定します。
32
+ - `height: 100vh;`を指定して、高さを画面全体に合わせます。
33
+ なお、`vh`は画面の縦幅に対する割合を表します。`100vh`で縦幅全体になります。
34
+ - `overflow-y: hidden;`を指定して、要素からはみ出た部分が隠れるようにします。
35
+ こうすることで、`<body>`要素が画面内に収まるようになり、スクロールが発生しなくなります。
36
+
37
+ ---
38
+
39
+ しかし、このままだと`<body>`の先頭しか表示されず、ページ全体を見ることができません。
40
+ そこで、`<body>`の中にコンテナ`<div>`を設置し、これをスクロールできるようにします。
41
+ - `height: 100%`を指定して、コンテナの高さを`<body>`に合わせます。
42
+ - `overflow-y: scroll;`を指定して、要素からはみ出た部分をスクロールで見られるようにします。
43
+ - (`margin: 0px;`だと上手く動作しなかったため、`margin: 0 1px;`を入れています。コンテナの上/左/右のいずれかに余白を入れれば動作するようです。)
44
+
45
+ # 補足
46
+ 私の環境では上手く動作しましたが、他の環境では動作しない可能性もあるのでご了承ください。
47
+
48
+ 動作を確認できる簡単なサイトを作りましたので、よければこちらも確認してみてください。
5
- - CSS ヘッダー固定パターン 3選 | なんとなくWEBで食べていく - https://www.nowte.net/ui/ui-css-fixed-header/
49
+ - https://luuguas.github.io/MenuBarLockedSite/
6
- - position:fixedでヘッダー固定時に重なる問題をCSSで解決する方法 | 向壁虚造 - https://kouhekikyozou.com/css_position_fixed_header_overlap