質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

2回答

208閲覧

疑似要素で作ったチェックボックスがうまく動作しない

obito

総合スコア16

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

1グッド

0クリップ

投稿2024/07/15 00:17

実現したいこと

疑似要素で作ったチェックボックスをcontact form 7で出力されたcheckboxでも動作させたい

発生している問題・分からないこと

チェックボックスのレイアウトを変えたいので本物のcheckboxをdisplay: none;で非表示にし、その隣にあるspanに疑似要素を使って疑似チェックボックスを作りました。
beforeが外枠、afterがチェックマークになっています。
checkboxと隣にあるspanのテキストをlabelで囲い、spanのテキストをクリックしてもチェックボックスにチェックが入るようにしています。

HTMLファイルの状態ではこれうまく作動するのですが、phpファイルに書き写しプラグインのcontact form 7でチェックボックスを作り直すとcheckboxがwpcf7から始まるクラスで何重にも囲まれてしまい構造が変わってしまうせいかいくらクリックしても疑似チェックボックスがうまく動作しなくなってしまいます。

しかしdisplay: none;で非表示にした本物のチェックボックスにはちゃんとチェックは入っているのは確認できているので疑似要素やcheckedの部分がうまく行っていないのだと思うのですが、階層が複雑になりすぎてcssをどう改善したらいいか全く分かりません。

以下、名前がHTML後となっているコードがcontact form 7を使った後のHTMLになります。

該当のソースコード

HTML前

1<label for="privacy"> 2 <input type="checkbox" id="privacy"> 3 <span class="page-contact-form__privacy-text">利用規約と個人情報の<br class="br--sp">取り扱いについて同意する</span> 4</label>

CSS

1input[type="checkbox"] { 2 display: none; 3 4 &:checked { 5 & + span { 6 &::before { 7 border: none; 8 background-color: #4169E1; 9 } 10 11 &::after { 12 opacity: 1; 13 } 14 } 15 } 16 17 & + span { 18 padding-left: 32px; 19 position: relative; 20 21 &::before { 22 content: ""; 23 width: 20px; 24 height: 20px; 25 background-color: config.$bg-color-w; 26 border: 1px solid config.$text-color; 27 border-radius: 2px; 28 position: absolute; 29 top: 50%; 30 left: 0; 31 transform: translateY(-50%); 32 } 33 34 &::after { 35 content: ""; 36 width: 18px; 37 height: 8px; 38 border-bottom: 4px solid config.$bg-color-w; 39 border-left: 4px solid config.$bg-color-w; 40 position: absolute; 41 top: 10px; 42 left: 1px; 43 transform: translateY(-50%) rotate(-45deg); 44 opacity: 0; 45 } 46 } 47}

HTML後

1<label for="privacy"> 2 <span class="wpcf7-form-control-wrap" data-name="privacy-contact"> 3 <span class="wpcf7-form-control wpcf7-acceptance"> 4 <span class="wpcf7-list-item"> 5 <input type="checkbox" name="checkbox" value="1" id="privacy" aria-invalid="false"> 6 </span> 7 </span> 8 </span> 9 <span class="page-contact-form__privacy-text">利用規約と個人情報の<br class="br--sp">取り扱いについて同意する</span> 10</label> 11

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

⓵入れ子構造をやめてコードを書く。
②input[type-"checkbox"]を.wpcf7-form-control-wrap .wpcf7-form-control .wpcf7-list-item input[type-"checkbox"] のように詳細度をあげてcssを書く
③& + span を & ~ .page-contact-form__privacy-textとしてみる
など試しました。
他にもChat GPTを中心に色々複雑なものを試しましたが無理でした。

補足

特になし

hatena19👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

:has()疑似クラスを使えばどうでしょう。

css

1input[type="checkbox"] { 2 display: none; 3} 4 5labellabel[for="privacy"] { 6 &:has(#privacy:checked) { 7 & span { 8 &::before { 9 border: none; 10 background-color: #4169E1; 11 } 12 13 &::after { 14 opacity: 1; 15 } 16 } 17 } 18 19 & span { 20 padding-left: 32px; 21 position: relative; 22 23 &::before { 24 content: ""; 25 width: 20px; 26 height: 20px; 27 background-color: white; 28 border: 1px solid black; 29 border-radius: 2px; 30 position: absolute; 31 top: 50%; 32 left: 0; 33 transform: translateY(-50%); 34 } 35 36 &::after { 37 content: ""; 38 width: 18px; 39 height: 8px; 40 border-bottom: 4px solid white; 41 border-left: 4px solid white; 42 position: absolute; 43 top: 10px; 44 left: 1px; 45 transform: translateY(-50%) rotate(-45deg); 46 opacity: 0; 47 } 48 } 49} 50

投稿2024/07/15 01:22

編集2024/07/15 01:46
hatena19

総合スコア34017

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

obito

2024/07/15 01:55

label { &:has(#privacy:checked) { & span { &::before { border: none; background-color: #4169E1; } &::after { opacity: 1; } } } .page-contact-form__privacy-text { color: config.$text-color; line-height: 24px; letter-spacing: 1.6px; display: inline-block; padding-left: 32px; position: relative; @include mixin.mq(sp) { margin-top: 12px; } &::before { content: ""; width: 20px; height: 20px; background-color: white; border: 1px solid black; border-radius: 2px; position: absolute; top: 50%; left: 0; transform: translateY(-50%); } &::after { content: ""; width: 18px; height: 8px; border-bottom: 4px solid white; border-left: 4px solid white; position: absolute; top: 10px; left: 1px; transform: translateY(-50%) rotate(-45deg); opacity: 0; } } } 参考にして上の用に少し変えてみたところうまくいきました ありがとうございました!
guest

0

id を指定してもラッパーに反映されるだけで、input自身には付きません。
そこで functions で強制的に input に id を入れてしまうという方法もあります。

【cf7でチェックボックスを作成】

  1. cf7 でチェック0. ボックスを作成する際、「個々の項目を label 要素で囲む」のチェックを外しておく
  2. 番号リストオプションは付けない
  3. (nameは適当にppにしています)
    [checkbox pp] ← 出来たショートコードに 空のオプションを追加し、自作のlabelを追加
    [checkbox pp ""]<label for="pp">プライバシーポリシー</label> ← のように書き換えます

この状態ですと、チェックボックスにidが付かないので何も反応しませんよね
これを functions で書き換えます
【functions.php に記載】

php

1add_filter('wpcf7_form_elements', 'add_checkbox_id'); 2function add_checkbox_id ($form){ 3 $form = str_replace('<input type="checkbox" name="pp', '<input id="pp" type="checkbox" name="pp', $form); 4 return $form; 5}

name="pp' の部分は、実際の name に合わせて下さい。

このやり方で、classも入れられます^^

投稿2024/08/12 08:44

-millmill-

総合スコア676

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.40%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問