CSS

CSSフォームデザイン集|input・select・checkboxのコピペ例

CSSでフォームを見やすく整えるコピペ例を20個まとめました。input、textarea、select、checkbox、radio、送信ボタン、エラー表示、検索フォームなど、問い合わせフォームに使いやすいデザインを紹介します。

この記事の目次
  1. 1. 基本の入力フォーム
  2. 2. フォーカスが見える入力フォーム
  3. 3. textareaの長文入力フォーム
  4. 4. selectの基本デザイン
  5. 5. 矢印を整えたselect
  6. 6. 標準チェックボックスを整える
  7. 7. カスタムチェックボックス
  8. 8. ラジオボタンの選択肢
  9. 9. 必須ラベルつきフォーム
  10. 10. 補足テキストつきフォーム
  11. 11. エラー表示つきフォーム
  12. 12. 成功状態のフォーム
  13. 13. 入力欄とボタンを横並びにする
  14. 14. 2列レイアウトのフォーム
  15. 15. 検索フォーム
  16. 16. 入力欄にアイコン風の文字を付ける
  17. 17. ファイル選択フォーム
  18. 18. フローティングラベル風フォーム
  19. 19. フォーム全体をカードにする
  20. 20. CSS変数で色を変えやすいフォーム
  21. フォームデザインで失敗しやすいポイント
  22. フォームを作るときの基本方針
  23. まとめ

フォームは、ユーザーが直接入力する大切なUIです。

見た目を整えるだけでなく、ラベル、余白、フォーカス、エラー表示、スマホでの入力しやすさまで考えると、使いやすいフォームになります。

この記事では、CSSで使えるフォームデザインを20個まとめました。inputtextareaselect、チェックボックス、ラジオボタン、検索フォーム、エラー表示などをそのままコピーして使える形で紹介します。

1. 基本の入力フォーム

まずは、ラベルと入力欄を縦に並べる基本形です。

<label class="form-field-basic">
  <span>お名前</span>
  <input type="text" placeholder="山田 太郎">
</label>
.form-field-basic {
  display: grid;
  gap: 8px;
  font-weight: 700;
}

.form-field-basic input {
  width: 100%;
  padding: 12px 14px;
  font: inherit;
  border: 1px solid #d1d5db;
  border-radius: 6px;
}

入力欄は width: 100%; にしておくと、スマホでも扱いやすくなります。

2. フォーカスが見える入力フォーム

入力中の場所がわかるように、:focus の見た目を用意します。

<label class="form-field-focus">
  <span>メールアドレス</span>
  <input type="email" placeholder="mail@example.com">
</label>
.form-field-focus {
  display: grid;
  gap: 8px;
}

.form-field-focus input {
  width: 100%;
  padding: 12px 14px;
  font: inherit;
  border: 1px solid #cbd5e1;
  border-radius: 6px;
  transition: border-color 0.2s, box-shadow 0.2s;
}

.form-field-focus input:focus {
  border-color: #2563eb;
  outline: 0;
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.18);
}

outline を消す場合は、代わりに box-shadow などでフォーカス状態を必ず見せます。

3. textareaの長文入力フォーム

お問い合わせ内容や備考欄には、複数行入力できる textarea を使います。

<label class="form-field-textarea">
  <span>お問い合わせ内容</span>
  <textarea rows="6" placeholder="ご相談内容をご入力ください"></textarea>
</label>
.form-field-textarea {
  display: grid;
  gap: 8px;
}

.form-field-textarea textarea {
  width: 100%;
  min-height: 160px;
  padding: 12px 14px;
  font: inherit;
  line-height: 1.7;
  resize: vertical;
  border: 1px solid #d1d5db;
  border-radius: 6px;
}

.form-field-textarea textarea:focus {
  border-color: #2563eb;
  outline: 3px solid rgba(37, 99, 235, 0.18);
}

resize: vertical; にすると、横方向に崩れず縦方向だけ調整できます。

4. selectの基本デザイン

セレクトボックスも、入力欄と同じ余白・枠線にするとフォーム全体がそろいます。

<label class="form-field-select">
  <span>お問い合わせ種別</span>
  <select>
    <option>選択してください</option>
    <option>ご相談</option>
    <option>お見積もり</option>
  </select>
</label>
.form-field-select {
  display: grid;
  gap: 8px;
}

.form-field-select select {
  width: 100%;
  padding: 12px 14px;
  font: inherit;
  color: #111827;
  background: #fff;
  border: 1px solid #d1d5db;
  border-radius: 6px;
}

まずはブラウザ標準の見た目を活かして、余白だけ整えるのがおすすめです。

5. 矢印を整えたselect

セレクトの矢印をCSSで整えると、他の入力欄となじみやすくなります。

