Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

position: fixed; でサイドバーを固定できません

解決したいこと

プログラミング初学者です。
HTML/CSS/railsを使って投稿機能のある自作アプリを作っています。
左右のサイドバーとヘッダーを固定して中央の投稿されたツイートをスクロールで見れるようにしたいです。
position fixedを使いサイドバーを固定したいのですが、fixedを使うとビューが崩れてしまいます。
かなり初歩的な部分だとは思いますが、ご教授頂けると幸いです。
↓実際のビュー
position: fixed;
top: 0px;
をかけたとき
https://gyazo.com/66b935d6c110a3becd85062e6b9d00e0
左のサイドバーのみ適用されない
https://gyazo.com/e025eee8b926e1b4bc094c241be05c0a

発生している問題・エラー

左のサイドバーにposition: fixed;をかけるとなぜかセンターのビューが左上基準で重なってしまう。

または、問題・エラーが起きている画像をここにドラッグアンドドロップ。

該当するソースコード

HTML

<div class="wrapper">
  <div class="side-view">
    <%= render "side_bar" %>
  </div>
  <div class="main-view">
    <%= render "main_view" %>
  </div>
  <div class="runking-view">
    <%= render "side_runking" %>
  </div>
</div>

左サイドバーのCSS

.wrapper {
  display: flex;
  height: 100%;
  width: 100%;
  z-index: 1;


}
.side-view {
  position: fixed;
  top: 0px; 
  height: 100vh;
  width: 300px;
  border-right: solid 1px #000000;
  background-color: #D3C9C6;

}

センターのヘッダーCSS

.main-view {
  background-color: #ffffff;
  height: 100vh;
  width: calc(100% - 600px);

}

.top-header {
  position: sticky;
  top: 0px;
  height: 100px;
  background-color: #D3C9C6;
  display: flex;
  justify-content: space-between;
  align-items: center;
  border-bottom: solid 1px #000000;
}

右側のサイドバーCSS

div.runking-view {
  position: fixed;
  top: 0px;
  right: 0px;
}

.runking_contents {
  display: flex;
  flex-direction: column;
  align-items: center;
  background-color: #D3C9C6;
  height: 100vh;
  width: 300px;
  border-left: solid 1px #000000;
}

自分で試したこと

親要素にtransformがかかっているとできないみたいですが特にそのようなスタイルは確認できなかったです。
原因が分からなかったので、ご教授頂けると幸いです。

0

2Answer

詳細なコンテンツは省きましたが、意図通りの動きをコーディングできたと思います。
以下のCodePenをご覧ください。

おそらくポイントは
position: fixedを適用した要素はレイアウトの際に幅や高さが無視される
という挙動かと思います。

Edit on CodePenをして

  • サイドバーの幅や高さをコメントアウトする
  • メインコンテンツのマージンをコメントアウトする
    などを試してみると、なんとなくプロパティを組み合わせた際の挙動への理解が深まるかもしれません。

参考になれば幸いです!

See the Pen position: fixed; でサイドバーを固定 by Keisuke Watanuki (@xrxoxcxox) on CodePen.

1Like

Comments

  1. 丁寧かつ分かりやすい説明ありがとうございます!
    ①動かしたい要素に高さ、横幅を指定できてない
    ②margin: autoで中央に寄せていなかった
    大きくこの2点が問題だったのかなと思いました!

    そんなに気にならないので良いのですがスクロールするとヘッダーに被ってしまうのですがこれはこのような仕様なのでしょうか??
    https://gyazo.com/c2d463bd47f426a5642f1aa3086478c7
  2. @shantianchengyilang316

    おや……なぜこうなってしまうんでしょう……
    多分どこかのz-indexかpositionかが上手く効いていないような気がします
  3. 先ほど確認したところヘッダーにz-indexがかかっていませんでした!!
    無事挙動を確認できました!最後までご丁寧に本当に感謝しております!
    今後またご縁がありましたらよろしくお願いします。
  4. 解決したようで良かったです!

wrapperに対するdisplay: flexによって、wrapper直下の side-view, main-view, runking-view が横並びになります

スクロールは overflowで制御するので、 main-viewtop-header 以外に対して指定しているのではないでしょうか?
その場合、.runking-viewに対するposition: fixedを削除すると期待の動作になりませんでしょうか?
参考になれば幸いです

0Like

Comments

  1. 素早いご対応ありがとうございます!😭
    .runking-viewのposition: fixedを削除しましたがmain-view以外のside-viewとrunking-viewが固定されなかったです。(main-view意外にはposition: fixedは記述してない)
    何か他にスタイルが邪魔しているのでしょうか?

    挙動を貼り付けておきます!
    https://gyazo.com/876794fc0b38acc690cf5a1c1b70bb75

Your answer might help someone💌