一番簡単なレスポンシブ
一段組みの可変レイアウト
シンプルな1カラム
シンプルな1カラムのボックスがブラウザ幅に合わせて伸縮します。
<div class="container-1">
<p>ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。</p>
</div>.container-1{
background: #eee;
}ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。
widthの指定が無いので親要素の幅いっぱいまで広がります。
ブラウザの幅に合わせて伸縮します。
最大幅を固定した1カラム
可動性を維持するために最大幅を固定します。
<div class="container-2">
<p>ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。</p>
</div>.container-2{
max-width: 500px; /*ボックスの最大幅を指定*/
margin-left: auto; /*中央寄せの為*/
margin-right: auto; /*中央寄せの為*/
background: #eee;
}ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。ここにテキストが入ります。
ボックス幅の変化がわかりやすい様、ここではあえて500pxと狭くしています。
ボックス幅が狭くなるとコンテンツが左に寄ってしまうため左右にmargin:auto;を配置して中央に寄せています。
画像のフルードイメージ化
画像を親要素の幅に合わせて伸縮させます。
ここではwidth: 100%;とmax-width: 100%;の違いをイメージ化しておきます。
width:100%;の場合
<div class="container-3">
<figure><img src="https://web.ki-biz.com/weblog/wp-content/uploads/2025/10/8b53962bd6992e076e58c639b89ddd1d.webp" width="500px" height="500px" alt="犬のイラスト" loading="lazy"></figure>
</div>.container-3{
background: #eee;/*わかりやすい様に背景色*/
}
img {
width: 100%;/*画像サイズに関係なく親要素幅いっぱい*/
height: auto;/*画像比率維持のために必要*/
}
max-width:100%;の場合
<div class="container-4">
<figure><img src="https://web.ki-biz.com/weblog/wp-content/uploads/2025/10/8b53962bd6992e076e58c639b89ddd1d.webp" width="500px" height="500px" alt="犬のイラスト" loading="lazy"></figure>
</div>.container-4{
background: #eee;/*わかりやすい様に背景色*/
}
.container-4 img {
max-width: 100%;/*画像サイズが上限。さらに親要素幅に合わせて縮小*/
height: auto;/*画像比率維持のために必要*/
}
画像はデフォルトで可変しないので指定が必要です。
親要素幅を基準に、
width ⇒ いっぱいに広がる。
max-width ⇒ 画像の幅が上限 + 幅に合わせて縮小する。
画像比率維持のために「height: auto;」は必須。
多段組の可変レイアウト
%で作るシンプルな2カラム
シンプルな1カラムのボックスがブラウザ幅に合わせて伸縮します。
<div class="row1-1">
<div class="col2-1"><p>ここに左側テキストが入ります。ここに左側テキストが入ります。ここに左側テキストが入ります。</div>
<div class="col2-1"><p>ここに右側テキストが入ります。ここに右側テキストが入ります。ここに右側テキストが入ります。</div>.row1-1{
display: flex;
}
.col2-1{
width: 50%;
border: 1px dashed #999;
}ここに左側テキストが入ります。ここに左側テキストが入ります。ここに左側テキストが入ります。
ここに右側テキストが入ります。ここに右側テキストが入ります。ここに右側テキストが入ります。
%は一番基本の相対単位。
%は親要素のcontent-boxサイズを100として子要素の割合を算出します。
子要素の合計が親要素の100%を超えるとカラム落ちする場合があります。
指定のpxサイズから%サイズを計算する
デザインカンプでデザインされたものを基に同一比率で可変レイアウトに変換するパターンを想定します。
以下の計算式で割合を算出します。
【子要素】÷【親要素のcontent-boxサイズ】×100%
calc()
cssの値に計算式を使用できる関数です。異なる単位の値同士も計算できます。
<div class="row2">
<div class="col2"><p>ここに左側テキストが入ります。ここに左側テキストが入ります。ここに左側テキストが入ります。</div>
<div class="col2"><p>ここに右側テキストが入ります。ここに右側テキストが入ります。ここに右側テキストが入ります。</div>.row2{
display: flex;
justify-content: space-between;
max-width: 640px;
margin: 0 auto;
outline: 1px dashed #999;
}
.col2-2{
width: calc((300 / 640) * 100%); /*【子要素】/ 【親要素】* 100% */
background: #e9e9e9;
}ここに左側テキストが入ります。ここに左側テキストが入ります。ここに左側テキストが入ります。
ここに右側テキストが入ります。ここに右側テキストが入ります。ここに右側テキストが入ります。
実際にはぴったりの割合で指定できることの方が少ないのでサイズを計算式から導き出す方法も使えるようにしておきます
親要素にpaddingが付いている場合
シンプルな1カラムのボックスがブラウザ幅に合わせて伸縮します。
<div class="row3">
<div class="col2-3"><p>ここに左側テキストが入ります。ここに左側テキストが入ります。ここに左側テキストが入ります。</div>
<div class="col2-3"><p>ここに右側テキストが入ります。ここに右側テキストが入ります。ここに右側テキストが入ります。</div>
</div>.row3{
display: flex;
justify-content: space-between;
max-width: 640px; /*左右のpadding20pxを含んだ数字*/
margin: 0 auto;
padding: 20px;
outline: 1px dashed #999;
}
.col2-3{
width: calc((290 / 640) * 100%); /* 290 = 640 - 20*2 - 20 */
background: #e9e9e9;
}ここに左側テキストが入ります。ここに左側テキストが入ります。ここに左側テキストが入ります。
ここに右側テキストが入ります。ここに右側テキストが入ります。ここに右側テキストが入ります。
calcの分母が600なのは、子要素の%計算の基準になるのはpaddingをのぞいた純粋なコンテンツ領域だからです。
メディアクエリで段組み切替
モバイルファーストとデスクトップファース
レスポンシブコーディングは主にこの2種類
モバイル向けスタイルをベースに制作
⇒ min-widthで上書きし大きいサイズに対応
デスクトップ向けスタイルをベースに制作
⇒ max-widthで上書きし小さいサイズに対応
一般的にモバイル用は1カラム、デスクトップ用は複数カラムになるのでモバイルファーストの方が打ち消しが少なく済みます。
コンテンツ単位でブレイクポイントを変更
デザインカンプはPC用レイアウトまたはSP用レイアウトのみが用意されることが多いです。
また、760px~900px前後の画面サイズではレイアウトが崩れることが多いです。
といってもコンテンツごとに崩れるサイズは異なるのでそれぞれブレイクポイントを設定する必要があります。


コメント