前提・実現したいこと
CSSでposition:fixed;する際に、画面でなく親要素を基点にしたい。
発生している問題・エラーメッセージ
該当のソースコードについて、
「.A」は、「.inner」の33%
「.B」は、「.inner」の66%
という幅にしたい。
該当のソースコード
該当のソースコードのサンプル
https://jsfiddle.net/byxms2e6/
該当のソースコード
html
1<main> 2 3 <section id="left"> 4 <p>100px固定</p> 5 </section> 6 7 <section id="right"> 8 <div class="inner"> 9 <div class="A"> 10 <p>「.inner」の33%</p> 11 </div> 12 <div class="B"> 13 <p>「.inner」の66%</p> 14 <p>「.inner」の66%</p> 15 <p>「.inner」の66%</p> 16 <p>「.inner」の66%</p> 17 <p>「.inner」の66%</p> 18 <p>「.inner」の66%</p> 19 <p>「.inner」の66%</p> 20 <p>「.inner」の66%</p> 21 <p>「.inner」の66%</p> 22 <p>「.inner」の66%</p> 23 </div> 24 </div> 25 </section> 26 27</main> 28 29<style type="text/css"> 30main { 31 width: 100%; 32} 33#left { 34 position: fixed; 35 background: skyblue; 36 height: 100vh; 37 width: 100px; /* 固定100px */ 38} 39#right { 40 margin: 0 0 0 100px; 41 width: 100%; /* 「main幅 - #leftの100px」という意味での100%*/ 42 position: relative; 43} 44.inner { 45 margin: 0 auto; 46 max-width: 500px; 47} 48.A { 49 position: fixed; 50 background: khaki; 51 color: red; 52 width: 33%; /* 「.inner」の33%にしたい */ 53 z-index: 1; 54} 55.B { 56 position: relative; 57 background: palegreen; 58 width: 66%; /* 「.inner」の66%にしたい */ 59 margin: 0 0 0 33%; 60} 61.B p { 62 height: 50px; 63} 64</style>
試したこと
ネットで検索し、box-sizingや親要素への指定など一通り試しましたが、思うようにいきませんでした。
補足情報(FW/ツールのバージョンなど)
特にありません。
absoluteではいけない理由があるのでしょうか?
はい。「.A」をabsoluteすると「.A」はスクロールされてしまいます。「#left」と「.A」は固定(fixed)し、「.B」だけをスクロールさせる。といいう動作を意図しております。
.B にスクロールバーを持たせるのが自然かと思うのですがどうでしょうか?
なるほど。「.B」に「height: 100vh;」と「overflow-y: scroll;」ですか。一案ですね。参考にさせて頂きます。
レイアウト動作の意図が今ひとつ理解出来ていないのですが、「position:fixed;」のグループとその他と分けるべきでは?レスポンシブ等は考慮するのでしょうか?