CSSで横並びさせる方法
(2020-04-21 加筆)
float
- 並列させたい要素のスタイルに指定します
- 要素を回り込みさせることで並列にします
- 左寄せ、右寄せなど回り込みで横並びにさせます
<html>
<ul> <li>1番目の要素</li> <li>2番目の要素</li> <li>3番目の要素</li> </ul>
<CSS>
ul { overflow: hidden; } li { float: left; }
メリット
- ウィンドウの横幅によって自動でカラム落ちします。
デメリット
- 囲んでいるdiv要素に高さがなくなり、下の要素が上にきてしまうので、囲んでいるdiv要素にoverflow:hidden;を指定します。
- 並べたい要素の高さが異なる場合、要素にひっかかりうまく並びません。
フレックスボックス(フレキシブルボックス)
- 並列させたい要素のスタイルに指定すると、その直下の要素が並列になります
<HTML>
<ul> <li>1番目の要素</li> <li>2番目の要素</li> <li>3番目の要素</li> </ul>
<CSS>
ul { display: flex; } li { /* 左右の中央寄せ */ justify-content: center; /* 上下の中央寄せ */ align-items: center; /* 右下寄せ */ justify-content: flex-end; align-items: flex-end; /* 左右の均等配置(左右の隙間なし) */ justify-content: space-between; /* 左右の均等配置(左右隙間あり) */ justify-content: space-around; }
ナビゲーションをつくる
ナビゲーションなど、横幅を等分して左右にborderを設置した場合、borderの幅は別に加算されるので、カラム落ちします。その場合は、aに横幅を指定して、box-sizing: border-box;を記述するとボーダーが内側に入り、カラム落ちを防げます。
- ○成功
- ×カラム落ち
<html>
<ul class="nav"> <li><a href="#" class="home current">ホーム</a></li> <li><a href="spring/" class="spring">春</a></li> <li><a href="summer/" class="summer">夏</a></li> <li><a href="fall/" class="fall">秋</a></li> <li><a href="winter/" class="winter">冬</a></li> </ul>
float
<CSS>
.nav { overflow: hidden; } .nav li a { float: left; width: calc(960px / 5); height: 46px; padding: 12px 0; display: block; border-left: 1px solid #CCC; text-align: center; box-sizing: border-box;/*ボーダーを内側に入れてカラム落ちを防ぐ*/ }
display:inline
- 横並びはできますが、横幅、高さ、上下マージンの指定はできません。
- vertical-align: top/bottomを使用して上寄せ/下寄せを指定できます。
display:inline-block
- 並列させたい要素のスタイルに指定します
- 要素をインライン化(左寄せの場合に左詰め)することで並列します
- 横並びができ、横幅、高さ、上下マージンの指定ができます。ただしIE6、IE7が対応していません。
display:table
- 親要素にdisplay:table、子要素にdisplay:table-cell
- 中のテキスト量に関係なくカラムの高さが同じになります
- 上下中央揃えにできます
- インラインのような隙間はできません