【发布时间】:2011-06-22 07:18:23
【问题描述】:
一些背景
我在我的应用程序中显示表单,并将每个字段(或一组相关的字段)包含在 UL/LI 元素中。这是一个例子:
<ul class="form">
<li class="required">
<label for="...">Field label</label>
<div class="field">
<input type="text" ... />
</div>
</li>
...
</ul>
如您所见,我在必填字段的 LI 元素上设置了一个类 required,因此当他们的 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 元素中。
问题
如何从div.field 中包含的所有label 元素中删除::after 伪元素?我是否必须实际定义它,但将其内容设置为空字符串,还是可以将其全部删除?
我可以将::after 的样式定义更改为
ul.form li.required > label::after
{
content: " *";
font-weight: bold;
color: #f66;
}
但出于兼容性原因,我想避免使用这些特殊的 CSS 选择器。
【问题讨论】:
标签: css css-selectors pseudo-element