CSSのみで横並びの要素の高さを揃える

JavaScriptを使わずCSSのみで横並びの要素の高さを揃えるには、以下の方法で可能です。

フレキシブル・レイアウトを使用する

フレキシブル・レイアウトを使用します。
この指定が一番楽で柔軟な実装方法ですが、古いバージョンのブラウザの一部が対応していませんので注意が必要です。

【HTML】

【CSS】

サンプル

  • テスト
  • テストテストテストテストテストテストテストテスト
  • テストテストテストテスト
  • テストテスト
  • テスト
  • テストテストテストテストテストテストテスト
  • テストテストテストテスト
  • テストテスト
  • テスト

グリッド・レイアウトを使用する

グリッド・レイアウトを使用します。
この指定が一番楽で柔軟な実装方法ですが、古いバージョンのブラウザの一部が対応していませんので注意が必要です。

  • ※ 対応ブラウザは次を参照
    グリッドレイアウトの基本
  • ※ IE10~IE11、Edgeはgrid-columnプロパティ、grid-rowプロパティを指定する必要がある。

【HTML】

【CSS】

サンプル

  • テスト
  • テストテストテストテストテストテストテストテスト
  • テストテストテストテスト
  • テストテスト
  • テスト
  • テストテストテストテストテストテストテスト
  • テストテストテストテスト
  • テストテスト
  • テスト

最大の行数を固定とする

高さを揃える要素にheightプロパティをemなどの相対単位で指定します。
内部の要素がはみ出る場合は、overflow:hidden;を指定します。

  • ※ IE7以下対応
  • ※ 背景などの装飾やborderプロパティも揃う
  • ※ 行数分の高さ固定により文字拡大などで指定行数分以外の変化に非対応

【HTML】

【CSS】

サンプル

  • テスト
  • テストテストテストテストテストテストテストテスト
  • テストテストテストテスト
  • テストテスト
  • テスト
  • テストテストテストテストテストテストテスト
  • テストテストテストテスト
  • テストテスト
  • テスト

table-cellを使用する

高さを揃える要素にdisplay:table-cell;を指定します。

  • ※ IE7以下非対応(ハックによる対応)
  • ※ 背景などの装飾やborderプロパティも揃う
  • ※ 行ごとに親要素を分ける必要あり(下記例でいうul要素にあたる)
  • ※ テーブルのセルとして扱うため、marginなどが非対応
    (border-spacingなどで余白を付け、親要素のmarginで打ち消すなどをすることで、セル間の余白を調整することは可能)

【HTML】

【CSS】

サンプル

  • テスト
  • テストテストテストテストテストテストテストテスト
  • テストテストテストテスト
  • テストテスト
  • テスト
  • テストテストテストテストテストテストテスト
  • テストテストテストテスト
  • テストテスト
  • テスト

inline-blockを使用する

高さを揃える要素にdisplay:inline-block;を指定します。
IE7以下ではinline-blockに対応していませんので、ハックを使用して代わりにinlineを指定します。
なお、実際は高さが揃うのではなく、要素の位置がおかしくならないようになるだけですので、borderなど装飾類は揃いません。
また、マークアップでインデントを使用すると(inline-blockなので)余白が含まれてしまうので、インデントをしないマークアップにする必要があります。

  • ※ IE7以下対応(ハック使用)
  • ※ 揃える要素のマークアップのインデントが付けられない

【HTML】

【CSS】

サンプル

  • テスト
  • テストテストテストテストテストテストテストテスト
  • テストテストテストテスト
  • テストテスト
  • テスト
  • テストテストテストテストテストテストテスト
  • テストテストテストテスト
  • テストテスト

ネガティブmarginを使用する

高さを揃える要素にmarginの下方向に-32768px、paddingの下方向に32768pxを指定します。
要素が突き抜けるので、overflow:hidden;を指定します。

32768pxという数値は、ブラウザの認識できる最大の高さで、32768pxを高さを超える数値を指定してもブラウザは32768pxとして割り当てます。

  • ※ IE7以下対応
  • ※ 行ごとに親要素を分ける必要あり(下記例でいうul要素にあたる)
  • ※ 背景などの装飾やborderプロパティは揃えられない

【HTML】

【CSS】

サンプル

  • テスト
  • テストテストテストテストテストテストテストテスト
  • テストテストテストテスト
  • テストテスト
  • テスト
  • テストテストテストテストテストテストテスト
  • テストテストテストテスト
  • テストテスト
  • テスト