いくつかの背景
アプリケーションでフォームを表示しており、各フィールド (または関連するフィールドのセット) をUL/LI
要素で囲んでいます。これは例です:
<ul class="form">
<li class="required">
<label for="...">Field label</label>
<div class="field">
<input type="text" ... />
</div>
</li>
...
</ul>
ご覧のとおりrequired
、必須フィールドのLI
要素にクラスを設定しているので、それらlabel
が表示されたら、疑似要素を定義して、::after
その後に赤いアスタリスクを追加します。
ul.form li.required label::after
{
content: " *";
font-weight: bold;
color: #f66;
}
問題
私が抱えている問題は、<div class="field">
コンテナにチェックボックスまたはラジオボタンのリストがある場合です。ラジオ ボタンまたはチェックボックスの横にあるラベルをクリック可能にするには、label
.
<ul class="form">
<li class="required">
<label for="...">Radio button set</label>
<div class="field">
<input type="radio" name="RBSet" value="1" id="RBSet1" /><label for="RBSet1">First</label><br/>
<input type="radio" name="RBSet" value="2" id="RBSet2" /><label for="RBSet2">Second</label><br/>
<input type="radio" name="RBSet" value="3" id="RBSet3" /><label for="RBSet3">Third</label><br/>
...
</div>
</li>
...
</ul>
もちろん問題は、ラジオ ボタンの横にある各ラベルにアスタリスクが表示されることです。アスタリスクもli.required
要素内に含まれているためです。
質問
に含まれる::after
すべての要素から疑似要素を削除するにはどうすればよいですか? 実際に定義する必要がありますが、その内容を空の文字列に設定する必要がありますか、それともすべて一緒に削除することは可能ですか?label
div.field
のスタイル定義を::after
に変更できます
ul.form li.required > label::after
{
content: " *";
font-weight: bold;
color: #f66;
}
しかし、互換性の理由から、これらの特別な CSS セレクターは避けたいと考えています。