--- title: 欄レイアウト slug: Web/CSS/Layout_cookbook/Column_layouts tags: - CSS - Layout - Multi-col - columns - cookbook - flexbox - grid translation_of: Web/CSS/Layout_cookbook/Column_layouts ---
多くの場合、いくつかの欄を含むレイアウトを作成する必要があります。 CSS にはこれを行うためのいくつかの方法があります。 グリッド、フレックスボックス、段組みのレイアウトのどれを使用するかは、達成しようとしている内容によって異なります。 このレシピでは、これらのオプションについて説明します。
欄(columns)で達成したいと思うかもしれないデザインパターンがいくつかあります。
要件を満たすためには、さまざまなレイアウト方法を選択する必要があります。
段組みレイアウト(multi-column layout、multicol)を使用して段を作成した場合、テキストは各段を順番に埋める連続したストリームのままです。 段はすべて同じサイズである必要があり、個々の段または個々の段のコンテンツをターゲットにすることはできません。
{{cssxref("column-gap")}} プロパティを使用して段間のギャップを制御したり、{{cssxref("column-rule")}} を使用して段間に線を追加したりできます。
{{EmbedGHLiveSample("css-examples/css-cookbook/columns-multicol.html", '100%', 720)}}
次の場合に段組みを使用してください。
フレックスボックス(flexbox)は、{{cssxref("flex-direction")}} を row
に設定することでコンテンツを列に分割するために使用できますが、フレックスボックスはフレックスコンテナ内の要素をターゲットにし、それぞれの直接の子を新しい列に配置します。 これは段組みで見たものとは異なる振る舞いです。
フレックス項目間に規則を追加する方法は現在ありません。 また、{{cssxref("column-gap")}} および {{cssxref("row-gap")}} プロパティに対するブラウザーのサポートは制限されています。 したがって、項目間にギャップを作成するには、マージンを使用します。
{{EmbedGHLiveSample("css-examples/css-cookbook/columns-flexbox.html", '100%', 720)}}
フレックスボックスを使用して、コンテナの {{cssxref("flex-wrap")}} プロパティを wrap
に設定することで、フレックス項目が新しい行に折り返されるレイアウトを作成することもできます。 これらの新しいフレックスラインは、そのラインに沿ってのみスペースを配分します — 以下の例に示すように、新しいラインの項目は上のラインの項目と整列しません。 これがフレックスボックスが一次元として記述されている理由です。 これは、行または列としてレイアウトを制御するために設計されていますが、同時に両方ではありません。
{{EmbedGHLiveSample("css-examples/css-cookbook/columns-flexbox-wrapping.html", '100%', 720)}}
次の場合にフレックスボックスを使用してください。
欲しいものが項目が行と列に並ぶレイアウトであるならば、CSS グリッドレイアウトを選ぶべきです。 グリッドレイアウトは、フレックスボックスがフレックスコンテナの直接の子に作用するのと同様の方法で、グリッドコンテナの直接の子に作用しますが、CSS グリッドでは、項目を行と列に並べることができます — これは2次元として記述されています。
{{EmbedGHLiveSample("css-examples/css-cookbook/columns-grid.html", '100%', 720)}}
次の場合にグリッドを使用してください。
さまざまなレイアウト方法が異なるブラウザーサポートを持っています。 使用されているプロパティの基本的なサポートの詳細については、以下の表を参照してください。
{{Compat("css.properties.column-width")}}
{{Compat("css.properties.column-rule")}}
{{Compat("css.properties.flex")}}
{{Compat("css.properties.flex-wrap")}}
{{Compat("css.properties.grid-template-columns")}}