我的HTML中有一堆DIV元素,其中一些元素的class属性设置为“rowsLayout”。这些rowsLayout DIV中的一些可以彼此嵌套。我想定义一个CSS选择器,它只针对那些嵌套中最深的DIV。也就是说,我不想要任何包含任何其他rowLayout DIV的rowsLayout DIV。
<div id="a" class="rowsLayout">
<div id="b" class="rowsLayout" />
<div id="c" class="rowsLayout">
<div id="d" class="rowsLayout" />
</div>
</div>
<div id="e" class="rowsLayout" />
使用这种结构,我想要一个将b,d和e作为目标的选择器。
可以这样做吗?
答案 0 :(得分:12)
您可以使用jQuery选择器.rowsLayout:not(:has(.rowsLayout))
。
但是,出于性能原因,this is not possible in CSS。
您的选择器取决于您定位的元素的孩子(或缺少)< 设计CSS是为了在元素的子元素存在之前始终可以解析元素的选择器。这允许CSS作为文档加载应用。
答案 1 :(得分:1)
没有。
您的选择是:按ID选择;为这些叶子添加第二个类,并按该类选择;使用基于javascript的解决方案来设置适当的样式(可能使用第二个类)。
答案 2 :(得分:0)
您是否可以考虑在父项目中添加额外的类(如“父”)?它会更容易,是“标准”
答案 3 :(得分:0)
根据您拥有的div数量,您可以执行以下操作:
div#b.rowsLayout,div#d.rowsLayout,div#e.rowsLayout {}
也许有更好的方法来解决你的问题,你想把什么应用于所有这些div?
答案 4 :(得分:-1)
按ID
选择它们#b, #d, #e {
/* styles here */
}
所有重复类名称btw的任何原因?你可以将整个事情包装在#layout的div中,然后做一些事情......
#layout div {
/* styles */
}
而不是将该类名添加到div中。
答案 5 :(得分:-2)
看看这个:
div#b:first-of-type {
style here
}
答案 6 :(得分:-3)
为什么不使用:空?
编辑:它也可用作CSS选择器:
:empty { background-color: black; }
更多编辑:
:last-of-type
几乎可以正常工作,但出于某种原因它会变成'a'。看我的小提琴。
答案 7 :(得分:-3)
看来这是可能的,使用:dir或:lang属性。
在2015年使用:lang是首选,因为大多数浏览器都支持它。
示例:
.container {
padding:20px;
}
:lang(ar) {
direction:rtl;
}
:lang(en) {
direction:ltr;
}
.container:lang(en) {
background-color:blue;
}
.container:lang(ar) {
background-color:red;
}
.container .a:lang(en) {
background-color:orange;
}
.container .a:lang(ar) {
background-color:yellow;
}
<div id="searchHere">
<div lang=en>
<div class="container">
l t r
<div class=a>
a
</div>
</div>
<div lang=ar>
<div class="container">
r t l
<div class=a>
a
</div>
</div>
<div>
<div class="container">
r t l
<div class=a>
a
</div>
</div>
<div lang=ar>
<div class="container">
r t l
<div class=a>
a
</div>
</div>
</div>
<div lang=en>
<div class="container">
l t r
<div class=a>
a
</div>
<div lang=ar>
<div class="container">
r t l
<div class=a>
a
<div lang=en>
<div class="container">
l t r
<div class=a>
a
</div>
<div>
<div>
<div lang=en>
<div class="container">
l t r
<div class=a>
a
</div>
</div>
</div>
<div lang=ar>
<div class="container">
r t l
<div class=a>
a
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
虽然这个例子用ltr和rtl证明了这一点,但是理论上lang可以表现为最深的匹配,例如:lang(deeppest-overrides-all)虽然可能不是lang = deepest-覆盖 - 所有都应该在元素上定义。