Html 使用CSS:not()以元素中选定的内容为目标

Html 使用CSS:not()以元素中选定的内容为目标,html,css,css-selectors,pseudo-class,Html,Css,Css Selectors,Pseudo Class,我有一个.headerdiv,其中有一个spanmain域和一个divotherdomains: <div class="header"><span class="maindomain">LatestFooty.co.uk</span> is currently available for sale, along with: <div class="otherdomains"> LatestFootie.com<br> Late

我有一个
.header
div,其中有一个span
main域
和一个div
otherdomains

<div class="header"><span class="maindomain">LatestFooty.co.uk</span> is currently available for sale, along with:
<div class="otherdomains">    
LatestFootie.com<br>
LatestFootie.co.uk
</div>
</div>
据我所知,语法是正确的,我不认为这是一个特殊性问题,因为
!重要信息
没有什么区别。我做错了什么

我试图将“当前可供出售”与“:”作为目标,而不涉及
.main域
其他域
的内容

在CSS中不能以匿名元素为目标

CSS规则需要在HTML中附加一个“钩子”。这个钩子是一个HTML标记。没有标签,CSS就没有目标。这一概念适用于各种盒子模型

发件人:

当没有用于匿名框的HTML元素时,将创建匿名框。例如,当您在父元素上声明
display:flex
,并且直接在另一个元素中不包含一行文本时,就会发生这种情况。为了修复框树,将围绕该文本运行创建一个匿名框。然后,它将表现为一个灵活的项目,但是,它不能像常规框那样被定位和样式化,因为没有要定位的元素

(强调矿山)

我试图将“当前可供出售”与“:”作为目标,而不涉及
.main域
其他域
的内容

在CSS中不能以匿名元素为目标

CSS规则需要在HTML中附加一个“钩子”。这个钩子是一个HTML标记。没有标签,CSS就没有目标。这一概念适用于各种盒子模型

发件人:

当没有用于匿名框的HTML元素时,将创建匿名框。例如,当您在父元素上声明
display:flex
,并且直接在另一个元素中不包含一行文本时,就会发生这种情况。为了修复框树,将围绕该文本运行创建一个匿名框。然后,它将表现为一个灵活的项目,但是,它不能像常规框那样被定位和样式化,因为没有要定位的元素

(emphasis mine)

.header:not(.maindomain):not(.otherdomain)
仅针对具有
.header
类且不具有
.maindomain
和/或
.otherdomain
类本身的元素

你目前的规则是:

是目标

不是目标

不是目标

不是目标

但这显然不是你想在这里做的

您不能将规则应用于
.header
类,这取决于仅使用CSS的子类

您的问题有一个经过批准的答案,它可能会引导您走向正确的方向(在这种情况下使用JavaScript或jQuery)。

.header:not(.maindomain):not(.otherdomains)
仅针对具有
.header
类且自身不具有
.main域
和/或
其他域
类的元素

你目前的规则是:

是目标

不是目标

不是目标

不是目标

但这显然不是你想在这里做的

您不能将规则应用于
.header
类,这取决于仅使用CSS的子类


您的问题有一个经过批准的答案,它可能会引导您走向正确的方向(在这种情况下使用JavaScript或jQuery)。

您需要两个选择器:

.header{
字体:斜体;
}
.header.otherdomains,
.header.main域{
字体风格:首字母;
}
/*或
.标题*{
字体风格:首字母;
}
*/
LatestFooty.co.uk目前可供出售,包括:
LatestFootie.com
LatestFootie.co.uk
您需要两个选择器:

.header{
字体:斜体;
}
.header.otherdomains,
.header.main域{
字体风格:首字母;
}
/*或
.标题*{
字体风格:首字母;
}
*/
LatestFooty.co.uk目前可供出售,包括:
LatestFootie.com
LatestFootie.co.uk
一切都在演示中,JavaScript用于演示目的

演示
constlnx=[…document.links];
forEach(lnk=>lnk.addEventListener('click',viewHTML));
函数视图HTML(e){
const link=e.target;
const headers=document.querySelectorAll('.'+this.dataset.tag);
headers.forEach(hdr=>{
如果(!hdr.matches('.hide')){
link.className='off';
设str=hdr.outerHTML;
设txt=document.createElement('div');
txt.className='txt';
hdr.insertAdjacentElement('afterend',txt);
hdr.nextElementSibling.insertAdjacentText('beforeend',str);
hdr.classList.add('hide');
}否则{
link.className='';
hdr.classList.remove('hide');
hdr.nextElementSibling.remove();
}
});
}
正文{
字体:400 2.5vw/1.5控制台
}
[类别^=标题]{
字体系列:Arial;
}
/*标题(OP)
选择器失败--:not()前缀不正确
.标题:。。。意思是。标题是目标
.标题:。。。表示目标为.header的后代
没有.header.A、.header.B,也没有.header.A.B
因此,不带.A和/或.B的.header将以斜体显示所有内容
*/
.header:not(.A):not(.B){
字体:斜体;
}
/*标题1
没有额外HTML标记的最佳解决方案:
指定字体样式:普通。。。
直接(.C1,.D1)
或按类别(.N)
*/
.校长1{
字体:斜体;
}
.C1,
.D1,
.N{
字体风格:普通;
}
/*标题2
使用:not()需要额外的HTML标记:
在内联或内联块标记中换行第二个textnode
作为子体标记的内容,文本可以作为目标
*/
.header2*:非(.E):非(.F){
字体:斜体;
}
/*标题3
具有额外HTML标记的智能解决方案:
在或中换行第二个textnode
*/
H
@media (min-width:300px) and (max-width:450px) {
  .header:not(.maindomain):not(.otherdomains) {
  font-style: italic;  
  }
}