【发布时间】:2015-08-24 02:23:58
【问题描述】:
我有一个脚本 (JsFiddle here),它检测 li 块元素何时在页面上垂直居中,并为其分配一个 .centered 类以通过 CSS 使其更大。
.centered {
height: 30vh;
background-color: #bbb;
-webkit-transition: height 0.6s;
}
一旦确定了中心元素,我就设法通过以下方式选择下一个兄弟:
.centered + li {
height: 20vh;
background-color: #ccc;
-webkit-transition: height 0.6s;
}
当我尝试在纯 CSS 中选择 .centered 元素之前的同级元素时出现问题
查看 this question from 2011 后,我尝试使用其中一个 cmets 和其他选择器中建议的 :has() 伪类,但没有运气。
这个 CSS4 关系伪类可以做到这一点,但目前不支持:
li:has(+ .centered) {
height: 20vh;
background-color: #Fcc;
-webkit-transition: height 0.6s;
}
我还尝试选择不是.centered 的兄弟元素的li 的last-of-type 元素,但是:not() 仅支持简单的选择器,或者我只是不知道如何正确链接选择器。
这是不工作的选择器:
li:not(.centered ~ li):last-of-type {
height: 20vh;
background-color: #Fcc;
-webkit-transition: height 0.6s;
}
问题:是否有任何伪类和选择器的组合可以在纯 CSS 中发挥作用?
我希望自从提出这些问题以来已经取得了一些进展。
【问题讨论】:
-
**字体真的很让人分心。 -
答案是否定的。放弃并在 Javascript 例程中为前面的
li分配一个唯一的类。 -
您正试图在 CSS 中“倒退”,并让一个元素影响较早发生的事物的样式。做不到。
-
@torazaburo 感谢您的评论,这让我意识到我可以从中间元素之前的元素开始我的 jQuery 选择,然后在 CSS 中使用
.top + li和.top + li + li向下选择。示例:jsfiddle.net/3t4r8xy1/1
标签: html css css-selectors pseudo-class