在遇到某个标记之前,子代的CSS选择器

在遇到某个标记之前,子代的CSS选择器,css,Css,我想知道是否有一个CSS选择器可以用来选择所有子体,直到遇到某个标记为止 例如,在下面的DOM结构中,我想在“id1”中添加一个选择器,这样它就可以设置所有子体的样式,但不包括“id4”。换句话说,div对应于class1和class2。我事先知道id1和id4,但我不知道class1和class2(在我点击“id4”之前,链中可能还有更多)。我希望样式应用于与class1和class2相对应的div,但不应用于其他内容。基本上,应用程序div已经设置了它们的位置,我希望能够保持原样,只需修改对

我想知道是否有一个CSS选择器可以用来选择所有子体,直到遇到某个标记为止

例如,在下面的DOM结构中,我想在“id1”中添加一个选择器,这样它就可以设置所有子体的样式,但不包括“id4”。换句话说,div对应于class1和class2。我事先知道id1和id4,但我不知道class1和class2(在我点击“id4”之前,链中可能还有更多)。我希望样式应用于与class1和class2相对应的div,但不应用于其他内容。基本上,应用程序div已经设置了它们的位置,我希望能够保持原样,只需修改对应于class1和class2的div的位置

理想情况下,我希望避免列出我正在使用的所有div,因为应用程序在id“deep nesting of known div here”下有相当多的div



原因是我在某个网站的Safari上遇到了一个奇怪的问题。我有一个扩展正在向页面中注入iframe。注入iframe之后,页面似乎正在运行一个脚本,该脚本导致id2和id3在id1和id4之间注入。因此,iframe无法正确显示。

解决此问题的最佳方法是使用css psuedo选择器。解决此问题的一种方法是为所有类指定
id
的类名,然后执行
.id:not(:last child)
。可能有更好的方法来解决这个问题,但这将是我的方法:-)

解决这个问题的最好方法是使用css psuedo选择器。解决此问题的一种方法是为所有类指定
id
的类名,然后执行
.id:not(:last child)
。可能有更好的解决方法,但这是我的方法:-)

您可能必须为所有子体设置样式,然后为
#id4
重置

尝试以下方法:

#id1 div{
颜色:红色;
}
#id1#id4{
颜色:黑色;
}
您还可以更具体地使用后代选择器,然后为目标元素重置:

#id1[id^=“id”]{
颜色:红色;
}
#id1#id4{
颜色:黑色;
}

您可能需要为所有子体设置样式,然后为
#id4
重置

尝试以下方法:

#id1 div{
颜色:红色;
}
#id1#id4{
颜色:黑色;
}
您还可以更具体地使用后代选择器,然后为目标元素重置:

#id1[id^=“id”]{
颜色:红色;
}
#id1#id4{
颜色:黑色;
}

首先,ID并不是最好的例子,因为由于它们的性质,它们是唯一的和可预测的,而不是您在示例中所描述的

但无论如何,这里是如何做到的-在css中没有“直到”选择器,但可以检查子元素。这意味着您可以为每个非id4元素或其子元素设置样式,或者为每个元素设置样式,然后为每个id4元素或其子元素重置样式:

/* style every div element that's not #id4 or a child of it */

#id1 :not(#id4) div:not(#id4) {
  background-color: red;
}


首先,ID并不是最好的例子,因为由于它们的性质,它们是唯一的和可预测的——这与您在示例中描述的完全不同

但无论如何,这里是如何做到的-在css中没有“直到”选择器,但可以检查子元素。这意味着您可以为每个非id4元素或其子元素设置样式,或者为每个元素设置样式,然后为每个id4元素或其子元素重置样式:

/* style every div element that's not #id4 or a child of it */

#id1 :not(#id4) div:not(#id4) {
  background-color: red;
}


应用于
id4
的祖先的大多数样式将由
id4
继承。您必须逐个重写每个继承的样式。应用于
id4
的祖先的大多数样式将由
id4
继承。您必须逐个重写每个继承的样式。谢谢。我不确定这对我来说是否是一个实用的解决方案,因为id4中有很多div。如果您不知道需要在#id1和#id4之间定位的元素数量,这是很实用的。谢谢。我不确定这对我来说是否是一个实用的解决方案,因为id4中有很多div。如果你不知道需要在#id1和#id4之间定位的元素的数量,这是很实用的。我想我是在寻找上面的(1)(为每个不是#id4或它的子元素*/)的div元素设置样式)。你能告诉我它是如何阻止选择#id4的所有后代的吗?@AshD:它选择所有没有id“id4”的div,在没有id“id4”的div中,在id为“id1”的div中。中心部分是关键元素,因为它防止所有id4的孩子被选中。谢谢。我没有增加+选票的名声,否则我会有。再次非常感谢。我需要学习CSS!我想我是在寻找上面的第(1)项(/*为每个div元素设计样式,而不是#id4或它的子元素*/)。你能告诉我它是如何阻止选择#id4的所有后代的吗?@AshD:它选择所有没有id“id4”的div,在没有id“id4”的div中,在id为“id1”的div中。中心部分是关键元素,因为它防止所有id4的孩子被选中。谢谢。我没有增加+选票的名声,否则我会有。再次非常感谢。我需要学习CSS!
/* style every div, then reset divs that are #id4 or a child of it */

#id1 div {
  background-color: red;
}

#id1 #id4, #id1 #id4 div {
  background-color: transparent;
}