不,通过 CSS 是不可能的。它需要“级联”;-)。
但是,如果您能够添加JavaScript到你的页面,一点点jQuery可以让你达到你的最终目标。
您可以使用 jQuery 的 find 对您的目标元素/类/id 执行“前瞻”,然后回溯以选择您的目标。
然后,您使用 jQuery 为您的元素重新编写 DOM (CSS)。
基于this answer by Mike Brant,
以下 jQuery sn-p 可能会有所帮助。
$('p + ul').prev('p')
这首先选择紧跟<p> 的所有<ul>s。
然后它“回溯”以从那组<ul>s 中选择所有以前的<p>s。
实际上,已经通过 jQuery 选择了“前一个兄弟姐妹”。
现在,使用 .css 函数为该元素传入 CSS 新值。
就我而言,我正在寻找一种方法来选择一个 ID 为 #full-width 的 DIV,但前提是它有一个类为 .companies 的(间接)后代 DIV。
我可以控制.companies 下的所有 HTML,但无法更改它上面的任何 HTML。
级联只有一个方向:向下。
因此我可以选择所有#full-widths。
或者我可以选择只跟在#full-width 后面的.companies。
但我可以不是只选择#full-widths进行.companies。
而且,我无法在 HTML 的任何更高位置添加.companies。 HTML 的那部分是在外部编写的,并包装了我们的代码。
但是使用 jQuery,我能够选择所需的#full-widths,然后分配适当的样式:
$("#full-width").find(".companies").parents("#full-width").css( "width", "300px" );
这将找到所有#full-width .companies,并仅选择那些.companies,类似于如何使用选择器来定位 CSS 标准中的特定元素。
然后它使用.parents“回溯”并选择.companies的所有父母,
但过滤这些结果以仅保留 #fill-width 元素,这样最后,
如果它有一个.companies 类后代,它只会选择一个#full-width 元素。
最后,它为结果元素分配一个新的 CSS (width) 值。
$(".parent").find(".change-parent").parents(".parent").css( "background-color", "darkred");
div {
background-color: lightblue;
width: 120px;
height: 40px;
border: 1px solid gray;
padding: 5px;
}
.wrapper {
background-color: blue;
width: 250px;
height: 165px;
}
.parent {
background-color: green;
width: 200px;
height: 70px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<div class="wrapper">
<div class="parent">
"parent" turns red
<div class="change-parent">
descendant: "change-parent"
</div>
</div>
<div class="parent">
"parent" stays green
<div class="nope">
descendant: "nope"
</div>
</div>
</div>
Target <b>"<span style="color:darkgreen">parent</span>"</b> to turn <span style="color:red">red</span>.<br>
<b>Only</b> if it <b>has</b> a descendant of "change-parent".<br>
<br>
(reverse cascade, look ahead, parent un-descendant)
</html>
jQuery 参考文档:
$() or jQuery():DOM 元素。
.find:获取当前匹配元素集中每个元素的后代,由选择器、jQuery 对象或元素过滤。
.parents:获取匹配元素集中每个元素的前一个兄弟。如果提供了选择器,则仅当它与该选择器匹配时才检索前一个同级(过滤结果以仅包含列出的元素/选择器)。
.css:为匹配的元素集设置一个或多个 CSS 属性。