CSS - 找到第一个后代
CSS - Find the first descendant
考虑以下 HTML - 经典网格系统:
<div class="container">
<div>
<div class="grid">
<div>
<ul class="row">
<li class="grid"></li>
</ul>
</div>
</div>
</div>
</div>
一个部分总是以 .container
开头
层次结构中第一个 .grid
前面没有 .row
第二个、第三个....grid 元素总是除以 .row
。
A .grid
始终是容器的后代,但不保证是第一个直接后代。
A .row
始终是 .grid
的后代,但不保证是第一个直系后代。
A child .grid
始终是 .row
的后代,但不保证是第一个直系后代。
我想找到 .container
(分支中的第一个)下方的第一个 .grid
元素。如果有多个分支,我想 select 所有分支。 .grid
元素前面永远不会有 .row
- 有什么建议吗?
.container > .grid,
.container > :not(.row) > .grid {}
:not()
具有可接受的浏览器支持(IE > 8,所有其他)。
根据需要添加深度。
你是这个意思吗?
<style>
.container li.grid:first-child {
background-color: yellow;
}
</style>
由于 .grid
可能出现在它和它的容器或其祖先 .row
之间的任何位置,您将无法仅使用一个选择器来完成此操作。使用 >
组合器需要提前知道 .grid
的每个级别的确切嵌套位置,并假设它不会改变,并且 :not()
不允许组合器,所以你不能做像 .container .grid:not(.row .grid)
(除非你use jQuery)。
相反,您需要设置所有 .grid
元素的样式并还原任何嵌套元素的样式:
.container .grid {
/* Styles */
}
.container .row .grid {
/* Revert above styles */
}
考虑以下 HTML - 经典网格系统:
<div class="container">
<div>
<div class="grid">
<div>
<ul class="row">
<li class="grid"></li>
</ul>
</div>
</div>
</div>
</div>
一个部分总是以 .container
层次结构中第一个 .grid
前面没有 .row
第二个、第三个....grid 元素总是除以 .row
。
A .grid
始终是容器的后代,但不保证是第一个直接后代。
A .row
始终是 .grid
的后代,但不保证是第一个直系后代。
A child .grid
始终是 .row
的后代,但不保证是第一个直系后代。
我想找到 .container
(分支中的第一个)下方的第一个 .grid
元素。如果有多个分支,我想 select 所有分支。 .grid
元素前面永远不会有 .row
- 有什么建议吗?
.container > .grid,
.container > :not(.row) > .grid {}
:not()
具有可接受的浏览器支持(IE > 8,所有其他)。
根据需要添加深度。
你是这个意思吗?
<style>
.container li.grid:first-child {
background-color: yellow;
}
</style>
由于 .grid
可能出现在它和它的容器或其祖先 .row
之间的任何位置,您将无法仅使用一个选择器来完成此操作。使用 >
组合器需要提前知道 .grid
的每个级别的确切嵌套位置,并假设它不会改变,并且 :not()
不允许组合器,所以你不能做像 .container .grid:not(.row .grid)
(除非你use jQuery)。
相反,您需要设置所有 .grid
元素的样式并还原任何嵌套元素的样式:
.container .grid {
/* Styles */
}
.container .row .grid {
/* Revert above styles */
}