CSS 选择器只加粗没有子元素的标签

CSS selector to bold only labels without child elements

我有一个基本的 html 表单,其中 label 标签用于定义字段名称,label 标签用于复选框周围,以便用户单击旁边的文本复选框也会选中复选框。

<label>Valid?</label>
<label>
    <input type="checkbox" />
    Yes
</label>

什么 CSS 是使我的字段名称为粗体 ("Valid?") 而我的复选框描述符不是粗体的最佳做法?

我尝试了几种添加不同 :not:empty 的变体,但我没有找到正确的选择器 - 两者要么都是粗体,要么都不是粗体。我知道我的 :empty 不起作用,因为文本元素把它搞砸了,但必须有一种简单的方法来只使用只有文本元素的粗体标签。

label:empty {
    font-weight: bold;
}

JS Fiddle: http://jsfiddle.net/z77tq8bs/

您可以使用下一个兄弟选择器,如下所示:

label {
   font-weight: bold;
}

label + label { 
    font-weight: normal
}

勾选 fiddle: https://jsfiddle.net/8cLuhznb/

找到了一些解决方案,这两种方法都有效,因为标签描述符始终是父元素中的第一个标签,而任何复选框都是后续标签

解决方案 1:first-of-type

label:first-of-type {
    font-weight: bold;
}

解决方案 2:first-child

label:first-child {
    font-weight: bold;
}

我还没有找到解决标签是否只有文本元素的解决方案,但这至少适用于大多数情况。

:empty 伪class 目标元素没有子元素(甚至没有 space)。

伪class的用法如下:http://jsfiddle.net/3z1pnv71/.

HTML:

<label></label>
<label>
    <input type="checkbox" />
    Yes
</label>

CSS:

label:empty:before {
    content: "Valid?";
    font-weight: bold;
}

编辑:也可以保留 HTML 中的所有文本元素并使用以下方法(如果合适):http://jsfiddle.net/cqugufex/.

HTML:

<label data-text = "Valid?"></label>
<label>
    <input type="checkbox" />
    Yes
</label>

CSS:

label:empty:before {
    content: attr(data-text);
    font-weight: bold;
}