<label class="form-field-select-arrow">
  <span>希望プラン</span>
  <select>
    <option>ライト</option>
    <option>スタンダード</option>
    <option>ビジネス</option>
  </select>
</label>
.form-field-select-arrow {
  display: grid;
  gap: 8px;
}

.form-field-select-arrow select {
  width: 100%;
  padding: 12px 42px 12px 14px;
  font: inherit;
  color: #111827;
  appearance: none;
  background:
    linear-gradient(45deg, transparent 50%, #64748b 50%) right 18px center / 7px 7px no-repeat,
    linear-gradient(135deg, #64748b 50%, transparent 50%) right 12px center / 7px 7px no-repeat,
    #fff;
  border: 1px solid #d1d5db;
  border-radius: 6px;
}

矢印分の余白として、右側の padding を広めにします。

6. 標準チェックボックスを整える

チェックボックスは、まず標準のUIを活かして余白を整えると安全です。

<label class="form-check-basic">
  <input type="checkbox">
  <span>利用規約に同意します</span>
</label>
.form-check-basic {
  display: flex;
  gap: 10px;
  align-items: flex-start;
  line-height: 1.7;
  cursor: pointer;
}

.form-check-basic input {
  margin-top: 0.35em;
}

テキストが複数行になっても読みやすいように、align-items: flex-start; にします。

7. カスタムチェックボックス

見た目をそろえたい場合は、チェックボックスをカスタムできます。

<label class="form-check-custom">
  <input type="checkbox">
  <span>メールでお知らせを受け取る</span>
</label>
.form-check-custom {
  display: inline-flex;
  gap: 10px;
  align-items: center;
  cursor: pointer;
}

.form-check-custom input {
  display: grid;
  place-content: center;
  width: 20px;
  height: 20px;
  margin: 0;
  appearance: none;
  border: 2px solid #cbd5e1;
  border-radius: 5px;
}

.form-check-custom input::before {
  width: 10px;
  height: 10px;
  content: "";
  transform: scale(0);
  transition: transform 0.15s;
  background: #2563eb;
  border-radius: 2px;
}

.form-check-custom input:checked::before {
  transform: scale(1);
}

.form-check-custom input:focus-visible {
  outline: 3px solid rgba(37, 99, 235, 0.18);
}

カスタムするときも、フォーカス状態は必ず残します。

8. ラジオボタンの選択肢

1つだけ選ばせたい項目には、ラジオボタンを使います。

<div class="form-radio-group">
  <label>
    <input type="radio" name="plan" checked>
    <span>ライト</span>
  </label>
  <label>
    <input type="radio" name="plan">
    <span>スタンダード</span>
  </label>
  <label>
    <input type="radio" name="plan">
    <span>ビジネス</span>
  </label>
</div>
.form-radio-group {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.form-radio-group label {
  display: inline-flex;
  gap: 8px;
  align-items: center;
  padding: 10px 14px;
  cursor: pointer;
  border: 1px solid #d1d5db;
  border-radius: 9999px;
}

.form-radio-group input {
  margin: 0;
}

name を同じにすると、そのグループ内で1つだけ選択できます。

9. 必須ラベルつきフォーム

必須項目は、ラベルの横に小さなバッジを付けると伝わりやすいです。

<label class="form-field-required">
  <span class="form-label">
    お名前
    <span class="required-badge">必須</span>
  </span>
  <input type="text">
</label>
.form-field-required {
  display: grid;
  gap: 8px;
}

.form-label {
  display: inline-flex;
  gap: 8px;
  align-items: center;
  font-weight: 700;
}

.required-badge {
  padding: 2px 7px;
  color: #fff;
  font-size: 12px;
  background: #dc2626;
  border-radius: 9999px;
}

.form-field-required input {
  width: 100%;
  padding: 12px 14px;
  font: inherit;
  border: 1px solid #d1d5db;
  border-radius: 6px;
}

バッジの種類を増やす場合は、CSSバッジ・ラベル・タグデザイン集 と内部リンクできます。

10. 補足テキストつきフォーム

入力ルールや注意書きは、入力欄のすぐ近くに置くと親切です。

<label class="form-field-help">
  <span>パスワード</span>
  <input type="password">
  <small>8文字以上で入力してください。</small>
</label>
.form-field-help {
  display: grid;
  gap: 8px;
}

.form-field-help input {
  width: 100%;
  padding: 12px 14px;
  font: inherit;
  border: 1px solid #d1d5db;
  border-radius: 6px;
}

.form-field-help small {
  color: #64748b;
  font-size: 13px;
  line-height: 1.6;
}

補足は薄い色にしつつ、読めるサイズを保ちます。

11. エラー表示つきフォーム

エラーは色だけでなく、文章でも理由を伝えます。

<label class="form-field-error">
  <span>メールアドレス</span>
  <input type="email" value="sample" aria-describedby="mail-error">
  <small id="mail-error">メールアドレスの形式で入力してください。</small>
</label>
.form-field-error {
  display: grid;
  gap: 8px;
}

.form-field-error input {
  width: 100%;
  padding: 12px 14px;
  font: inherit;
  border: 1px solid #dc2626;
  border-radius: 6px;
}

.form-field-error input:focus {
  outline: 3px solid rgba(220, 38, 38, 0.18);
}

.form-field-error small {
  color: #dc2626;
  font-size: 14px;
}

aria-describedby で、入力欄とエラーメッセージの関係を示しています。

12. 成功状態のフォーム

入力が正しいことを示したい場合は、成功状態の見た目も用意できます。

<label class="form-field-success">
  <span>メールアドレス</span>
  <input type="email" value="mail@example.com">
  <small>入力形式は正しいです。</small>
</label>
.form-field-success {
  display: grid;
  gap: 8px;
}

.form-field-success input {
  width: 100%;
  padding: 12px 14px;
  font: inherit;
  border: 1px solid #16a34a;
  border-radius: 6px;
}

.form-field-success small {
  color: #15803d;
  font-size: 14px;
}

成功状態も色だけではなく、短いテキストを添えるとわかりやすくなります。

13. 入力欄とボタンを横並びにする

メール登録やクーポン入力のような短いフォームに使えます。

<form class="form-inline">
  <input type="email" placeholder="メールアドレス">
  <button type="submit">登録する</button>
</form>
.form-inline {
  display: flex;
  gap: 10px;
}

.form-inline input {
  flex: 1;
  min-width: 0;
  padding: 12px 14px;
  font: inherit;
  border: 1px solid #d1d5db;
  border-radius: 6px;
}

.form-inline button {
  padding: 12px 18px;
  color: #fff;
  font: inherit;
  font-weight: 700;
  cursor: pointer;
  background: #2563eb;
  border: 0;
  border-radius: 6px;
}

@media (max-width: 600px) {
  .form-inline {
    flex-direction: column;
  }
}

ボタンの種類を増やす場合は、CSSボタンデザイン集 と内部リンクできます。

14. 2列レイアウトのフォーム

名前とメールなど、短い入力欄をPCで2列に並べる例です。

<div class="form-grid-2">
  <label>
    <span>お名前</span>
    <input type="text">
  </label>
  <label>
    <span>メールアドレス</span>
    <input type="email">
  </label>
</div>
.form-grid-2 {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
}

.form-grid-2 label {
  display: grid;
  gap: 8px;
}

.form-grid-2 input {
  width: 100%;
  padding: 12px 14px;
  font: inherit;
  border: 1px solid #d1d5db;
  border-radius: 6px;
}

@media (max-width: 600px) {
  .form-grid-2 {
    grid-template-columns: 1fr;
  }
}

スマホでは1列に戻すと、入力欄が狭くなりません。

15. 検索フォーム

サイト内検索や絞り込みに使いやすい、横長の検索フォームです。

<form class="form-search">
  <input type="search" placeholder="キーワードで検索">
  <button type="submit">検索</button>
</form>
.form-search {
  display: flex;
  overflow: hidden;
  border: 1px solid #d1d5db;
  border-radius: 9999px;
}

.form-search input {
  flex: 1;
  min-width: 0;
  padding: 12px 16px;
  font: inherit;
  border: 0;
}

.form-search input:focus {
  outline: 0;
}

.form-search button {
  padding: 0 20px;
  color: #fff;
  font: inherit;
  font-weight: 700;
  cursor: pointer;
  background: #111827;
  border: 0;
}

外側のフォームに枠線を持たせると、検索窓らしいまとまりが出ます。

16. 入力欄にアイコン風の文字を付ける

通貨や単位を入力欄の横に置きたいときの形です。

<label class="form-addon">
  <span>月額料金</span>
  <span class="addon-box">
    <span>¥</span>
    <input type="number" placeholder="3000">
  </span>
</label>
.form-addon {
  display: grid;
  gap: 8px;
}

.addon-box {
  display: flex;
  overflow: hidden;
  border: 1px solid #d1d5db;
  border-radius: 6px;
}

.addon-box span {
  display: grid;
  place-items: center;
  padding: 0 14px;
  color: #64748b;
  background: #f8fafc;
  border-right: 1px solid #d1d5db;
}

.addon-box input {
  flex: 1;
  min-width: 0;
  padding: 12px 14px;
  font: inherit;
  border: 0;
}

単位や記号を入力値と分けると、ユーザーが入力する内容が明確になります。

17. ファイル選択フォーム

画像や資料のアップロード欄も、余白と枠線を整えるだけで見やすくなります。

<label class="form-file">
  <span>ファイルを選択</span>
  <input type="file">
</label>
.form-file {
  display: grid;
  gap: 8px;
}

.form-file input {
  width: 100%;
  padding: 12px;
  font: inherit;
  background: #f8fafc;
  border: 1px dashed #94a3b8;
  border-radius: 8px;
}

.form-file input::file-selector-button {
  margin-right: 12px;
  padding: 8px 12px;
  color: #fff;
  font: inherit;
  font-weight: 700;
  cursor: pointer;
  background: #2563eb;
  border: 0;
  border-radius: 6px;
}

::file-selector-button で、ファイル選択ボタン部分を装飾できます。

18. フローティングラベル風フォーム

入力欄の中にラベルを浮かせるように見せるデザインです。

<label class="form-floating">
  <input type="text" placeholder=" ">
  <span>お名前</span>
</label>
.form-floating {
  position: relative;
  display: block;
}

.form-floating input {
  width: 100%;
  padding: 20px 14px 8px;
  font: inherit;
  border: 1px solid #d1d5db;
  border-radius: 6px;
}

.form-floating span {
  position: absolute;
  top: 14px;
  left: 14px;
  color: #64748b;
  pointer-events: none;
  transition: 0.2s;
}

.form-floating input:focus + span,
.form-floating input:not(:placeholder-shown) + span {
  top: 6px;
  font-size: 12px;
  color: #2563eb;
}

この方法では placeholder=" " が必要です。通常のラベルの方がわかりやすい場面も多いです。

19. フォーム全体をカードにする

お問い合わせフォーム全体をカード化すると、ページ内で入力エリアが見つけやすくなります。

<form class="form-card">
  <label>
    <span>お名前</span>
    <input type="text">
  </label>
  <label>
    <span>お問い合わせ内容</span>
    <textarea rows="5"></textarea>
  </label>
  <button type="submit">送信する</button>
</form>
.form-card {
  display: grid;
  gap: 18px;
  max-width: 640px;
  padding: 24px;
  background: #fff;
  border: 1px solid #e5e7eb;
  border-radius: 8px;
  box-shadow: 0 12px 30px rgba(15, 23, 42, 0.08);
}

.form-card label {
  display: grid;
  gap: 8px;
}

.form-card input,
.form-card textarea {
  width: 100%;
  padding: 12px 14px;
  font: inherit;
  border: 1px solid #d1d5db;
  border-radius: 6px;
}

.form-card button {
  padding: 13px 18px;
  color: #fff;
  font: inherit;
  font-weight: 700;
  cursor: pointer;
  background: #2563eb;
  border: 0;
  border-radius: 6px;
}

フォーム全体の余白は、入力欄同士の余白より広めに取ると見やすくなります。

20. CSS変数で色を変えやすいフォーム

複数ページで使い回すフォームは、色や角丸をCSS変数にしておくと調整しやすいです。

<label class="form-field-variable">
  <span>会社名</span>
  <input type="text" placeholder="サンプル株式会社">
</label>
.form-field-variable {
  --form-main: #0f766e;
  --form-border: #cbd5e1;
  --form-radius: 6px;

  display: grid;
  gap: 8px;
}

.form-field-variable input {
  width: 100%;
  padding: 12px 14px;
  font: inherit;
  border: 1px solid var(--form-border);
  border-radius: var(--form-radius);
}

.form-field-variable input:focus {
  border-color: var(--form-main);
  outline: 3px solid rgba(15, 118, 110, 0.18);
}

色を変えたいときは、--form-main とフォーカス時の rgba() を同系色にします。

フォームデザインで失敗しやすいポイント

  • ラベルがなく、何を入力する欄かわかりにくい
  • outline: none; だけを指定して、フォーカス状態が消えている
  • 入力欄の高さが低く、スマホでタップしづらい
  • エラーを色だけで伝えている
  • PCでは横並びでも、スマホで入力欄が狭くなっている

フォームを作るときの基本方針

  • ラベルと入力欄はセットで置く
  • 入力欄、テキストエリア、セレクトの見た目をそろえる
  • フォーカス、エラー、補足テキストを用意する
  • スマホでは基本的に1列にする
  • 送信ボタンは押せる見た目にする

まとめ

CSSフォームデザインは、装飾よりも入力しやすさを優先するのが大切です。

まずは基本の入力欄、フォーカス、エラー表示、チェックボックス、送信ボタンを整え、必要に応じて検索フォームや2列レイアウトに広げると、実務で使いやすいフォームになります。