このページの中身

同意チェック

フォーム / パターン集トップ

ポリシーへのリンクは label の外に出し、チェック操作との衝突を避ける

プレビュー#

この枠の中は出発点のCSSの上で動いています。下のコードは、そちらを先に貼ってから足してください。

コピーする#

上のプレビューでつまみを動かし、「生成する」で調整を反映したコードを作ってからコピーしてください。下の欄は生成の元になる型で、直接コピーするものではありません。

<!-- 同意も1つの項目なので、ほかの欄と同じ .field と .field__error に乗せる。
     data-error は、ラベルから定型で作れない文言を欄の側に持たせるためのもの -->
<div class="consent-block field">
  <p class="consent-block__policy" id="cb-note">送信の前に、
    <a href="/privacy" target="_blank" rel="noopener">プライバシーポリシー(別タブで開く)</a>をご確認ください。</p>
  <div class="consent-block__row">
    <input class="consent-block__input" type="checkbox" id="cb-agree" name="agree"
      required aria-describedby="cb-note cb-agree-msg"
      data-error="プライバシーポリシーへの同意が必要です">
    <label class="consent-block__label" for="cb-agree">プライバシーポリシーに同意する
      <span class="req" aria-hidden="true">必須</span></label>
  </div>
  <p class="field__error" id="cb-agree-msg" hidden></p>
</div>
.consent-block {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  max-inline-size: 32rem;
}
.consent-block__policy {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}
.consent-block__policy a {
  color: var(--color-accent-text);
  text-underline-offset: .2em;
}
.consent-block__row {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  min-block-size: 2.75rem;
}
.consent-block__input {
  inline-size: 1.5rem;
  block-size: 1.5rem;
  margin: 0;
  flex-shrink: 0;
  accent-color: var(--color-accent-text);
}
.consent-block__input:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}
.consent-block__label {
  padding-block: var(--space-2);
  cursor: pointer;
}
/* 未同意のときだけ文字が入る。ほかの欄のエラー文と同じ名前・同じ姿にする */
.field__error {
  margin: 0;
  font-size: var(--text-sm);
  color: var(--color-danger);
}
.req {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}

確認する#

関連#

この資料は、Webサイトを作るときに引くためのものです。 何のために作ったか。作っているのは AK²Lab。