CSSでレスポンシブ対応の価格表を作成する方法【サンプルコード付き】
CSSを使えば、画面サイズに応じてレイアウトが自動的に切り替わるレスポンシブ対応の価格表(料金テーブル)を簡単に作成できます。本記事では、メディアクエリとfloatレイアウトを組み合わせた実装方法を、実際に動作するサンプルコードとともに分かりやすく解説します。
レスポンシブ価格表のサンプルコード
以下は、無料プランと上位プランの2つの価格表を並べて表示し、画面幅が狭くなると自動的に縦積みレイアウトへ切り替わる完全なHTML・CSSコードです。
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<style>
* {
box-sizing: border-box;
}
body {
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
}
.compareFields {
float: left;
width: 50%;
padding: 8px;
}
li {
font-size: 18px;
font-weight: 500;
}
.pricing {
list-style-type: none;
border: 1px solid #eee;
margin: 0;
padding: 0;
-webkit-transition: 0.3s;
transition: 0.3s;
}
.pricing:hover {
box-shadow: 0 8px 12px 0 rgba(0, 0, 0, 0.2);
}
.pricing .header {
background-color: rgb(52, 31, 129);
color: white;
font-size: 25px;
}
.pricing li {
border-bottom: 1px solid #eee;
padding: 20px;
text-align: center;
}
.button {
border: none;
color: white;
padding: 10px 25px;
text-align: center;
text-decoration: none;
font-size: 18px;
}
@media only screen and (max-width: 600px) {
.compareFields {
width: 100%;
}
}
</style>
</head>
<body>
<h1 style="text-align:center">Responsive Pricing Tables Example</h1>
<div class="compareFields">
<ul class="pricing">
<li class="header">Free Membership</li>
<li>20 messages</li>
<li>No customer Support</li>
<li>98% uptime</li>
<li>1GB per day</li>
<li>50GB storage</li>
<li>
<a href="#" class="button" style="background-color: rgb(52, 31, 129);">Register</a>
</li>
</ul>
</div>
<div class="compareFields">
<ul class="pricing">
<li class="header" style="background-color:rgb(250, 136, 59)">
Advanced Membership
</li>
<li>100 messages</li>
<li>24 * 7 customer support</li>
<li>99.9% uptime</li>
<li>8GB per day</li>
<li>150GB storage</li>
<li>
<a href="#" class="button" style="background-color:rgb(250, 136, 59)">Register</a>
</li>
</ul>
<div>
</body>
</html>表示結果
上記のコードをブラウザで開くと、2つの価格表が横並びで表示されます。

続いて、画面幅を600px以下に縮小してみましょう。

メディアクエリが機能し、2つの価格表が縦に1列で並ぶレイアウトへと自動的に切り替わることが確認できます。
コードのポイント解説
1. メディアクエリによるレスポンシブ切り替え
この実装の核となるのが @media only screen and (max-width: 600px) の部分です。画面幅が600px以下の場合に .compareFields の幅を 50% から 100% へ変更することで、スマートフォンなどの狭い画面では価格表が縦積みになります。
2. box-sizing: border-box でレイアウトを安定させる
* { box-sizing: border-box; } を指定することで、paddingやborderを含めた状態で要素の幅が計算されるため、意図しないはみ出しや崩れを防げます。
3. ホバー時の影で視覚的な魅力をアップ
.pricing:hover に box-shadow を設定し、transition: 0.3s で滑らかなアニメーションを加えています。マウスオーバーした価格表が浮き上がって見えるため、ユーザーの注目を集めやすくなります。
4. ビューポート設定を忘れずに
<meta name="viewport" ...> タグがないと、モバイル端末でメディアクエリが正しく機能しません。レスポンシブデザインでは必須の設定なので、必ずhead内に記述しましょう。
まとめ
floatとメディアクエリを組み合わせるだけで、CSSのみで手軽にレスポンシブな価格表を作成できます。より現代的な実装を目指す場合は、FlexboxやCSS Gridを使うことで、より柔軟で保守性の高いレイアウトも可能です。ぜひ自分のサイトのデザインに合わせてカスタマイズしてみてください。
-
CSSでレスポンシブなブログレイアウトを作成する方法【完全なコード例付き】
CSSを使ってレスポンシブなブログレイアウトを作成するには、viewportメタタグの設定と、デバイスの画面幅に応じて柔軟に調整されるレイアウト構造の定義がポイントになります。以下に、ナビゲーションバー・ブログ本文・サイドリンク・フッターを備えた、ブログサイトの完全なコード例を紹介します。 コード例 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1" /> <
-
CSSでレスポンシブなカラムカードを作成する方法【コード例付きで解説】
CSSを使えば、画面サイズに応じてレイアウトが自動的に切り替わるレスポンシブなカラムカードを簡単に作成できます。本記事では、floatとcalc()、そしてメディアクエリを組み合わせた基本的な実装方法を、実際に動作するサンプルコードとともにわかりやすく解説します。 レスポンシブカラムカードの仕組み この手法のポイントは、主に以下の3つです。 calc(25% - 20px):4枚のカードを横並びにするため、各カードの幅を「全体の25%からマージン分を引いた値」として計算しています。 float: left:カードを左に回り込ませることで、横一列に並べています。 @mediaクエリ:画面幅が