ホームページ > ウェブフロントエンド > CSSチュートリアル > Flexbox をシンプルに: CSS で柔軟なレイアウトを作成

Flexbox をシンプルに: CSS で柔軟なレイアウトを作成

Susan Sarandon
リリース: 2024-12-21 04:39:18
オリジナル
659 人が閲覧しました

フレックスボックスとは何ですか?

Flexbox は、レスポンシブで柔軟なレイアウトをこれまでより簡単に作成できる強力な CSS ツールです。要素の位置合わせ、間隔の管理、さまざまな画面サイズに合わせたレイアウトの調整などのタスクが簡素化されます。

このブログでは、Flexbox の基本を説明し、そのプロパティがどのように機能するかを説明し、プロジェクトで使用できる実践的な例を提供します。最終的には、どのデバイスでも見栄えの良いレイアウトを作成するスキルが身につくでしょう。始めましょう!

フレックスボックス、グリッド、フロート: 簡単な比較

CSS を使用してレイアウトを作成する場合、選択できる方法がいくつかあり、それぞれに長所があります。 FlexboxGrid、および Float がそれぞれどのように異なるかを見てみましょう。

フレックスボックス: 柔軟かつ 1 次元

Flexbox は 1 次元レイアウト用に設計されています。要素を行または列に配置する必要がある場合に最適に機能し、ナビゲーション バー、中央揃えのコンテンツ、フォーム要素などの単純なレイアウトに最適です。

強み:

  • スペースの配置と配分に簡単に使用できます。
  • レスポンシブデザインに最適です。
  • 動的コンテンツを適切に処理します。

いつ使用するか:

  • 要素を単一方向 (行または列) に整列および分散します。
  • 利用可能なスペースに基づいて要素を自動的に調整したい場合。

グリッド: 2 次元レイアウトに強力

グリッド は、行と列の両方を作成できる、より強力なレイアウト ツールです。一度に 1 つのディメンションのみを処理する Flexbox とは異なり、グリッドは、複数列のデザインやページ全体のレイアウトなどの複雑なレイアウトの作成に最適です。

強み:

  • 行と列の両方で機能します。
  • 複数の要素を含む複雑なレイアウトに最適です。
  • 要素の配置とサイズをより細かく制御できます。

いつ使用するか:

  • フルページのグリッドや複数列のデザインなど、複雑なページ レイアウトを作成する場合。
  • 両方の次元を正確に制御する必要がある場合。

フロート: オールドスクールおよびリミテッド

Float はもともとテキストの折り返しとレイアウトの目的で使用されていましたが、現在では一般的なレイアウト タスクでは時代遅れとみなされています。レイアウトを作成できますが、多くの場合、フロートをクリアして間隔を管理するために追加の作業が必要になります。

強み:

  • 画像の周囲にテキストを折り返すなど、特定のタスクに簡単に使用できます。
  • すべてのブラウザでサポートされています。

いつ使用するか:

  • 画像の周りにテキストを折り返すなど、レイアウトの小さな調整用。
  • 複雑なレイアウトやレスポンシブデザインには推奨されません。

注:

  • フレックスボックスは、よりシンプルな 1 次元のレイアウトに最適で、アイテムをすばやく柔軟に配置する方法を提供します。
  • グリッド は 2 次元レイアウトに適しており、複雑なデザインをより詳細に制御できます
  • Float は最新のレイアウトでは時代遅れであるため、Flexbox または Grid を優先して使用しないでください。

Flexbox の基本: 主要なプロパティと軸の説明

Flexbox を使い始めるには、その動作を定義するコア プロパティを理解することが不可欠です。ここでは、最も重要な Flexbox プロパティを取り上げ、それらがどのように連携して柔軟なレイアウトを作成するかについて説明します。

1.表示: フレックス

display: flex プロパティは、Flexbox レイアウトの基礎です。このプロパティをコンテナに適用すると、コンテナがフレックス コンテナに変わり、その子要素がフレックス アイテムになります。これにより、Flexbox が提供するすべての強力な配置プロパティとレイアウト プロパティを使用できるようになります。

  • 仕組み:
