
最近書かない日はないというほど、Webでのcssで使用頻度の高い"Flexbox"についてのクイズを作ってみました。
使ったことがない人は、まるで意味がわからないし、駆け出し系の人には少し難易度が高いかもしれませんが、
実際にコーディングしてみるとこれらのクイズの内容でつまづくことが多いので、ここ最近での必須スキルといってもいいかもですね。
問題1:要素が横並びにならない?
[html]
<div class="container">
<div class="item">A</div>
<div class="item">B</div>
<div class="item">C</div>
</div>
[css]
.container {
display: flexbox;
}
.item {
width: 100px;
height: 100px;
background: skyblue;
}
Q. 期待したのは横並び。でも縦に並んでいる。なぜ?
- display: flexbox; の書き方が間違っている
- .item の幅が固定されていない
- flex-direction を指定していない
- .container の高さがないため
正解
正解を見る。
1. display: flexbox; の書き方が間違っている
解説
flexbox という値は存在しません。正しくは display: flex;。
これがないと、Flexbox の効果が効かず、デフォルトのブロックレイアウト(縦並び)になる。
問題2:中央寄せができない?
[html]
<div class="container">
<p>Hello</p>
</div>
[css]
.container {
display: flex;
justify-content: center;
}
Q. 横方向には中央寄せできたけど、縦方向は中央にならない。なぜ?
- align-items: center; が必要
- justify-content は縦方向の中央寄せ
- container に高さが指定されていない
- <p> タグには中央寄せできない
正解
正解を見る。
3. container に高さが指定されていない
解説
縦方向の中央寄せには align-items: center; が必要だが、それ以前に高さがなければ中央の基準がない。
例:height: 100vh; などを指定しよう。
問題3:要素の幅が広がらない?
[html]
<div class="container">
<div class="item">A</div>
<div class="item">B</div>
</div>
[css]
.container {
display: flex;
}
.item {
flex-grow: 1;
}
Q. .item が親要素いっぱいに広がらない原因は?
- flex-grow は単体では機能しない
- .item に width を指定する必要がある
- .container の幅が固定されていない
- .item に display: inline が必要
正解
正解を見る。
3. .container の幅が固定されていない
解説
Flexbox では親のサイズを基準に伸縮される。container に width: 100% や width: 500px; などを指定しないと、伸ばす余地がない。
あとがき
ホームページのコーディングをやっている時にいつも思うんですが、
DOM構造の親部分や子、孫をしっかりと把握してCSS設計をしてからじゃないと、
その場しのぎでやってしまうと、表示がグッチャグチャになって、やり直しになるし、
変なカラム落ちのような表示不具合に対応できなくなってしまいます。
そもそも、やりたいように表示をさせられない時のジレンマは、エンジニアにとってのストレスそのものでしょう。
CSSを文字を書くように使えるようになるには、英語を話せるようになるのと同じように、
スタイルシート脳というのが必要なんですが、この方法については、別の機会に解説したいと思います。
もしかしたら、ゲーム内のコンテンツで解説できるといいかな?
0 件のコメント:
コメントを投稿