表示例
900px 以下で1列に畳む
AB
狭い画面では
AB
別名・英語表記
- レスポンシブ
- 画面幅の区切り
- メディアクエリ
- 折り返し幅
- Breakpoint
実装例
<div class="x-breakpoint">
<p class="x-breakpoint__t">900px 以下で1列に畳む</p>
<div class="x-breakpoint__wide"><span>A</span><span>B</span></div>
<p class="x-breakpoint__t">狭い画面では</p>
<div class="x-breakpoint__narrow"><span>A</span><span>B</span></div>
</div>
/* 貼った先のリセットに頼らないよう、この部品の中だけ border-box にする */
.x-breakpoint,
.x-breakpoint *:not([class*="fa-"]),
.x-breakpoint *:not([class*="fa-"])::before,
.x-breakpoint *:not([class*="fa-"])::after {
box-sizing: border-box;
/* 貼った先の既定の書体に引きずられないようにする。書体が変わると
文字の幅と高さが変わり、枠のサイズまでずれる */
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Hiragino Sans", "Noto Sans JP", "Yu Gothic UI", Meiryo, sans-serif;
}
.x-breakpoint {
width: 216px;
}
.x-breakpoint__t {
margin: 0 0 5px;
font-size: 10.5px;
color: #606a7b;
}
.x-breakpoint__wide {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 6px;
margin-bottom: 9px;
}
.x-breakpoint__narrow {
display: grid;
grid-template-columns: 1fr;
gap: 6px;
}
.x-breakpoint__wide span,
.x-breakpoint__narrow span {
display: grid;
place-items: center;
height: 24px;
border: 1px solid #cfd4dc;
border-radius: 5px;
background: #fff;
font-size: 11px;
color: #606a7b;
}
AIへの指示文
「ブレークポイント(Breakpoint)」を実装してください。
## これは何か
この幅を境にレイアウトを変える、という切り替え点。スマートフォンとパソコンの境目を決める。
## 使いどころ
- 同じHTMLで、画面幅ごとに見せ方を変えたいとき
- 2列を1列に畳む幅を決めたいとき
## 実装の要件
- @media (max-width: 900px) のように、崩れる幅で区切る
- 区切りは2〜3個まで。中身が崩れる幅を実際に測って決める
- カードやサイドバーの中身のように、置き場所によって幅が変わる部品の中の切り替えは、画面の幅ではなく親の幅で決める @container を使う(Chrome・Edge は 105 から、Safari は 16 から、Firefox は 110 から)
- container-type: inline-size は幅が外側で決まる親に付ける。付けた要素は中身から幅を決めなくなるので、width も flex: 1 も無い inline-block・float・横並びの flex の子に付けると幅が 0 に潰れる
- 端末名で決めない。特定の機種に合わせた値は、機種が変わるたびに古くなる。崩れる幅で決める
- 区切りを増やしすぎると、確認する組み合わせが増えて保てなくなる。2〜3個に絞る
- 幅だけで判断しない。指で押すのかマウスなのかは幅とは別(pointer: coarse で判定する)
## アクセシビリティの要件
- 幅を変えても、読む順序が変わらないようにする
- 文字サイズを固定しない。利用者が拡大したときも崩れないようにする
- 狭い画面で内容を消さない。隠すなら、別の場所から辿れるようにする
## 参考にする実装
この形を出発点にして、プロジェクトの命名規則・色・余白に合わせて調整してください。
```html
<div class="x-breakpoint">
<p class="x-breakpoint__t">900px 以下で1列に畳む</p>
<div class="x-breakpoint__wide"><span>A</span><span>B</span></div>
<p class="x-breakpoint__t">狭い画面では</p>
<div class="x-breakpoint__narrow"><span>A</span><span>B</span></div>
</div>
```
```css
/* 貼った先のリセットに頼らないよう、この部品の中だけ border-box にする */
.x-breakpoint,
.x-breakpoint *:not([class*="fa-"]),
.x-breakpoint *:not([class*="fa-"])::before,
.x-breakpoint *:not([class*="fa-"])::after {
box-sizing: border-box;
/* 貼った先の既定の書体に引きずられないようにする。書体が変わると
文字の幅と高さが変わり、枠のサイズまでずれる */
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Hiragino Sans", "Noto Sans JP", "Yu Gothic UI", Meiryo, sans-serif;
}
.x-breakpoint {
width: 216px;
}
.x-breakpoint__t {
margin: 0 0 5px;
font-size: 10.5px;
color: #606a7b;
}
.x-breakpoint__wide {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 6px;
margin-bottom: 9px;
}
.x-breakpoint__narrow {
display: grid;
grid-template-columns: 1fr;
gap: 6px;
}
.x-breakpoint__wide span,
.x-breakpoint__narrow span {
display: grid;
place-items: center;
height: 24px;
border: 1px solid #cfd4dc;
border-radius: 5px;
background: #fff;
font-size: 11px;
color: #606a7b;
}
```
## 出力の約束
- HTML と CSS を分けて出す。JavaScript が要るときは素の JavaScript で書き、UIフレームワークは使わない。
- 参考実装がアイコンに Font Awesome のクラスを使っている場合は、プロジェクトで使っているアイコンかインライン SVG に置き換えてよい。
- 上のアクセシビリティ要件を満たす。満たせない箇所があるときは、理由を添えて先に知らせる。
- 色・角丸・余白は既存のデザイントークンがあればそれを使う。無ければ CSS 変数として切り出す。
使いどころ
- 同じHTMLで、画面幅ごとに見せ方を変えたいとき
- 2列を1列に畳む幅を決めたいとき
注意点
- 端末名で決めない。特定の機種に合わせた値は、機種が変わるたびに古くなる。崩れる幅で決める
- 区切りを増やしすぎると、確認する組み合わせが増えて保てなくなる。2〜3個に絞る
- 幅だけで判断しない。指で押すのかマウスなのかは幅とは別(pointer: coarse で判定する)
アクセシビリティの要点
- 幅を変えても、読む順序が変わらないようにする
- 文字サイズを固定しない。利用者が拡大したときも崩れないようにする
- 狭い画面で内容を消さない。隠すなら、別の場所から辿れるようにする