【发布时间】:2018-01-14 12:17:25
【问题描述】:
我有一个元素有一个子元素和另一个元素具有相同的子元素,但也有一个文本节点:
<p><strong>This should be heading</strong></p>
...
<p>There is a sentence that has <strong>strong text</strong> inside it.</p>
我无法以任何方式修改 DOM 结构,包括没有 JavaScript。我所能做的就是编辑 CSS,但我想设置内联 strong 的样式,而不是唯一的孩子 strong。
我认为这可能有效:
p strong:only-child
{
color: red;
}
有没有办法只使用 CSS 来定位没有文本节点兄弟的子节点?
我不认为可以做到,但我想我会问一下,以防有某种聪明的解决方法。
【问题讨论】:
-
这不能用选择器来完成。也就是说,你想把哪个
strong变红?strong两个元素都是内联的,只是碰巧其中一个被非空白文本包围。 -
我更新了我的示例代码,因为空格不是一个因素。目标是使虚假标题(周围没有文字的强烈)变为红色,而句子中的强烈保持黑色。
-
我认为这对于 css 是不可能的,因为在这两种情况下你都有一个内部强大的 p。如果您无法更改 html,我认为您需要一些 javascript。
-
内嵌文本本身不被视为节点。因此这是不可能的。但是,您可以根据标签在整个文档中的位置(彼此相关等)设置标签的样式
-
我发现只有一种方法可以在纯 CSS 中区分这些情况——检查
p:first-letter是否在p strong中。但似乎这种方法只能用于背景样式:jsfiddle.net/SjBAx
标签: css css-selectors