.container {
  display: flex;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  • 効果: これにより、コンテナがフレックス コンテナになり、その直接の子はすべて、配置と配布の Flexbox ルールに従うフレックス アイテムになります。

2.フレックス方向

flex-direction プロパティは、flex 項目が配置される方向を定義します。 4 つの値のいずれかを指定できます:

  • 行 (デフォルト): 項目は水平方向 (左から右) に配置されます。
  • 列: アイテムは縦方向 (上から下) に配置されます。
  • row-reverse: 項目は水平方向に逆順に配置されます。
  • column-reverse: 項目は垂直方向に配置されますが、順序は逆になります。

例:

.container {
  display: flex;
  flex-direction: column;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

3. justify-content

justify-content プロパティは、フレックス項目を主軸 (flex-direction で設定された方向) に沿って配置します。アイテムの間や周囲のスペースを分散するのに役立ちます。

  • 値:
    • flex-start: アイテムをコンテナーの先頭に揃えます。
    • flex-end: 項目をコンテナの最後に揃えます。
    • center: アイテムを中央に配置します。
    • space-between: アイテム間に等しいスペースをあけてアイテムを配置します。
    • space-around: アイテムの周囲に均等なスペースをあけてアイテムを配置します。

例:

.container {
  display: flex;
  justify-content: center;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

4. align-items
align-items プロパティは、フレックス項目を交差軸 (主軸に垂直) に沿って配置します。フレックス方向が行の場合は項目の配置を垂直方向に、方向が列の場合は水平方向に配置を制御します。

  • 値:
    • flex-start: 項目を交差軸の開始位置に揃えます。
    • flex-end: 項目を交差軸の端に揃えます。
    • center: 項目を十字軸の中心に揃えます。
    • ストレッチ: コンテナを満たすようにアイテムを引き伸ばします (デフォルトの動作)。
    • ベースライン: アイテムをベースラインに沿って配置します。

例:

.container {
  display: flex;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

主軸と交差軸を理解する

  • 主軸は、Flexbox が項目を配置する主軸です。 flex-direction の値に応じて、水平 (行) または垂直 (列) になります。
  • 交差軸は主軸に対して垂直です。主軸が水平 (行) の場合、交差軸は垂直になります。主軸が縦(列)の場合、横軸は横になります。

flex-direction: row の場合、メイン軸は水平、クロス軸は垂直になります。

flex-direction: 列の場合、メイン軸は垂直、クロス軸は水平になります。

フレックスボックスの例: 作成できるシンプルなレイアウト

Flexbox の基本を説明したので、実際にどのように機能するかを簡単な例で見てみましょう。

1.要素をセンタリング
Flexbox を使用すると、要素を水平方向と垂直方向の両方で簡単にセンタリングできます。

HTML:

.container {
  display: flex;
  flex-direction: column;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

結果:

2.シンプルなナビゲーション バーの作成
Flexbox は、水平ナビゲーション バーの作成に最適です。

HTML:

.container {
  display: flex;
  justify-content: center;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

結果:

3.シンプルなレスポンシブ グリッドの構築
Flexbox を使用すると、メディア クエリを必要とせずに、単純な応答性の高いグリッドを作成することもできます。

HTML:

.container {
  display: flex;
  align-items: center;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

結果:

これらの例は、Flexbox で作成できる強力なレイアウトのほんの一部を示しています。慣れてきたら、これらのテクニックを組み合わせて、より複雑なデザインを構築できます。

高度な Flexbox テクニック: ネストされたコンテナー、順序、およびフレックスラップ

このセクションでは、ネストされたコンテナーオーダーフレックスラップなど、

さらに高度な Flexbox 機能について説明します。これらのテクニックにより、レイアウトをより細かく制御できるようになり、複雑なデザインが可能になります。

1.ネストされたフレックスコンテナ

場合によっては、レイアウト内にレイアウトを作成することが必要になる場合があります。 Flexbox を使用すると、フレックス コンテナを相互にネストしてより詳細に制御できます。

HTML:

.container {
  display: flex;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

結果:

この例では、.outer-container はフレックス コンテナであり、その中に 2 つのネストされた .inner-container フレックス コンテナがあります。これにより、メインのフレックス コンテナ内でより複雑なレイアウトを構築できるようになります。

2. order を使用してアイテムの順序を変更する

フレックスボックスでは、order プロパティを使用して項目の順序を制御できます。デフォルトでは、すべての項目は HTML の位置に基づいて並べられます。ただし、順序を使用すると、HTML を変更せずに視覚的な順序を変更できます。

HTML:

.container {
  display: flex;
  flex-direction: column;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

結果:

この例では、HTML 内での項目の位置が 1-2-3 であっても、項目の順序を変更します。 order プロパティを使用すると、項目を視覚的に並べ替えることができます。

3. flex-wrap を使用して項目をラップできるようにする

flex-wrap プロパティを使用すると、十分なスペースがない場合に flex 項目を複数行に折り返すことができます。これは、アイテムをさまざまな画面サイズに合わせて調整する必要があるレスポンシブ レイアウトの場合に特に便利です。

HTML:

.container {
  display: flex;
  justify-content: center;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

結果:

この例では、flex-wrap:wrap プロパティにより、十分なスペースがない場合に項目を次の行に折り返すことができるため、レスポンシブなレイアウトを作成するための優れたツールとなります。

注:

  • ネストされた Flex コンテナ: レイアウトをさらに制御するには、他の Flex コンテナ内で Flexbox を使用します。
  • 順序: HTML 構造を変更せずに、項目の視覚的な順序を変更します。
  • Flex-Wrap: 項目を新しい行に折り返すことができ、レスポンシブなレイアウトに役立ちます。

これらの高度なテクニックにより、Flexbox でレイアウトを構築する際の柔軟性と制御性がさらに高まります。

Flexbox でよくある間違いとその回避方法

Flexbox は強力ですが、よくある落とし穴によって予期せぬ結果が生じる可能性があります。ここでは、遭遇する可能性のあるいくつかの間違いと、それらを回避するためのヒントを示します:

1.意図しないオーバーフロー

問題:
Flex アイテムのコンテンツが期待どおりに縮小しない場合、コンテナからオーバーフローする可能性があります。

例:

.container {
  display: flex;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この例では、長いテキストによってレイアウトがコンテナの外に押し出されます。

修正:
flex-shrink プロパティを使用するか、overflow: hidden; を追加します。またはワードラップ: ブレークワード;.

.container {
  display: flex;
  flex-direction: column;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

2.デフォルトのマージンを考慮しない

問題:
ブラウザは多くの場合、

のような要素にデフォルトのマージンを適用します。または

を使用すると、Flexbox の位置合わせが中断される可能性があります。

例:

.container {
  display: flex;
  justify-content: center;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

デフォルトの余白により間隔が不均等になり、レイアウトのバランスが崩れて見えることがあります。

修正:
CSS リセットでマージンをリセットするか、要素のマージンを明示的に設定します。

.container {
  display: flex;
  align-items: center;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

3. flex の使用: 1 動作を理解せずに使用する

問題:
flex: 1 を設定すると、アイテムは均等に拡大および縮小します。これにより、あるアイテムのコンテンツが他のアイテムよりも大幅に大きい場合、予期しない結果が生じる可能性があります。

修正:
拡張値、縮小値、および基準値を指定して、フレックス プロパティを微調整します。例:

<div>



<p><strong>CSS:</strong><br>
</p>

<pre class="brush:php;toolbar:false">.container {
  display: flex;
  justify-content: center;  /* Horizontally center */
  align-items: center;      /* Vertically center */
  height: 100vh;            /* Full viewport height */
}
ログイン後にコピー
ログイン後にコピー

4. align-items と justify-content

の誤解

問題:
align-items (交差軸を制御) と justify-content (主軸を制御) を混同すると、レイアウトが期待どおりに動作しない可能性があります。

修正:
常に覚えておいてください:

  • justify-content: 水平方向の配置 (行の主軸)。
  • align-items: 垂直方向の配置 (行内の交差軸)。

5.レスポンシブ レイアウトのフレックスラップを忘れる

問題:
デフォルトでは、Flexbox はアイテムをラップしないため、小さな画面ではアイテムが過度に縮小する可能性があります。

修正:
flex-wrap を追加します。十分なスペースがない場合に項目が次の行に移動するようにします。

.container {
  display: flex;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

注:
これらのよくある間違いを回避することで、柔軟性と視覚的に魅力的なレイアウトを作成することができます。 Flexbox の強力な機能を最大限に活用するには、次のヒントを念頭に置いてください!

Flexbox の実世界のアプリケーション

Flexbox は、柔軟性と応答性が不可欠なシナリオで威力を発揮します。 Flexbox が最も有益であることが証明されているいくつかの実際的なアプリケーションを次に示します。

1.レスポンシブ レイアウトの作成
Flexbox を使用すると、さまざまな画面サイズにシームレスに適応するレイアウトを設計するプロセスが簡素化されます。モバイルファーストのデザインであっても、デスクトップ中心のレイアウトであっても、Flexbox を使用すると位置合わせや間隔を簡単に設定できます。

  • 例: Flexbox とメディア クエリを組み合わせて、モバイルの 2 列からデスクトップの 4 列に調整する製品グリッドを構築します。
.container {
  display: flex;
  flex-direction: column;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

2.動的コンテンツの処理
Flexbox を使用すると、コンテンツのサイズが固定されていないレイアウトを簡単に管理できます。アイテムはデザインを損なうことなく、スペースに合わせて自動的に調整されます。

: さまざまなタイトルと説明を含むブログ投稿のリストを表示し、コンテンツの長さに関係なく均等に配置されるようにします。

.container {
  display: flex;
  justify-content: center;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

3.ナビゲーション バーの構築
Flexbox は、水平方向に整列し、要素を均等に配置するナビゲーション バーを作成するのに最適です。アイテムをラップすることで、ナビゲーションを小さな画面に適応させることもできます。

.container {
  display: flex;
  align-items: center;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

4.コンテンツを中央に配置
Flexbox を使用すると、コンテンツをページ上で (垂直方向と水平方向の両方で) 中央に簡単に配置できます。これは、スプラッシュ スクリーン、モーダル、またはヒーロー セクションに特に役立ちます。

<div>



<p><strong>CSS:</strong><br>
</p>

<pre class="brush:php;toolbar:false">.container {
  display: flex;
  justify-content: center;  /* Horizontally center */
  align-items: center;      /* Vertically center */
  height: 100vh;            /* Full viewport height */
}
ログイン後にコピー
ログイン後にコピー

5.同じ高さのカードを作成する
多くのデザインでは、コンテンツの長さに関係なく、カードなどの要素の高さを同じにする必要があります。 Flexbox を使用すると、追加のハックをしなくても、一貫した高さと位置合わせが保証されます。

<nav>



<p><strong>CSS:</strong><br>
</p>

<pre class="brush:php;toolbar:false">.navbar {
  display: flex;
  justify-content: space-around;  /* Evenly spaces the links */
  background-color: #333;
}

.navbar a {
  color: white;
  padding: 10px 20px;
  text-decoration: none;
}
ログイン後にコピー

注:
Flexbox は、レスポンシブで動的なレイアウトを作成し、さまざまなコンテンツ サイズを処理し、配置を簡素化するための頼りになるソリューションです。モバイル向けでもデスクトップ向けでも、Flexbox を使用すると、レイアウトが機能的で視覚的に魅力的であることが保証されます。

ビジュアルとコード

Flexbox の概念を理解しやすくするために、図、ライブ コード例、構文を強調表示したコード スニペットを含めます。視覚的な補助とインタラクティブな例により、重要なアイデアを効果的に理解できます。

1.図で軸を理解する
Flexbox は 2 つの軸を使用します:

  • 主軸: フレックス項目が配置される方向。
  • 交差軸: 主軸に対する垂直方向。

視覚的表現は次のとおりです:
Flexbox Made Simple: Create Flexible Layouts with CSS

2.インタラクティブな例

例 1: 項目を中央に配置する
この CodePen の例は、項目を垂直方向と水平方向の両方で中央揃えする方法を示しています:

3.構文の強調表示による位置合わせの図解

例 2: フレックス項目の配置
align-items プロパティを使用して、交差軸の垂直方向の配置を制御します。

.container {
  display: flex;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

4.ネストされたコンテナのライブデモ
ネストされた Flexbox コンテナーは、高度なレイアウトをデモンストレーションできます。この Codepen の例を確認してください:

読者へのヒント

  1. コードの実験: ライブ サンプルはインタラクティブです。プロパティを調整してリアルタイムで変化を観察します。
  2. ビジュアル ツールを使用する: Flexbox Froggy のような Web サイトは、Flexbox の概念を楽しく練習する方法を提供します。
  3. 構文の強調表示を追加: Dev.to エディターや Markdown エディターなどのプラットフォームは、コードを自動的にフォーマットして読みやすくします。

注:
視覚的な補助、実際の例、構文を強調表示したスニペットにより、Flexbox の学習がよりインタラクティブで魅力的になります。提供されているリンクと図を参照して理解を深めてください。

アクセシビリティ

Flexbox は、視覚的に魅力的なレイアウトを作成するための単なるツールではありません。正しく使用すると、Web アクセシビリティの向上にも役立ちます。アクセシブルなレイアウトにより、障害のある人を含むすべての人が Web サイトを使用できるようになります。

Flexbox がアクセシビリティを強化する方法

1. Flexbox を使用したセマンティック HTML
Flexbox は、

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート