【初心者向け】CSS Flexboxの基本と「flex: 1」の使い方をわかりやすく解説
CSS Flexboxにおける「flex: 1」の意味
- flex-grow: 1:アイテムが余白をどれだけ割り当てるかを決定します。値が1の場合、アイテムは可能な限り余白を割り当てようとします。
- flex-shrink: 1:コンテナが縮小する場合にアイテムがどれだけ縮小されるかを決定します。値が1の場合、アイテムは他のアイテムと同様に縮小されます。
- flex-basis: 0:アイテムの初期サイズを決定します。値が0の場合、アイテムはコンテンツのサイズに基づいて初期化されます。
つまり、「flex: 1」を設定すると、以下のことが起こります。
- アイテムは、コンテナ内の利用可能なスペースを可能な限り均等に共有しようとします。
- コンテナが縮小されると、アイテムは他のアイテムと同様に縮小されます。
- アイテムの初期サイズは、コンテンツのサイズに基づきます。
例
以下のHTMLコードとCSSコードを見てみましょう。
<div class="container">
<div class="item">アイテム1</div>
<div class="item">アイテム2</div>
<div class="item">アイテム3</div>
</div>
.container {
display: flex;
}
.item {
flex: 1;
}
このコードでは、.container
要素はFlexboxコンテナとして設定され、.item
要素はFlexboxアイテムとして設定されます。「flex: 1」が設定されているため、.item
要素はコンテナ内の利用可能なスペースを可能な限り均等に共有することになります。
補足
- 「flex: 1」は、Flexboxアイテムのサイズと伸縮を制御するためのシンプルな方法ですが、より複雑なレイアウトを作成するには、他のFlexboxプロパティと併用する必要があります。
- Flexboxは、Webブラウザの古いバージョンではサポートされていない場合があります。古いバージョンをサポートする必要がある場合は、ベンダープレフィックス付きのFlexboxプロパティを使用する必要があります。
サンプルコード:Flexboxを使って要素を等間隔に並べる
HTMLコード
<div class="container">
<div class="item">アイテム1</div>
<div class="item">アイテム2</div>
<div class="item">アイテム3</div>
</div>
CSSコード
.container {
display: flex;
justify-content: space-around; /* アイテムを左右対称に配置 */
align-items: center; /* アイテムを垂直方向に中央揃え */
}
.item {
flex: 1; /* アイテムが余白を均等に共有 */
background-color: #ccc; /* 背景色を設定 */
padding: 10px; /* 余白を設定 */
text-align: center; /* テキストを中央揃え */
}
説明
.container
要素にdisplay: flex;
を設定することで、Flexboxコンテナとして設定します。.container
要素にjustify-content: space-around;
を設定することで、アイテムを左右対称に配置します。.container
要素にalign-items: center;
を設定することで、アイテムを垂直方向に中央揃えします。.item
要素にflex: 1;
を設定することで、アイテムが余白を均等に共有するようにします。.item
要素にbackground-color: #ccc;
を設定することで、背景色をグレーに設定します。.item
要素にpadding: 10px;
を設定することで、余白を10pxに設定します。.item
要素にtext-align: center;
を設定することで、テキストを中央揃えにします。
このコードを実行すると、以下のようになります。
アイテムは、コンテナ内の利用可能なスペースを均等に共有し、左右対称に配置され、垂直方向に中央揃えされています。
以下のコードは、Flexboxを使って様々なレイアウトを作成する方法を示しています。
Flexbox 以外で要素を等間隔に並べる方法
CSSグリッドレイアウトは、より強力で柔軟なレイアウトシステムです。Flexboxよりも多くの機能を備えており、複雑なレイアウトを作成するのに適しています。
<div class="container">
<div class="item">アイテム1</div>
<div class="item">アイテム2</div>
<div class="item">アイテム3</div>
</div>
.container {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 3つの列を作成 */
gap: 10px; /* アイテム間の隙間を10pxに設定 */
}
.item {
background-color: #ccc;
padding: 10px;
text-align: center;
}
calc()
関数を使用して、要素の幅を計算することもできます。
<div class="container">
<div class="item" style="width: calc(33.3333% - 20px)">アイテム1</div>
<div class="item" style="width: calc(33.3333% - 20px)">アイテム2</div>
<div class="item" style="width: calc(33.3333% - 20px)">アイテム3</div>
</div>
このコードでは、.item
要素の幅を33.3333%に設定し、左右に10pxの余白を設定しています。
display: table
プロパティを使用して、要素をテーブルセルとして配置することもできます。
<div class="container">
<div class="item">アイテム1</div>
<div class="item">アイテム2</div>
<div class="item">アイテム3</div>
</div>
.container {
display: table;
table-layout: fixed; /* 列幅を固定 */
width: 100%; /* コンテナの幅を100%に設定 */
}
.item {
display: table-cell;
background-color: #ccc;
padding: 10px;
text-align: center;
}
margin: auto
プロパティを使用して、要素を左右に中央揃えすることもできます。
<div class="container">
<div class="item">アイテム1</div>
<div class="item">アイテム2</div>
<div class="item">アイテム3</div>
</div>
.container {
display: flex;
}
.item {
flex: 1; /* アイテムが余白を均等に共有 */
background-color: #ccc;
padding: 10px;
text-align: center;
margin: auto 0; /* 左右に中央揃え、上下にオートマージン */
}
どの方法が最適かは、レイアウトの要件によって異なります。 Flexboxは、シンプルで使いやすいレイアウトに適しています。CSSグリッドレイアウトは、より複雑なレイアウトに適しています。calc()
関数、display: table
、margin: auto
は、特定の状況で役立つ場合があります。
css flexbox