10.1 簡単なグリッド
Flexboxは柔軟で適応性のあるレイアウトを作るのに便利だよ。ここでは、Flexboxを使ったレイアウトのいくつかの例を見ていくよ。簡単なグリッド、要素のセンタリング、ナビゲーションメニュー、商品カードの作り方とかね。
Flexboxを使った簡単なグリッドの作り方。この例では、コンテナ内で均等に配置された要素をどのように簡単に作成できるかを示しているよ。
使用例:
CSS
.flex-container {
display: flex;
flex-wrap: wrap; /* 要素を新しい行に折り返し可能にする */
background-color: lightgrey;
padding: 10px;
}
.flex-item {
background-color: deepskyblue;
margin: 10px;
padding: 20px;
color: white;
font-size: 20px;
flex: 1 1 calc(33.333% - 40px); /* スペースの柔軟な分配 */
box-sizing: border-box;
}
HTML
<div class="flex-container">
<div class="flex-item">Item 1</div>
<div class="flex-item">Item 2</div>
<div class="flex-item">Item 3</div>
<div class="flex-item">Item 4</div>
<div class="flex-item">Item 5</div>
<div class="flex-item">Item 6</div>
</div>
flex-basis: calc(33.333% - 40px):
要素の初期サイズを、伸縮が適用される前に決める。ここでは、要素はコンテナの幅の33.333%を占有し、40ピクセル引いたサイズになる。calc()
はCSSで直接計算を行えるんだ。
10.2 要素のセンタリング
Flexboxを使って、コンテナ内で要素を水平・垂直にセンタリングする方法。
使用例:
CSS
.flex-container {
display: flex;
justify-content: center; /* 水平方向の中央揃え */
align-items: center; /* 垂直方向の中央揃え */
height: 100vh; /* コンテナの高さを画面いっぱいに */
background-color: lightgrey;
}
.flex-item {
background-color: deepskyblue;
padding: 20px;
color: white;
font-size: 20px;
}
HTML
<div class="flex-container">
<div class="flex-item">Centered Item</div>
</div>
10.3 ナビゲーションメニュー
Flexboxを使った水平ナビゲーションメニューの作り方。
使用例:
CSS
.nav-container {
display: flex;
justify-content: space-around; /* 均等なスペースで要素を配置 */
background-color: #333;
padding: 10px;
}
.nav-item {
color: white;
text-decoration: none;
padding: 10px 20px;
}
.nav-item:hover {
background-color: #575757;
}
HTML
<div class="nav-container">
<a href="#" class="nav-item">Home</a>
<a href="#" class="nav-item">About</a>
<a href="#" class="nav-item">Services</a>
<a href="#" class="nav-item">Contact</a>
</div>
10.4 商品カード
Flexboxを使った商品カードのレイアウトを作ろう。
使用例:
CSS
.product-list {
display: flex;
flex-wrap: wrap;
gap: 20px;
padding: 20px;
}
.product-item {
flex: 1 1 calc(33.333% - 40px);
border: 1px solid #ccc;
padding: 20px;
background-color: #fff;
text-align: center;
}
.product-item img {
max-width: 100%;
height: auto;
}
.product-title {
font-size: 1.2em;
margin: 10px 0;
}
.product-price {
font-size: 1.5em;
color: #e74c3c;
}
HTML
<div class="product-list">
<div class="product-item">
<img src="https://via.placeholder.com/150" alt="Product Image">
<h3 class="product-title">商品 1</h3>
<p class="product-price">$99.99</p>
</div>
<div class="product-item">
<img src="https://via.placeholder.com/150" alt="Product Image">
<h3 class="product-title">商品 2</h3>
<p class="product-price">$79.99</p>
</div>
<div class="product-item">
<img src="https://via.placeholder.com/150" alt="Product Image">
<h3 class="product-title">商品 3</h3>
<p class="product-price">$89.99</p>
</div>
</div>
コード説明:
.product-list
: 改行をサポートし、商品カード間にスペースがあるFlexコンテナ.product-item
: 一定の幅を持ち、コンテナのサイズに合わせて自動調整されるFlex要素(商品カード)
GO TO FULL VERSION