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

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

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

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

CSS

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

Q&A

解決済

1回答

4550閲覧

position: fixedについて

poiful0828

総合スコア5

HTML

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

CSS

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

4グッド

3クリップ

投稿2019/11/23 19:23

HTML ```### 前提・実現したいこと HTML,CSSを独学で勉強し始めたばかりの者です。 ヘッダーを固定したいのですが、positon:fixed;を使うと画像のプレビューのようにヘッダーが左にずれてしまいます。![イメージ説明](d2d808a20ce48d81d42627790591c2dc.png) ```html <body> <div class="header"> <div class="container"> <img class="logo-image" src="https://prog-8.com/images/html/advanced/main_logo.png"> <a class="login">ログイン</a> </div> </div>

css

1.header { 2 height:65px; 3 background-color:rgba(34,49,52,0.9); 4 position:fixed; 5 top:0px; 6 7.container { 8 width:1170px; 9 margin:0 auto;

正しいコードを見ると、.headerのwidthを100%にしているのですが、なぜそうなるのかが分かりません。そもそもdivなどのブロック要素は幅を指定しない限り、初期値autoによって幅いっぱいに広がるんですよね?それなのにわざわざ100%にするのはなぜなのか、そうしなければposition:fixedを使ったときにずれてしまうのはなぜなのでしょうか。positin:fixedによって、どの部分にどのような影響があるのか教えてください。
また、同じような質問に対する回答で「子要素の.containerにwidth:1170pxを指定してありますので親要素であるheaderの横幅も1170pxになります。」とあったのですが、子要素のcssは親要素にも影響するのですか?

あと、別の似た質問の回答にあったのですが、次のコードのようにtop,left,rightを全部0pxにすると.headerのwidthを100%にしていなくてもずれていませんでした。

css

1.header { 2 height:65px; 3 background-color:rgba(34,49,52,0.9); 4 position:fixed; 5 top:0px; 6 left:0px; 7 right:0px; 8 9}

これを見て更に分からなくなってしまいました。。

本当に初心者なので質問もだいぶめちゃくちゃだと思いますが、ご回答頂けたら嬉しいです。よろしくお願いします。

TarouTenguyama👍を押しています

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

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

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

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

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

s8_chu

2019/11/23 20:54

「ヘッダーがずれる」という状況が再現しませんでした。https://jsfiddle.net/ks6gq7pf/ そのような状況が再現するコードを質問文へ追記していただけませんか?
guest

回答1

0

ベストアンサー

  • position プロパティに「fixed を指定した要素」は、他の要素からは無視されます。
  • fixed を指定した要素」は、 html 要素に対して相対的に配置されます。簡単にいえば、画面のどこかに「fixed を指定した要素」が配置される、ということです。
  • fixed を指定した要素」で、 width, left, right プロパティが auto の場合、 width の初期値である auto は、要素のコンテンツ (子孫要素の大きさ) に合わせた横幅となります。

今回の主な疑問点である「なぜ width: 100%; を指定するのか?」については、上記項目の上から三番目によって説明出来ます。「fixed を指定した要素」は、 width プロパティもしくは right, left プロパティを指定しなければ横幅がコンテンツの幅となってしまい、ページ全体へ広がる保障がありません

たとえば、「fixed を指定した要素」があり、その要素が横幅 250px の子要素を持っている、以下のようなコードを実行してみてください (動作確認用リンク)。結果を見るとわかるとおり、何も指定しない状態では、「fixed を指定した要素」の横幅は子要素の横幅 250px 分しかありません。そこで、 width プロパティを指定することで、この問題を解決出来るということです。

HTML

1<div class="header"> 2 <div class="container"> 3 <img class="logo-image" src="http://placehold.jp/150x65.png"> 4 </div> 5</div>

CSS

1body { 2 margin: 0; 3} 4 5.header { 6 position: fixed; 7 top: 0px; 8 height: 65px; 9 background-color: red; 10} 11 12.container { 13 width: 250px; 14 margin: 0 auto; 15}

以上より、「なぜ width: 100% が必要なのか」は理解出来たと思います。次に、「top, left, right を全部 0 にすると width を指定しなくて良かったのはなぜか」について説明します。

回答文のはじめに「画面のどこかに「fixed を指定した要素」が配置される」と書きました。top, left, right の三つのプロパティは、「fixed を指定した要素」を画面上のどこに配置するのかを指定するためのプロパティです。つまり、 left: 0 とすれば、「fixed を指定した要素」はページの左端に移動し、 top: 0 とすればページの上端へ移動します。そして、 left: 0 を指定したうえで right: 0 を指定すると、要素は引っ張られるように左右の端へ伸びます。これより、ページ横幅全体へ「fixed を指定した要素」を広げることが可能だとわかります。


参考:

投稿2019/11/23 22:09

s8_chu

総合スコア14731

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

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

poiful0828

2019/11/24 15:01

丁寧な解説ありがとうございました!! 理解できました(#^^#)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問