CSS
 Computer >> コンピューター >  >> プログラミング >> CSS

CSSでレスポンシブ対応のチェックアウトフォームを作成する方法


CSSを使用してレスポンシブ対応のチェックアウトフォームを作成するには、Flexboxレイアウトメディアクエリを組み合わせるのが効果的です。以下に、請求先住所・支払い情報の入力欄とカート内容を横並びで表示し、画面幅が800px以下になると自動的に縦積みレイアウトへ切り替わるチェックアウトフォームのサンプルコードを紹介します。

コード例

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style>
body {
    font-family: Arial;
    font-size: 17px;
    padding: 8px;
}
* {
    box-sizing: border-box;
}
.Fields {
    display: flex;
    flex-wrap: wrap;
    padding: 20px;
    justify-content: space-around;
}
.Fields div {
    margin-right: 10px;
}
label {
    margin: 15px;
}
.formContainer {
    margin: 10px;
    background-color: #efffc9;
    padding: 5px 20px 15px 20px;
    border: 1px solid rgb(191, 246, 250);
    border-radius: 3px;
}
input[type="text"] {
    display: inline-block;
    width: 100%;
    margin-bottom: 20px;
    padding: 12px;
    border: 1px solid #ccc;
    border-radius: 3px;
}
label {
    margin-left: 20px;
    display: block;
}
.icon-formContainer {
    margin-bottom: 20px;
    padding: 7px 0;
    font-size: 24px;
}
.checkout {
    background-color: #4caf50;
    color: white;
    padding: 12px;
    margin: 10px 0;
    border: none;
    width: 100%;
    border-radius: 3px;
    cursor: pointer;
    font-size: 17px;
}
.checkout:hover {
    background-color: #45a049;
}
a {
    color: black;
}
span.price {
    float: right;
    color: grey;
}
@media (max-width: 800px) {
.Fields {
    flex-direction: column-reverse;
}
}
</style>
</head>
<body>
<h1 style="text-align: center;">Responsive Checkout Form</h1>
<div class="Fields">
<div>
<div class="formContainer">
<form>
<div class="Fields">
<div>
<h3>Billing Address</h3>
<label for="fname">Full Name</label>
<input type="text" id="fname" name="firstname" />
<label for="email"> Email</label>
<input type="text" id="email" name="email" />
<label for="adr"> Address</label>
<input type="text" id="adr" name="address" />
</div>
<div>
<h3>Payment</h3>
<label for="cname">Name on Card</label>
<input type="text" id="cname" name="cardname" />
<label for="ccnum">Credit card number</label>
<input type="text" id="ccnum" name="cardnumber" />
<div class="Fields">
<div>
<label for="expyear">Exp Year</label>
<input type="text" id="expyear" name="expyear" />
</div>
<div>
<label for="cvv">CVV</label>
<input type="text" id="cvv" name="cvv" />
</div>
</div>
</div>
</div>
<input
type="submit"
value="Continue to checkout"
class="checkout"
/>
</form>
</div>
</div>
<div>
<div class="formContainer">
<h4>
Cart <span class="price" style="color:black"><b>2</b></span>
</h4>
<p>
<a style="text-decoration: none;" href="#">Product 1</a>
<span class="price">$10</span>
</p>
<p>
<a style="text-decoration: none;" href="#">Product 2</a>
<span class="price">$10</span>
</p>
<p>
Total <span class="price" style="color:black"><b>$20</b></span>
</p>
</div>
</div>
</div>
</body>
</html>

実行結果

このコードを実行すると、次のような出力が得られます。

CSSでレスポンシブ対応のチェックアウトフォームを作成する方法

コードのポイント解説

  • .Fieldsクラスdisplay: flexflex-wrap: wrap を指定することで、フォームとカートを横並びに配置しています。
  • メディアクエリ@media (max-width: 800px) 内で flex-direction: column-reverse を設定しており、スマートフォンなどの狭い画面ではカートが上・フォームが下の順で縦積み表示に切り替わります。
  • box-sizing: border-box: 全要素に適用することで、paddingやborderを含めて幅が計算され、レスポンシブレイアウトが崩れにくくなります。
  • 入力欄(input[type="text"])width: 100% を指定しているため、テキストボックスがコンテナの幅に合わせて自動的に伸縮します。
  • 送信ボタン(.checkout): 緑色の背景にホバー時の色変化を加え、視覚的に分かりやすいデザインにしています。

このように、Flexboxとメディアクエリを活用するだけで、デスクトップでもモバイルでも快適に使えるチェックアウトフォームを簡単に実装できます。


  1. CSSで作るレスポンシブ対応のお客様の声(テスティモニアル)セクションの実装方法

    Webサイトに掲載する「お客様の声(テスティモニアル)」は、信頼性を高めるための重要な要素です。CSSを活用すれば、デスクトップでもスマートフォンでも見やすい、レスポンシブなデザインを簡単に実現できます。 この記事では、メディアクエリとfloatを使って、画面幅に応じてレイアウトが自動的に切り替わるテスティモニアルカードの作り方を解説します。 実装のポイント 基本レイアウト: プロフィール画像を float: left; で左に回り込みさせ、名前とコメントを右側に配置します。 円形画像: border-radius: 50%; を指定することで、画像を丸く表示できます。 float の解除:

  2. CSSでレスポンシブなブログレイアウトを作成する方法【完全なコード例付き】

    CSSを使ってレスポンシブなブログレイアウトを作成するには、viewportメタタグの設定と、デバイスの画面幅に応じて柔軟に調整されるレイアウト構造の定義がポイントになります。以下に、ナビゲーションバー・ブログ本文・サイドリンク・フッターを備えた、ブログサイトの完全なコード例を紹介します。 コード例 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1" /> <