メインコンテンツを可変、サイドバーを幅固定のレイアウトをflexboxで実装しようとした際に少し迷ったのでメモ。
サンプルコード
最初に上手くいかなかった例です。
HTML
<div class="contents"> <div class="main">メインコンテンツ</div> <div class="sub">サイドバー<br>幅:<span class="sub-width"></span>px</div> </div>
確認用に.sub-width部分にサイドバーの幅が入るようにします。
JavaScript
$(window).on('load resize', function() {
$('.sub-width').text($('.sub').width());
});
最後にCSSです。
.contentsにdisplay flex、.subは固定幅、.mainはwidth 100%を指定しました。
CSS
.contents {
display: flex;
}
.main {
width: 100%;
}
.sub {
width: 300px;
}
これで想定に近いレイアウトにはなったのですが、.subが指定した幅で固定になっていませんでした。
上手くいかなかった場合のデモページ
調べてみて、.mainにflex: 1と指定すると想定した形にすることができました。
CSS
.contents {
display: flex;
}
.main {
flex: 1;
}
.sub {
width: 300px;
}
コメントが承認されるまで時間がかかります。