マクロ レイアウトは、ページ全体にわたるインターフェースの大きな構成を記述します。
レイアウトを適用する前に コンテンツの流れに間違いがないか確認しましょう この 1 列のデフォルトの順序が、小さい画面で取得されます。
<body>
<header>…</header>
<main>
<article>…</article>
<aside>…</aside>
</main>
<footer>…</footer>
</body>
これらの個々のページレベルのコンポーネントを配置すると、ページの概要であるマクロ レイアウトを設計できます。メディアクエリを使用すると、このビューをさまざまな画面サイズに合わせて調整する方法を表すルールを CSS で指定できます。
グリッド
CSS グリッドは、ページにレイアウトを適用するための優れたツールです。 上記の例では、画面の幅が十分に確保されたら 2 列のレイアウトにしたい場合を考えてみましょう。ブラウザの幅が十分に広くなったらこの 2 列レイアウトを適用するには、メディアクエリを使用して、指定したブレークポイントより上のグリッドスタイルを定義します。
@media (min-width: 45em) {
main {
display: grid;
grid-template-columns: 2fr 1fr;
}
}
Flexbox
この特定のレイアウトでは、flexbox も使用できます。 スタイルは次のようになります。
@media (min-width: 45em) {
main {
display: flex;
flex-direction: row;
}
main article {
flex: 2;
}
main aside {
flex: 1;
}
}
ただし、Flexbox バージョンでは、より多くの CSS が必要になります。各列には、占有するスペースを記述する個別のルールがあります。グリッドの例では、同じ情報が、要素を含む 1 つのルールにカプセル化されています。
メディア クエリが必要ですか?
必ずしもメディアクエリを使用する必要はありません。 メディアクエリは、一部の要素だけに変更を適用する場合や、 しかし、レイアウトを頻繁に更新する必要がある場合、メディアクエリは多くのブレークポイントで手に負えなくなります。
多くのカード コンポーネントが掲載されているページがあるとします。
カードの幅は 15em
を超えることはなく、1 行に収まるだけ多くのカードを配置します。たとえば、30em
、45em
、60em
というブレークポイントでメディアクエリを記述できます。
かなり面倒でメンテナンスが困難です
代わりに、カード自体が自動的に適切なスペースを占めるようにルールを適用できます。
.cards {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(15em, 1fr));
grid-gap: 1em;
}
同様のレイアウトは flexbox でも実現できます。この場合 最後の行にカードが足りない場合は 残りのカードは列に合わせて並べられるのではなく、利用可能なスペースいっぱいに引き伸ばされます。 行と列を並べる場合はグリッドを使用します。
.cards {
display: flex;
flex-direction: row;
flex-wrap: wrap;
gap: 1em;
}
.cards .card {
flex-basis: 15em;
flex-grow: 1;
}
Flexbox またはグリッドでスマートルールを適用すると、メディアクエリを使用せずに、最小限の CSS で動的マクロ レイアウトを設計できます。計算はブラウザが行うため、作業量を減らすことができます。メディアクエリを必要とせずに柔軟な最新の CSS レイアウトの例については、1linelayouts.com をご覧ください。
理解度を確認する
マクロ レイアウトに関する知識をテストします。
マクロのレイアウトの説明として最も適切な文は次のうちどれですか。
マクロ レイアウトでは、さまざまな画面サイズに適応するために常にメディアクエリが使用されますか?
ページレベルのマクロ レイアウトに関するアイデアがわかったところで、 ページ内のコンポーネントに注目してくださいここが、 マイクロ レイアウト: