css 如何定位直接文本而不是标签中的文本?

lymnna71  于 2023-06-07  发布在  其他
关注(0)|答案(3)|浏览(132)

有没有一种方法可以只针对<h1>-Tag中的直接文本?
下面是我想做的一个例子:

<h1>I want to select this text with a css selector <small>but not this text</small></h1>

这似乎不起作用:

h1:not(small)

这可能吗

djmepvbi

djmepvbi1#

h1:not(small)

您的选择器h1:not(small)不工作,因为它说:

  • 针对所有不是small元素的h1元素。*

这与单独使用h1选择器相同。

h1 :not(small)

你会更接近h1 :not(small),它说:

  • 针对h1的所有后代,small元素除外。*

嘣!正中你下怀。
除了直接包含在元素中的文本(即周围没有标签的文本)成为匿名元素。和anonymous elements are not selectable by CSS

h1 :not(small) {
  color: orange;
}
<h1>This text is contained directly inside the container. It is not selectable by CSS. It is an anonymous element. <small>This text is inside a small element</small></h1>

<hr>

<h1><span>This text is contained in a span. It is selectable by CSS</span> <small>This text is inside a small element</small></h1>

CSS父选择器

要排除small元素,它必须将自己标识为h1的子元素。
但是有no parent selector in CSS

解决方案:两个选择器

你需要两个选择器来完成这个工作:

  • 第一个设置父对象的样式。
  • 第二个在子对象上覆盖第一个。
h1 {
  color: orange;
}

h1 > small {
  color: black;
}
<h1>I want to select this text with a css selector <small>but not this text</small></h1>

更多信息

r1zhe5dt

r1zhe5dt2#

这是最接近于保留样式而不使用父div实现的任何css。这个功能还没有完全集成到所有的浏览器中,但它应该可以在一些浏览器中工作。希望,这有帮助。
浏览器支持-

这里在做什么
小标签保留了其原始CSS,不受其他样式的影响。您可以将此方法应用于要保留其样式的任何子元素。

small {
  all: initial;
  * {
    all: unset;
  }
}
h1 {
    color: #ff0000;
}
<h1>I want to select this tex with a css selector <small>but not this text</small></h1>
bf1o4zei

bf1o4zei3#

将样式应用到h1上,然后将这些更改恢复到small中,例如,如果您只想更改颜色,则可以使用以下代码;

h1 { color: red; }
h1 small { color: initial; }

或者,如果您有多个样式更改;

h1 {
    color: red;
    font-weight: italic;
    text-transform: uppercase;
}

h1 small {
    color: initial;
    font-weight: initial;
    text-transform: initial;
}

请注意,initial CSS值可以在除IE和Opera Mini之外的所有浏览器上使用。查看此页面以获取更多信息

相关问题