Flexboxを使いレスポンシブWeb用フレームを作成します。
作成するフレームはヘッダー、フッターと、サイドバーと、コンテンツエリアの2カラムレイアウトで、画面幅が小さくなると、1カラムになるレイアウトです。
※ このドキュメントは2016年5月26日に勧告候補になったドキュメント「CSS Flexible Box Layout Module Level 1 W3C Candidate Recommendation, 26 May 2016」を参照しています。
「Webサイトからお問い合わせが来ない…」とお悩みの方必見!
当サイトのノウハウを詰め込んだ『Web集客の無料ガイド』をご提供
方法
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<title>Flexboxテスト</title>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<div class="flex-cotainer">
<div class="wrapper">
<header>ヘッダー</header>
<div class="flex-items">
<div class="content1">
<h1>サイドバー</h1>
</div>
<div class="content2">
<h1>コンテンツエリア</h1>
</div>
</div>
<footer>フッター</footer>
</div>
</div>
</body>
</html>
style.css
.flex-cotainer {
display: flex;
flex-direction: column;
}
.wrapper{
display: flex;
min-height: 100vh;
flex-direction: column;
}
.flex-items {
flex: 1;
background-color: #ee0;
display: flex;
flex-wrap: wrap;
}
.content1 {
flex: 1 1 150px;
background-color: #333;
}
.content2 {
flex: 3 1 350px;
background-color: #0ee;
}
header{
height: 100px;
background-color: #99c;
}
footer{
height: 100px;
background-color: #99c;
}
手順1
ヘッダー、フッターの指定に関しては「Flexboxで、Sticky Footerを作成する」を参照ください。
手順2
今回はコンテツエリアが500px以上の場合は2カラム、500px以下になると1カラムになるようにします。
コンテンツエリア全体の枠(.flex-items)に「display: flex;」を指定し、その中に「.content1」ブロックと「.content2」ブロックを設定しています。
.flex-items{
display: flex;
flex-wrap: wrap;
}
手順3
「.content1」と「.content2」に、flexプロパティを指定しています。
「flex: 1 0 150px;」は、ベース幅を150px;に設定しています。.content2のベース幅が350px なので、合計500pxの画面幅まで2カラムで縮まり、500pxを下回ると1カラムになります。
// flex プロパティ
// Value: <flex-grow> <flex-shrink> <flex-basis> ;
// Initial: 1 0 auto ;
.content1 {
flex: 1 0 150px;
}
.content2 {
flex: 3 0 350px;
}
ブレイクポイントは500pxの1箇所です。
後は画面幅に合わせてコンテンツエリアが伸び縮みします。
例えば画面幅が900pxだった場合、ベース幅が500pxですので、「900px - 500px」 で、残りの400pxを、1対3で各ブロックに割り振られます。(.content1 : 250px、.content2 : 650px)
関連記事